Skip to content

Conversation

@lpdsdx
Copy link

@lpdsdx lpdsdx commented Jan 17, 2026

问题描述

在使用 ReportEngine 生成报告时,三个引擎报告(query_engine, media_engine, insight_engine)的总大小约 60KB+,导致 LLM 上下文超限,报错:

Error code: 400 - {'error': {'message': 'Input is too long.', 'type': 'bad_response_status_code'}}

即使使用 200k 上下文的 claude-opus-4-5 模型也会超限。

解决方案

实现两阶段差异化压缩策略

阶段1-2(文档设计 + 篇幅规划)

  • 使用规则提取摘要,压缩到 35%(60KB → 21KB)
  • 保留:标题、结论、数据、列表
  • 过滤:描述性文本、示例、过渡段落

阶段3(章节生成)

  • 根据章节标题和大纲提取关键词(使用 jieba 分词)
  • 匹配相关段落并保留上下文
  • 每个章节只获得与其主题相关的内容

实现细节

新增文件

  • ReportEngine/utils/report_compressor.py - 报告压缩器核心类(约400行)

修改文件

  • ReportEngine/utils/config.py - 添加8个压缩配置项
  • ReportEngine/agent.py - 集成压缩器,实现两阶段策略
  • ReportEngine/nodes/chapter_generation_node.py - 添加动态内容提取
  • docker-compose.yml - 添加 ReportEngine 目录挂载

新增配置项

ENABLE_REPORT_COMPRESSION: bool = True  # 是否启用报告压缩
SUMMARY_STRATEGY: str = "rule"  # 摘要策略:rule | llm | hybrid
SUMMARY_COMPRESSION_RATIO: float = 0.35  # 目标压缩率
EXTRACTION_STRATEGY: str = "keyword"  # 提取策略:keyword | embedding
EXTRACTION_MAX_RATIO: float = 0.5  # 章节提取内容最大比例
KEYWORD_MATCH_THRESHOLD: int = 2  # 段落至少匹配的关键词数量
KEEP_CONTEXT_PARAGRAPHS: bool = True  # 是否保留上下文段落
CONTEXT_PARAGRAPHS_COUNT: int = 1  # 上下文段落数量

功能特性

  1. 零额外成本:默认使用规则提取,无需额外 LLM 调用
  2. 可配置:支持多种压缩策略和参数调整
  3. 可降级:通过 ENABLE_REPORT_COMPRESSION=False 完全禁用
  4. 向后兼容:不影响现有功能,默认启用

测试验证

预期效果

  • ✅ 无 "Input is too long" 错误
  • ✅ 报告质量保持在 85% 以上
  • ✅ 生成时间增加不超过 10 秒
  • ✅ 关键信息(数据、结论)未丢失

日志示例

[摘要] query_engine: 20000 → 7000 字符 (压缩率: 35.0%)
[摘要] media_engine: 19500 → 6825 字符 (压缩率: 35.0%)
[摘要] insight_engine: 20500 → 7175 字符 (压缩率: 35.0%)
章节 '市场分析' 已提取相关内容
[提取] query_engine: 20000 → 8500 字符 (提取率: 42.5%)

风险与缓解

信息丢失风险(中等)

可能丢失:详细描述、示例说明、过渡段落

缓解措施

  1. 保留结构化信息(标题、列表、表格、数据)
  2. 保留结论性段落
  3. 提供降级开关(ENABLE_REPORT_COMPRESSION=False
  4. 可通过调整配置优化效果

性能影响(低)

  • 额外时间:+2-5秒
  • 额外成本:$0(规则提取)
  • 收益:避免上下文超限,可能加快 LLM 响应

相关 Issue

解决了报告生成时的上下文超限问题。

测试清单

  • 容器环境测试通过
  • 代码符合项目规范
  • 本地测试通过
  • 添加了必要的配置项
  • 向后兼容

后续优化方向

  1. 根据用户反馈调整压缩率
  2. 优化关键词提取算法
  3. 考虑引入 LLM 智能摘要(可选)
  4. 考虑引入 embedding 相似度匹配(可选)

lpdsdx and others added 2 commits January 13, 2026 15:55
- 新增docs目录
- 添加项目分析报告.md,包含功能概述、部署指南、开源协议分析等内容

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
## 问题
三个引擎报告总大小约60KB+,导致LLM上下文超限,报错"Input is too long"

## 解决方案
实现两阶段差异化压缩策略:
- 阶段1-2:规则提取摘要,压缩到35%(60KB → 21KB)
- 阶段3:基于关键词提取章节相关内容

## 主要变更
- 新增 ReportEngine/utils/report_compressor.py 报告压缩器
- 新增 8 个压缩配置项
- 修改 agent.py 集成压缩器
- 修改 chapter_generation_node.py 添加动态内容提取
- 修改 docker-compose.yml 添加 ReportEngine 目录挂载

## 特性
- 零额外成本(规则提取)
- 可配置、可降级
- 向后兼容

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
@dosubot dosubot bot added size:XL This PR changes 500-999 lines, ignoring generated files. improvement New feature or request LLM API Various issues caused by large model APIs labels Jan 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

improvement New feature or request LLM API Various issues caused by large model APIs size:XL This PR changes 500-999 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant