run.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #!/usr/bin/env python3
  2. """Run demand_grade_agent on one batch of demand names.
  3. 批次选择(哪些词、多少个)由调用方(通常是调度任务)负责,本入口只处理
  4. 传入的这一批,不做分页/自行遍历需求池。
  5. """
  6. from __future__ import annotations
  7. from typing import Any
  8. from agents.demand_grade_agent import create_demand_grade_agent
  9. def build_grade_user_input(demands: list[dict[str, Any]], biz_dt: str) -> str:
  10. """构建传给分级 Agent 的用户消息。"""
  11. demand_lines = []
  12. for item in demands:
  13. pool_id = item.get("pool_id", item.get("id"))
  14. if pool_id is None:
  15. raise ValueError(f"demand 缺少 pool_id: {item!r}")
  16. demand_lines.append(f"[{int(pool_id)}] {str(item['demand_name']).strip()}")
  17. lines_text = "\n".join(demand_lines)
  18. return f"""请对以下 {len(demand_lines)} 个需求词逐一评级(S/A/B/C/D)。
  19. 只处理这一批,不要尝试查找或列举更多需求词。判级完成后调用 batch_save_demand_grades 落库。
  20. 落库时 related_pool_ids 使用列表中对应行的 pool_id;分类、热度、后验等证据请通过工具从数据库查询。
  21. biz_dt={biz_dt}
  22. 需求词列表 [pool_id] demand_name
  23. {lines_text}
  24. """
  25. def main(
  26. demands: list[dict[str, Any]],
  27. biz_dt: str | None = None,
  28. ) -> None:
  29. agent = create_demand_grade_agent()
  30. print(f"demand_grade_agent ready | model={agent.model}")
  31. print(f"tools: {agent.tools.list_tools()}")
  32. print()
  33. if not demands:
  34. raise ValueError("demands 不能为空")
  35. batch_biz_dt = (biz_dt or "").strip()
  36. if not batch_biz_dt:
  37. raise ValueError("biz_dt 不能为空")
  38. user_input = build_grade_user_input(demands, batch_biz_dt)
  39. result = agent.run(user_input)
  40. print(result.content)
  41. print(f"\n[iterations={result.iterations}, tool_calls={result.tool_calls_made}]")
  42. if __name__ == "__main__":
  43. main(
  44. [
  45. {"pool_id": 101, "demand_name": "减脂期加餐"},
  46. {"pool_id": 102, "demand_name": "减脂期"},
  47. ],
  48. biz_dt="20260721",
  49. )