run_agent.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. #!/usr/bin/env python3
  2. """
  3. 多角色历史辩论:观点碰撞 → 终局综合。
  4. 默认**交互**:会询问议题、是否网络附录、是否确认开始。
  5. 一键非交互:加 -y(或 --yes),可配合命令行议题。
  6. """
  7. from __future__ import annotations
  8. import argparse
  9. from pathlib import Path
  10. from dotenv import load_dotenv
  11. from historical_review.cli_interactive import prompt_topic, prompt_yes_no
  12. from historical_review.debate_orchestrator import run_historical_debate
  13. DEFAULT_TOPIC = (
  14. "玄武门之变:官修叙事如何书写?若结合当时宫廷权力与文官修史环境,"
  15. "有哪些记载显得蹊跷?野史与域外材料能否照出缝隙?"
  16. )
  17. def main() -> None:
  18. project_root = Path(__file__).resolve().parents[1]
  19. load_dotenv(project_root / ".env")
  20. load_dotenv()
  21. parser = argparse.ArgumentParser(
  22. description="多角色历史辩论(官修/野史/政治语境/域外/蹊跷辨析 → 综合)",
  23. )
  24. parser.add_argument(
  25. "topic",
  26. nargs="?",
  27. default=None,
  28. help="历史议题;省略则在交互模式下询问",
  29. )
  30. parser.add_argument(
  31. "-y",
  32. "--yes",
  33. action="store_true",
  34. help="非交互:不询问,直接使用参数与默认值(适合脚本/自动化)",
  35. )
  36. parser.add_argument(
  37. "--no-evidence",
  38. action="store_true",
  39. help="不抓取维基/检索附录(若在交互模式且未指定本项,仍会询问是否启用)",
  40. )
  41. parser.add_argument(
  42. "--debate-temp",
  43. type=float,
  44. default=0.72,
  45. help="辩论轮温度",
  46. )
  47. parser.add_argument(
  48. "--synth-temp",
  49. type=float,
  50. default=0.22,
  51. help="终局综合温度",
  52. )
  53. args = parser.parse_args()
  54. topic = args.topic
  55. use_evidence = not args.no_evidence
  56. if args.yes:
  57. if topic is None or not str(topic).strip():
  58. topic = DEFAULT_TOPIC
  59. use_evidence = not args.no_evidence
  60. else:
  61. print("=" * 56)
  62. print(" 多角色历史辩论 — 请先确认选项(加 -y 可跳过本流程)")
  63. print("=" * 56)
  64. if topic is None or not str(topic).strip():
  65. topic = prompt_topic(DEFAULT_TOPIC)
  66. else:
  67. print(f"\n议题(来自命令行):{topic}\n")
  68. if args.no_evidence:
  69. use_evidence = False
  70. print("已指定 --no-evidence:不抓取维基/检索附录。\n")
  71. else:
  72. use_evidence = prompt_yes_no("是否启用维基与检索作为考据附录?", default=True)
  73. print()
  74. if not prompt_yes_no(
  75. "即将依次调用:5 角色第一轮 + 1 次秘书摘要 + 5 角色第二轮 + 1 次终局综合(约 12 次 LLM 请求),确认开始?",
  76. default=True,
  77. ):
  78. print("已取消。")
  79. sys.exit(0)
  80. print()
  81. report = run_historical_debate(
  82. str(topic).strip(),
  83. use_evidence_bundle=use_evidence,
  84. debate_temperature=args.debate_temp,
  85. synthesizer_temperature=args.synth_temp,
  86. )
  87. print(report)
  88. if __name__ == "__main__":
  89. main()