| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- """从 demand_grade + demand_video_expansion 选取一条记录,调用 find_agent。"""
- from __future__ import annotations
- import argparse
- import json
- import logging
- from agents.find_agent.demand_run import (
- build_find_agent_user_input,
- build_run_input_payload,
- discover_videos_for_demand,
- list_find_demand_contexts,
- pick_find_demand_context,
- serialize_find_demand_context,
- )
- logging.basicConfig(
- level=logging.INFO,
- format="%(asctime)s [%(levelname)s] %(name)s: %(message)s",
- )
- logger = logging.getLogger(__name__)
- def _load_target_context(args: argparse.Namespace):
- if args.list_only:
- biz_dt, contexts = list_find_demand_contexts(args.biz_dt)
- print(
- json.dumps(
- {
- "biz_dt": biz_dt,
- "total": len(contexts),
- "items": [serialize_find_demand_context(ctx) for ctx in contexts],
- },
- ensure_ascii=False,
- indent=2,
- )
- )
- return None
- ctx = pick_find_demand_context(
- args.biz_dt,
- index=args.index,
- demand_grade_id=args.demand_grade_id,
- )
- if ctx is None:
- biz_dt, contexts = list_find_demand_contexts(args.biz_dt)
- raise SystemExit(
- "未找到匹配的待执行记录。"
- f" biz_dt={biz_dt}, total={len(contexts)}, index={args.index},"
- f" demand_grade_id={args.demand_grade_id}"
- )
- return ctx
- def main() -> None:
- parser = argparse.ArgumentParser(
- description="从 S/A 需求拓展点位中选取一条记录,调用 find_agent。",
- )
- parser.add_argument("--biz-dt", help="业务日 YYYYMMDD,默认取最新 demand_grade.biz_dt")
- parser.add_argument(
- "--index",
- type=int,
- default=0,
- help="在未指定 demand_grade_id 时,选取第几条记录(从 0 开始)",
- )
- parser.add_argument("--demand-grade-id", type=int, help="指定 demand_grade.id")
- parser.add_argument(
- "--list-only",
- action="store_true",
- help="只列出可执行记录,不调用 Agent",
- )
- parser.add_argument(
- "--dry-run",
- action="store_true",
- help="只打印组装后的上下文与 prompt,不调用 Agent",
- )
- parser.add_argument(
- "--force",
- action="store_true",
- help="忽略当天已执行记录,强制重跑",
- )
- args = parser.parse_args()
- ctx = _load_target_context(args)
- if ctx is None:
- return
- summary = serialize_find_demand_context(ctx)
- run_payload = build_run_input_payload(ctx)
- print("CONTEXT " + json.dumps(summary, ensure_ascii=False), flush=True)
- print("RUN_PAYLOAD " + json.dumps(run_payload, ensure_ascii=False), flush=True)
- if args.dry_run:
- user_input = build_find_agent_user_input(ctx, "<pre-create-on-run>")
- print("PROMPT_BEGIN", flush=True)
- print(user_input, flush=True)
- print("PROMPT_END", flush=True)
- return
- execution = discover_videos_for_demand(ctx, force=args.force)
- if execution.skipped:
- print("SKIPPED " + json.dumps({"skip_reason": execution.skip_reason}, ensure_ascii=False), flush=True)
- return
- agent_result = execution.agent_result
- if agent_result is None:
- raise SystemExit("Agent 未返回结果")
- print(
- "AGENT_REPORT "
- + json.dumps(
- {
- "run_id": execution.run_id,
- "iterations": agent_result.iterations,
- "content_chars": len(agent_result.content or ""),
- },
- ensure_ascii=False,
- ),
- flush=True,
- )
- print("FINAL_CONTENT_BEGIN", flush=True)
- print(agent_result.content or "", flush=True)
- print("FINAL_CONTENT_END", flush=True)
- if __name__ == "__main__":
- main()
|