main.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. """RequirementClarifierAgent 命令行入口。"""
  2. from __future__ import annotations
  3. import argparse
  4. import json
  5. import sys
  6. from pathlib import Path
  7. from dotenv import load_dotenv
  8. from src.agents import build_agent_team
  9. from src.config import ConfigurationError, LLMSettings
  10. from src.tools import create_tool_registry
  11. from src.workflow import RequirementClarifierWorkflow, WorkflowExecutionError
  12. PROJECT_ROOT = Path(__file__).resolve().parent
  13. DEFAULT_INPUT = PROJECT_ROOT / "data" / "sample_requirement.txt"
  14. DEFAULT_OUTPUT = PROJECT_ROOT / "outputs" / "requirement_report.md"
  15. def build_parser() -> argparse.ArgumentParser:
  16. parser = argparse.ArgumentParser(
  17. description="使用 HelloAgents 多智能体协作澄清需求并生成技术方案"
  18. )
  19. parser.add_argument(
  20. "--input",
  21. type=Path,
  22. default=DEFAULT_INPUT,
  23. help="UTF-8 需求文本路径",
  24. )
  25. parser.add_argument(
  26. "--output",
  27. type=Path,
  28. default=DEFAULT_OUTPUT,
  29. help="最终 Markdown 报告路径",
  30. )
  31. parser.add_argument(
  32. "--audit-only",
  33. action="store_true",
  34. help="只运行确定性需求完整度检查,不调用 LLM",
  35. )
  36. parser.add_argument(
  37. "--show-intermediate",
  38. action="store_true",
  39. help="在控制台显示三个专家的中间结果",
  40. )
  41. return parser
  42. def main(argv: list[str] | None = None) -> int:
  43. args = build_parser().parse_args(argv)
  44. try:
  45. requirement = args.input.read_text(encoding="utf-8").strip()
  46. except FileNotFoundError:
  47. print(f"错误:找不到输入文件 {args.input}", file=sys.stderr)
  48. return 2
  49. except UnicodeDecodeError:
  50. print(f"错误:输入文件必须使用 UTF-8 编码:{args.input}", file=sys.stderr)
  51. return 2
  52. except OSError as exc:
  53. print(f"错误:无法读取输入文件 {args.input}:{exc}", file=sys.stderr)
  54. return 2
  55. registry = create_tool_registry()
  56. if args.audit_only:
  57. tool = registry.get_tool("requirement_audit")
  58. if tool is None:
  59. print("错误:需求初检工具未注册", file=sys.stderr)
  60. return 2
  61. response = tool.run({"requirement_text": requirement})
  62. print(response)
  63. payload = json.loads(response)
  64. return 0 if payload.get("ok") else 2
  65. load_dotenv(PROJECT_ROOT / ".env")
  66. try:
  67. settings = LLMSettings.from_env()
  68. team = build_agent_team(settings, registry)
  69. workflow = RequirementClarifierWorkflow(team, registry)
  70. result = workflow.run(requirement)
  71. output_path = workflow.save_report(result, args.output)
  72. except (ConfigurationError, WorkflowExecutionError, OSError) as exc:
  73. print(f"错误:{exc}", file=sys.stderr)
  74. return 2
  75. if args.show_intermediate:
  76. print("\n=== 需求分析师 ===\n" + result.analysis)
  77. print("\n=== 方案架构师 ===\n" + result.architecture)
  78. print("\n=== 风险审查员 ===\n" + result.risk_review)
  79. print(
  80. f"完成:报告已保存到 {output_path};"
  81. f"结构评分 {result.quality.get('score', 0)}/100。"
  82. )
  83. return 0
  84. if __name__ == "__main__":
  85. raise SystemExit(main())