feat(context): 微压缩引入按工具差异化的重要性感知摘要#329
Conversation
旧工具结果在 micro-compact 时统一被替换为"[Old tool result content cleared]", 丢失关键调试上下文(如 bash 错误输出、read_file 文件路径、grep 匹配结果)。 引入 ContentSummarizer 机制,为每个内置工具注册约 200 字符的摘要策略: - bash: 保留退出状态 + 末尾 5 行 + 工作目录 - read_file: 保留文件路径 + 行数 + 首尾行片段 - write_file: 保留文件路径与写入字节数 - edit: 保留编辑路径与替换范围 - grep: 保留搜索根目录 + 匹配计数 + 前几个文件名 - glob: 保留匹配计数与前几个文件名 - webfetch: 保留 URL 与截断标记 无 summarizer 的工具维持原有清除行为,完全向后兼容。
|
/code 解决合并冲突 |
已完成已按你的指令完成合并冲突修复,并推送到当前 PR 分支 处理结果
验证
提交与推送
|
Generated with [codeagent](https://github.com/qbox/codeagent) Co-authored-by: Yumiue <188874804+Yumiue@users.noreply.github.com>
|
/simplify |
处理结果已完成你要求的三件事:检查历史评论、修复值得修复的问题、并使用 code-simplifier 做简化后提交推送。 已完成项
说明
|
Codecov Report❌ Patch coverage is 📢 Thoughts on this report? Let us know! |
Generated with [codeagent](https://github.com/qbox/codeagent) Co-authored-by: Yumiue <188874804+Yumiue@users.noreply.github.com>
|
/review |
|
/simplify |
|
/review |
完成结果已按要求完成:检查历史评论中的未解决项、修复值得修复的问题、并使用 code-simplifier 子代理做简化审视后落地低风险优化。 本次修复
提交与推送
未做事项
|
Generated with [codeagent](https://github.com/qbox/codeagent) Co-authored-by: Yumiue <188874804+Yumiue@users.noreply.github.com>
|
/simplify |
|
/review |
完成结果已按本次 本次处理
未做事项
|
Generated with [codeagent](https://github.com/qbox/codeagent) Co-authored-by: Yumiue <188874804+Yumiue@users.noreply.github.com>
|
/simplify |
|
/review |
完成结果已按本次触发评论执行:先检查历史评论中的未解决 review 项,评估后修复可低风险落地的问题,并完成一次简化整理后提交推送。 本次修复
代码简化说明
本轮未改动
验证
提交与推送
|
|
/simplify |
…eviews Generated with [codeagent](https://github.com/qbox/codeagent) Co-authored-by: Yumiue <188874804+Yumiue@users.noreply.github.com>
完成结果已按本次触发要求完成:先读取历史评论并定位未解决 review,修复可落地问题,再执行“代码简化”审视(子代理两次 502,已由主流程完成等价简化审查),最后提交并推送到当前 PR 分支。 本次修复
验证
提交与推送
未完成项
|
旧工具结果在 micro-compact 时统一被替换为"[Old tool result content cleared]", 丢失关键调试上下文(如 bash 错误输出、read_file 文件路径、grep 匹配结果)。 引入 ContentSummarizer 机制,为每个内置工具注册约 200 字符的摘要策略: - bash: 保留退出状态 + 末尾 5 行 + 工作目录 - read_file: 保留文件路径 + 行数 + 首尾行片段 - write_file: 保留文件路径与写入字节数 - edit: 保留编辑路径与替换范围 - grep: 保留搜索根目录 + 匹配计数 + 前几个文件名 - glob: 保留匹配计数与前几个文件名 - webfetch: 保留 URL 与截断标记 无 summarizer 的工具维持原有清除行为,完全向后兼容。
- 统一 builder 构造逻辑,使用 newDefaultBuilder 和 newPromptSources 辅助函数 - 优化 summarizeOrClear 实现,避免重复渲染内容 - 合并并增强测试覆盖,补充边界条件和回归场景 - 改进内置摘要器实现,使用结构化统计信息替代原始内容 - 新增辅助函数提升代码可维护性和安全性(sanitization) 所有测试通过,覆盖率符合项目要求。
|
/review |
|
/simplify |
完成结果已按本次触发要求执行:检查历史评论并定位未解决 review,修复可落地问题,尝试 code-simplifier 子代理后完成主流程等价简化审视,最后提交并推送到当前 PR 头分支。 已处理内容
验证
提交与推送
未执行项
|
Generated with [codeagent](https://github.com/qbox/codeagent) Co-authored-by: Yumiue <188874804+Yumiue@users.noreply.github.com>
|
/review |
| continue | ||
| } | ||
| if !hasCompactableToolContent(cloned, span, compactableIDs) { | ||
| compactableContents := compactableToolMessageContents(cloned, span, compactableIDs) |
There was a problem hiding this comment.
这里在判断是否属于“最近保留的 tool span”之前,就先调用 compactableToolMessageContents 渲染并缓存整段内容。对于默认保留的最近 2 个 span,这些计算随后会在 retainedCompactableSpans < retainedToolSpans 分支被直接丢弃,形成额外 CPU/分配开销。建议先做 retained 判断,再在需要压缩时提取内容。
| } | ||
|
|
||
| // RegisterBuiltinSummarizers 将所有内置工具的内容摘要器注册到 Registry。 | ||
| // 应在所有工具注册完成后调用一次。 |
There was a problem hiding this comment.
注释写的是“应在所有工具注册完成后调用一次”,但当前接入点在 internal/app/bootstrap.go 中是 memo 工具注册前调用。实现本身也没有“必须最后且仅一次”的硬约束。建议统一语义:要么调整调用时机,要么放宽注释为“启动装配阶段注册内置摘要器,可重复调用覆盖同名条目”。
|
@xgopilot 仔细审查给定的 PR 代码变更。这个 PR 的核心目的是在保留大模型关键上下文的同时,对各种工具的长文本输出进行压缩(约 200 字符)。你的核心任务是寻找可能导致内存泄漏(Memory Leaks)、中文字符截断乱码(UTF-8 破坏)、接口依赖设计不当以及边缘场景崩溃的逻辑缺陷。不要关注琐碎的语法格式。 Review Checkpoints (重点审查清单)请严格按照以下清单对代码进行检查:
Output Format请以 Markdown 格式输出你的审查报告。要求直奔主题,结构如下:
如果你在上述清单中未发现问题,请在报告中明确回复“针对 [第 X 项],代码已通过审查,未发现问题”。 |
🛑 严重缺陷 (Blockers)
|
|
/simplify |
ResultCompleted the requested flow: checked unresolved review comments, applied worthwhile fixes, attempted code-simplifier agent, and pushed changes. What was fixed
Simplifier agent
Verification
Commit & Push
Not done
|
Generated with [codeagent](https://github.com/qbox/codeagent) Co-authored-by: Yumiue <188874804+Yumiue@users.noreply.github.com>
fix(context/tools): resolve unresolved simplify review items
|
/code 解决冲突 |
处理结果已完成“解决冲突”,并推送到当前 PR 分支 具体操作
验证
|
Generated with [codeagent](https://github.com/qbox/codeagent) Co-authored-by: Yumiue <188874804+Yumiue@users.noreply.github.com>
Summary
ContentSummarizer函数类型,允许按工具注册摘要策略,替代原有的统一清除占位MicroCompactSummarizerSource接口解耦 context 包与 tools 包,遵循"不内嵌工具逻辑"架构规则[Old tool result content cleared]行为,完全向后兼容涉及文件
internal/tools/micro_compact_summarizer.gointernal/tools/micro_compact_summarizers_builtin.gointernal/tools/micro_compact_summarizer_test.gointernal/context/microcompact_summarizer_test.gointernal/tools/registry.gointernal/tools/manager.gointernal/context/types.gointernal/context/builder.gointernal/context/microcompact.gointernal/context/microcompact_test.gointernal/app/bootstrap.gointernal/runtime/runtime_test.gointernal/runtime/runtime_remaining_branches_test.goTest plan
go build ./...&&go test ./...全绿gofmt -w ./cmd ./internal格式化通过`