run_search_agent.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. """
  2. Search Agent 统一入口
  3. 简化为薄壳,所有逻辑委托给 application 层。
  4. """
  5. from __future__ import annotations
  6. import asyncio
  7. import logging
  8. import os
  9. from uuid import uuid4
  10. from dotenv import load_dotenv
  11. from src.config.settings import get_config
  12. from src.application import ApplicationRunner
  13. from src.harness.search_agent import (
  14. finalize_search_agent_log,
  15. log_environment_profile,
  16. load_environment_profile,
  17. print_run_plan,
  18. setup_search_agent_logging,
  19. validate_prerequisites,
  20. )
  21. load_dotenv()
  22. setup_search_agent_logging()
  23. logging.getLogger("agent").setLevel(logging.CRITICAL)
  24. logger = logging.getLogger(__name__)
  25. async def main() -> None:
  26. """主入口"""
  27. # 前置检查
  28. validate_prerequisites()
  29. # 加载配置
  30. config = get_config()
  31. environment = load_environment_profile()
  32. log_environment_profile(environment)
  33. # 读取参数
  34. query = os.getenv("PIPELINE_QUERY", "当谈到毛主席的生平、丰功伟绩、伟人伟绩、老年人会关注什么?")
  35. demand_id = os.getenv("PIPELINE_DEMAND_ID", "1")
  36. trace_id = str(uuid4())
  37. logger.info("Trace ID: %s", trace_id)
  38. # 打印运行计划
  39. from src.application.runner import AgentBudget
  40. budget = AgentBudget.from_config(config)
  41. budget.validate()
  42. run_plan = print_run_plan(query=query, demand_id=demand_id, budget=budget, trace_id=trace_id)
  43. run_plan["environment"] = {
  44. "env_name": environment.env_name,
  45. "use_db_policy": environment.use_db_policy,
  46. "strategy_source": environment.strategy_source,
  47. }
  48. # 执行
  49. runner = ApplicationRunner(config)
  50. summary = await runner.run(
  51. query=query,
  52. demand_id=demand_id,
  53. trace_id=trace_id,
  54. use_db_policy=environment.use_db_policy,
  55. policy_override=environment.strategy_override,
  56. )
  57. # 输出摘要
  58. summary.log()
  59. finalize_search_agent_log(trace_id)
  60. # 自动触发知识总结
  61. if os.getenv("ENABLE_KNOWLEDGE_SUMMARY", "false").lower() == "true":
  62. try:
  63. from agent.llm.openrouter import openrouter_llm_call
  64. from src.knowledge import trigger_knowledge_summary
  65. logger.info("触发知识总结...")
  66. await trigger_knowledge_summary(llm_call=openrouter_llm_call)
  67. except Exception as exc:
  68. logger.warning("知识总结失败: %s", exc)
  69. if not summary.success:
  70. raise SystemExit(1)
  71. if __name__ == "__main__":
  72. asyncio.run(main())