| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- """RequirementClarifierAgent 命令行入口。"""
- from __future__ import annotations
- import argparse
- import json
- import sys
- from pathlib import Path
- from dotenv import load_dotenv
- from src.agents import build_agent_team
- from src.config import ConfigurationError, LLMSettings
- from src.tools import create_tool_registry
- from src.workflow import RequirementClarifierWorkflow, WorkflowExecutionError
- PROJECT_ROOT = Path(__file__).resolve().parent
- DEFAULT_INPUT = PROJECT_ROOT / "data" / "sample_requirement.txt"
- DEFAULT_OUTPUT = PROJECT_ROOT / "outputs" / "requirement_report.md"
- def build_parser() -> argparse.ArgumentParser:
- parser = argparse.ArgumentParser(
- description="使用 HelloAgents 多智能体协作澄清需求并生成技术方案"
- )
- parser.add_argument(
- "--input",
- type=Path,
- default=DEFAULT_INPUT,
- help="UTF-8 需求文本路径",
- )
- parser.add_argument(
- "--output",
- type=Path,
- default=DEFAULT_OUTPUT,
- help="最终 Markdown 报告路径",
- )
- parser.add_argument(
- "--audit-only",
- action="store_true",
- help="只运行确定性需求完整度检查,不调用 LLM",
- )
- parser.add_argument(
- "--show-intermediate",
- action="store_true",
- help="在控制台显示三个专家的中间结果",
- )
- return parser
- def main(argv: list[str] | None = None) -> int:
- args = build_parser().parse_args(argv)
- try:
- requirement = args.input.read_text(encoding="utf-8").strip()
- except FileNotFoundError:
- print(f"错误:找不到输入文件 {args.input}", file=sys.stderr)
- return 2
- except UnicodeDecodeError:
- print(f"错误:输入文件必须使用 UTF-8 编码:{args.input}", file=sys.stderr)
- return 2
- except OSError as exc:
- print(f"错误:无法读取输入文件 {args.input}:{exc}", file=sys.stderr)
- return 2
- registry = create_tool_registry()
- if args.audit_only:
- tool = registry.get_tool("requirement_audit")
- if tool is None:
- print("错误:需求初检工具未注册", file=sys.stderr)
- return 2
- response = tool.run({"requirement_text": requirement})
- print(response)
- payload = json.loads(response)
- return 0 if payload.get("ok") else 2
- load_dotenv(PROJECT_ROOT / ".env")
- try:
- settings = LLMSettings.from_env()
- team = build_agent_team(settings, registry)
- workflow = RequirementClarifierWorkflow(team, registry)
- result = workflow.run(requirement)
- output_path = workflow.save_report(result, args.output)
- except (ConfigurationError, WorkflowExecutionError, OSError) as exc:
- print(f"错误:{exc}", file=sys.stderr)
- return 2
- if args.show_intermediate:
- print("\n=== 需求分析师 ===\n" + result.analysis)
- print("\n=== 方案架构师 ===\n" + result.architecture)
- print("\n=== 风险审查员 ===\n" + result.risk_review)
- print(
- f"完成:报告已保存到 {output_path};"
- f"结构评分 {result.quality.get('score', 0)}/100。"
- )
- return 0
- if __name__ == "__main__":
- raise SystemExit(main())
|