马一丁

Update the parameter settings in report_engine_only.py

@@ -496,6 +496,9 @@ python report_engine_only.py --skip-markdown @@ -496,6 +496,9 @@ python report_engine_only.py --skip-markdown
496 # Show verbose logging 496 # Show verbose logging
497 python report_engine_only.py --verbose 497 python report_engine_only.py --verbose
498 498
  499 +# Turn on GraphRAG via CLI and adjust query cap (falls back to .env, default off)
  500 +python report_engine_only.py --graphrag-enabled true --graphrag-max-queries 3
  501 +
499 # Show help information 502 # Show help information
500 python report_engine_only.py --help 503 python report_engine_only.py --help
501 ``` 504 ```
@@ -511,6 +514,7 @@ python report_engine_only.py --help @@ -511,6 +514,7 @@ python report_engine_only.py --help
511 - PDF reports (if dependencies available) saved to `final_reports/pdf/` directory 514 - PDF reports (if dependencies available) saved to `final_reports/pdf/` directory
512 - Markdown reports (disable with `--skip-markdown`) saved to `final_reports/md/` directory 515 - Markdown reports (disable with `--skip-markdown`) saved to `final_reports/md/` directory
513 - File naming format: `final_report_{topic}_{timestamp}.html/pdf/md` 516 - File naming format: `final_report_{topic}_{timestamp}.html/pdf/md`
  517 +6. **Optional GraphRAG**: CLI flags override `.env`; if neither is set the feature stays off
514 518
515 **Notes:** 519 **Notes:**
516 520
@@ -501,6 +501,9 @@ python report_engine_only.py --skip-markdown @@ -501,6 +501,9 @@ python report_engine_only.py --skip-markdown
501 # 显示详细日志 501 # 显示详细日志
502 python report_engine_only.py --verbose 502 python report_engine_only.py --verbose
503 503
  504 +# 按需开启 GraphRAG 并调整查询次数(未传参则遵循 .env,默认关闭)
  505 +python report_engine_only.py --graphrag-enabled true --graphrag-max-queries 3
  506 +
504 # 查看帮助信息 507 # 查看帮助信息
505 python report_engine_only.py --help 508 python report_engine_only.py --help
506 ``` 509 ```
@@ -516,6 +519,7 @@ python report_engine_only.py --help @@ -516,6 +519,7 @@ python report_engine_only.py --help
516 - PDF报告(如果有依赖)保存到 `final_reports/pdf/` 目录 519 - PDF报告(如果有依赖)保存到 `final_reports/pdf/` 目录
517 - Markdown报告(可用 `--skip-markdown` 关闭)保存到 `final_reports/md/` 目录 520 - Markdown报告(可用 `--skip-markdown` 关闭)保存到 `final_reports/md/` 目录
518 - 文件命名格式:`final_report_{主题}_{时间戳}.html/pdf/md` 521 - 文件命名格式:`final_report_{主题}_{时间戳}.html/pdf/md`
  522 +6. **GraphRAG 可选启用**:命令行参数优先于 `.env`,若两者均未配置则保持关闭状态
519 523
520 **注意事项:** 524 **注意事项:**
521 525
@@ -29,6 +29,7 @@ from datetime import datetime @@ -29,6 +29,7 @@ from datetime import datetime
29 from typing import Dict, Any, Optional 29 from typing import Dict, Any, Optional
30 30
31 from loguru import logger 31 from loguru import logger
  32 +from config import settings as global_settings, Settings
32 33
33 # 全局配置 34 # 全局配置
34 VERBOSE = False 35 VERBOSE = False
@@ -221,7 +222,12 @@ def extract_query_from_reports(latest_files: Dict[str, str]) -> str: @@ -221,7 +222,12 @@ def extract_query_from_reports(latest_files: Dict[str, str]) -> str:
221 return "综合分析报告" 222 return "综合分析报告"
222 223
223 224
224 -def generate_report(reports: list[str], query: str, pdf_available: bool) -> Dict[str, Any]: 225 +def generate_report(
  226 + reports: list[str],
  227 + query: str,
  228 + pdf_available: bool,
  229 + agent_config: Optional[Settings] = None
  230 +) -> Dict[str, Any]:
225 """ 231 """
226 调用Report Engine生成报告 232 调用Report Engine生成报告
227 233
@@ -229,6 +235,7 @@ def generate_report(reports: list[str], query: str, pdf_available: bool) -> Dict @@ -229,6 +235,7 @@ def generate_report(reports: list[str], query: str, pdf_available: bool) -> Dict
229 reports: 报告内容列表 235 reports: 报告内容列表
230 query: 报告主题 236 query: 报告主题
231 pdf_available: PDF功能是否可用 237 pdf_available: PDF功能是否可用
  238 + agent_config: ReportAgent 配置(命令行可覆盖 .env)
232 239
233 Returns: 240 Returns:
234 Dict[str, Any]: 包含生成结果的字典 241 Dict[str, Any]: 包含生成结果的字典
@@ -244,7 +251,7 @@ def generate_report(reports: list[str], query: str, pdf_available: bool) -> Dict @@ -244,7 +251,7 @@ def generate_report(reports: list[str], query: str, pdf_available: bool) -> Dict
244 251
245 # 初始化Report Agent 252 # 初始化Report Agent
246 logger.info("正在初始化 Report Engine...") 253 logger.info("正在初始化 Report Engine...")
247 - agent = ReportAgent() 254 + agent = ReportAgent(config=agent_config)
248 255
249 # 定义流式事件处理器 256 # 定义流式事件处理器
250 def stream_handler(event_type: str, payload: Dict[str, Any]): 257 def stream_handler(event_type: str, payload: Dict[str, Any]):
@@ -407,6 +414,19 @@ def save_markdown(document_ir_path: str, query: str) -> Optional[str]: @@ -407,6 +414,19 @@ def save_markdown(document_ir_path: str, query: str) -> Optional[str]:
407 return None 414 return None
408 415
409 416
  417 +def parse_bool_arg(value: str) -> bool:
  418 + """将字符串解析为布尔值,用于命令行参数"""
  419 + true_values = {'true', '1', 'yes', 'y', 'on'}
  420 + false_values = {'false', '0', 'no', 'n', 'off'}
  421 +
  422 + value_lower = value.lower()
  423 + if value_lower in true_values:
  424 + return True
  425 + if value_lower in false_values:
  426 + return False
  427 + raise argparse.ArgumentTypeError("GRAPHRAG_ENABLED 仅接受 true/false")
  428 +
  429 +
410 def parse_arguments(): 430 def parse_arguments():
411 """解析命令行参数""" 431 """解析命令行参数"""
412 parser = argparse.ArgumentParser( 432 parser = argparse.ArgumentParser(
@@ -449,9 +469,41 @@ def parse_arguments(): @@ -449,9 +469,41 @@ def parse_arguments():
449 help='显示详细日志信息' 469 help='显示详细日志信息'
450 ) 470 )
451 471
  472 + parser.add_argument(
  473 + '--graphrag-enabled',
  474 + type=parse_bool_arg,
  475 + default=None,
  476 + help='是否开启GraphRAG,默认遵循 .env(未设置则关闭)'
  477 + )
  478 +
  479 + parser.add_argument(
  480 + '--graphrag-max-queries',
  481 + type=int,
  482 + default=None,
  483 + help='GraphRAG 每章节最大查询次数(默认遵循 .env,且仅在开启时生效)'
  484 + )
  485 +
452 return parser.parse_args() 486 return parser.parse_args()
453 487
454 488
  489 +def build_agent_config(args) -> Settings:
  490 + """基于 .env 配置并融合命令行覆盖项生成最终配置"""
  491 + config_overrides: Dict[str, Any] = {}
  492 +
  493 + if args.graphrag_enabled is not None:
  494 + config_overrides['GRAPHRAG_ENABLED'] = args.graphrag_enabled
  495 + if args.graphrag_max_queries is not None:
  496 + if args.graphrag_max_queries <= 0:
  497 + logger.warning("GRAPHRAG_MAX_QUERIES 必须大于 0,本次将继续使用 .env/默认值")
  498 + else:
  499 + config_overrides['GRAPHRAG_MAX_QUERIES'] = args.graphrag_max_queries
  500 +
  501 + if not config_overrides:
  502 + return global_settings
  503 +
  504 + return global_settings.model_copy(update=config_overrides)
  505 +
  506 +
455 def main(): 507 def main():
456 """主函数""" 508 """主函数"""
457 # 解析命令行参数 509 # 解析命令行参数
@@ -466,6 +518,15 @@ def main(): @@ -466,6 +518,15 @@ def main():
466 logger.info("╚" + "═" * 68 + "╝") 518 logger.info("╚" + "═" * 68 + "╝")
467 logger.info("\n") 519 logger.info("\n")
468 520
  521 + # 合并 GraphRAG 相关配置(命令行 > .env > 默认关闭)
  522 + agent_config = build_agent_config(args)
  523 + logger.info(
  524 + f"GraphRAG 开关: {agent_config.GRAPHRAG_ENABLED} "
  525 + "(优先级:命令行 > .env > 默认False)"
  526 + )
  527 + if agent_config.GRAPHRAG_ENABLED:
  528 + logger.info(f"GraphRAG 查询上限: {agent_config.GRAPHRAG_MAX_QUERIES}")
  529 +
469 # 步骤 1: 检查依赖 530 # 步骤 1: 检查依赖
470 pdf_available, _ = check_dependencies() 531 pdf_available, _ = check_dependencies()
471 markdown_enabled = not args.skip_markdown 532 markdown_enabled = not args.skip_markdown
@@ -498,7 +559,7 @@ def main(): @@ -498,7 +559,7 @@ def main():
498 logger.info(f"使用报告主题: {query}") 559 logger.info(f"使用报告主题: {query}")
499 560
500 # 步骤 3: 生成报告 561 # 步骤 3: 生成报告
501 - result = generate_report(reports, query, pdf_available) 562 + result = generate_report(reports, query, pdf_available, agent_config)
502 563
503 # 步骤 4: 保存文件 564 # 步骤 4: 保存文件
504 logger.info("\n" + "=" * 70) 565 logger.info("\n" + "=" * 70)