Skip to content

上下文压缩系统 + 提示词优化#229

Merged
RaQiu merged 15 commits intoRTGS2017:mainfrom
RaQiu:skill
Feb 20, 2026
Merged

上下文压缩系统 + 提示词优化#229
RaQiu merged 15 commits intoRTGS2017:mainfrom
RaQiu:skill

Conversation

@RaQiu
Copy link
Collaborator

@RaQiu RaQiu commented Feb 20, 2026

Summary

  • 上下文压缩系统完善:运行时压缩完成后,在会话末尾追加 role="info" 的【已压缩上下文】标记,持久化到磁盘但自动过滤不进入 LLM 上下文
  • 压缩摘要滚动继承:每次新会话启动压缩时,继承上一个会话的压缩记录,实现跨会话累积上下文(不丢失更早对话的关键信息)
  • 压缩提示词优化:改为结构化 6 分区 checklist 格式(用户意图/关键决策/已完成工作/问题与修复/待办/下一步),max_tokens 提升至 5500
  • 前端 info 标记渲染:MessageItem 新增 info 角色,以居中分隔线样式展示,不影响正常消息流

Test plan

  • 发送多轮对话使 token 超过 100k 阈值,验证运行时压缩触发后:
    • 前端出现【已压缩上下文】分隔线
    • 重启后该标记仍然可见
    • 后续对话不会将 info 消息发送给 LLM
  • 新建会话,验证启动压缩正确继承上一个会话的 compact 记录
  • 上一个会话末尾有【已压缩上下文】标记时,不再注入该会话的原始消息(避免重复)
  • 未登录状态下压缩功能正常(走本地 API 配置)

RaQiu and others added 15 commits February 17, 2026 10:26
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
前端 Agentic Tool Loop 已完整处理工具提取→执行→重注入循环,
后台分析器纯属重复调用 LLM。删除 background_analyzer.py 及其
两份提示词文件,清理所有调用点和文档引用。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
base64 仅增加 33% 传输开销且后端自己编码后又自己解码,
JSON 中换行已转义不会破坏 SSE 分帧。现在 data 字段直接
是 JSON 字符串,前端 JSON.parse 即可。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
新增 apiserver/context_compressor.py:
- litellm.token_counter() 计算消息 token 数
- 超过 100k 阈值时保留 system prompt + 最近 20 条消息
- 调用 gpt-4.1-nano 将早期消息生成摘要注入上下文
- NagaModel 登录态自动走网关,未登录走本地 API 配置

在 api_server.py 的 /chat/stream 中,build_conversation_messages()
之后、agentic loop 之前插入 compress_context() 调用。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 启动压缩:新会话启动时将上一会话历史压缩为摘要,注入 system prompt
  的 <compact> 标签中,替代原有的 raw prev_messages 注入
- 运行时压缩:agentic loop 每轮开始前检查 token 是否超限(100k),
  超限时压缩早期 loop 消息,摘要同样写入 <compact> 标签
- 已压缩检测:若上一会话已是压缩产物,直接提取 <compact> 内容复用
- 前端 SSE 进度:compress_start/progress/end 事件驱动压缩状态显示
- Bug 修复:MessageView 压缩提示使用非阻塞 setTimeout 替代 await

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
参考 Claude Code compaction 设计,将压缩提示词从开放式摘要改为
强制 6 分区结构化输出(用户意图/关键决策/已完成工作/问题与修复/
待办事项/下一步行动),防止模型遗漏关键信息。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- compress_for_startup() 接受 previous_compact 参数,合并旧压缩记录与新对话
- message_manager 持久化 compact 字段到会话 JSON
- 新增 _get_previous_session_id/get_session_compact/set_session_compact
- max_tokens 2000→5000, timeout 30→60s,支持 3k-5k 字输出
- SUMMARIZE_PROMPT 增加两部分输入说明和继承规则
- 移除 is_already_compact(),改用 session metadata 存储压缩结果

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 压缩完成后在会话末尾追加 role="info" 的【已压缩上下文】标记
- info 消息持久化到磁盘,重启后仍可见,但 build_conversation_messages
  自动过滤,永远不会发送给 LLM
- 前端 MessageItem 将 info 渲染为居中分隔线样式
- 压缩检测方式改为检查上一个会话最后消息是否为 info 标记
- max_tokens 5000 → 5500 防止略微溢出

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@RaQiu RaQiu merged commit 518a486 into RTGS2017:main Feb 20, 2026
Yidhar pushed a commit to Yidhar/Embla_System that referenced this pull request Mar 3, 2026
上下文压缩系统 + 提示词优化
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant