Showing
3 changed files
with
72 additions
and
3 deletions
| @@ -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) |
-
Please register or login to post a comment