上下文管理完全指南:GhostCoder消息历史与压缩策略如何防止Prompt爆炸

📅 2026/8/26 14:48:11
上下文管理完全指南:GhostCoder消息历史与压缩策略如何防止Prompt爆炸
上下文管理完全指南GhostCoder消息历史与压缩策略如何防止Prompt爆炸【免费下载链接】ghostcoderSolving the problems of merging incomplete code written by an LLM and splitting up code for embedding and indexing in a vector store.项目地址: https://gitcode.com/gh_mirrors/gh/ghostcoderGhostCoderMoatless是一个面向自动编码的开源 LLM Agent 框架其上下文管理核心位于消息历史模块通过消息历史生成器与多级压缩策略帮助长任务 Agent 防止 Prompt 爆炸。本文带你快速看懂它的 5 种历史生成器、Token 限额裁剪机制与增量上下文注入技巧新手也能照着配置自己的 Agent 记忆策略。为什么 LLM Agent 会遭遇Prompt 爆炸想象一个自主编程 Agent 连续工作 30 步每一步都调用工具读代码、跑测试、改文件工具返回的观察结果Observation动辄数千 Token。如果把这些全部原样塞回给大模型会出现两个致命问题超出上下文窗口模型直接报错任务中断注意力稀释模型忘记最初的任务描述开始跑偏GhostCoder 的解决方案是把历史怎么喂给模型抽象成一个可插拔组件——Memory记忆生成器所有策略都实现同一个接口 generate_messages由 Agent 在每轮推理前自动调用。消息历史模块全景5 种生成器一览整个上下文管理逻辑集中在 message_history 目录按策略从全量到重度压缩排布生成器文件适用场景压缩力度MessageHistoryGeneratormessage_history.py通用工具调用 Agent⭐⭐CompactMessageHistoryGeneratorcompact.py长任务、省 Token⭐⭐⭐⭐ReactMessageHistoryGeneratorreact.pyReAct 纯文本格式⭐⭐ReactCompactMessageHistoryGeneratorreact_compact.pyReAct 压缩⭐⭐⭐⭐SummaryMessageHistoryGeneratorsummary.py单条消息打包历史⭐⭐⭐所有生成器都继承自 base.py 中的BaseMemory抽象类Agent 侧的接入点很简单agent.py 中有一个memory字段默认就是MessageHistoryGenerator每轮推理前执行messages await self.memory.generate_messages(node, workspace)你可以随时替换成别的策略。核心策略一Token 限额 最新优先裁剪这是 message_history.py 中最关键的防线。设置max_tokens后生成器会这样筛选历史永远保留第一条消息用户原始任务描述确保模型不失忆从最新消息往回倒序填充最新的对话优先级最高逐步吃掉剩余 Token 预算塞不下就跳过该条消息最后再按原始顺序排回 设计精髓模型对最近发生了什么最敏感对很久以前的细节容忍度高。倒序填充恰好符合这个特性。还有一个细节参数max_tokens_per_observation对非最新节点的观察结果如果超过单条限额就自动换成简短的summary摘要只有最近一步保留完整输出——既省 Token又不损失当下判断所需的信息。核心策略二Compact 压缩——只保留模型真正需要的compact.py 是压缩策略集大成者内置了 4 个去重/增量技巧① 观察摘要替代全文非最近步骤的工具输出优先取observation.summary一行摘要而不是完整 messageToken 消耗直降一个数量级。② 已看过的文件不重复贴用shown_files集合跟踪哪些文件已展示过。同一个文件被 ViewCode 读三次历史里只保留第一次的完整代码其余步骤不再重复注入。③ Git Diff 只在首次编辑时出现shown_diff标志保证整个历史中只插入一份当前工作区改动避免每次修改代码都重复贴一份 patch。④ 测试结果只在状态变化时更新last_test_status跟踪上次测试状态只有测试从失败变通过或反之时才把结果写进历史。首次运行展示完整失败详情后续只带一行摘要。核心策略三File Context 与 Git Patch 的按需注入SummaryMessageHistoryGenerator 演示了另一种思路把整段历史打包进一条user 消息。它的组装顺序是任务描述 history标签包裹的分步历史非最后一步用摘要已查看代码清单include_file_context开关控制当前 git diffinclude_git_patch开关控制代码上下文的 Token 预算由 file_context.py 统一管理context_size()实时统计当前已占用 Tokenavailable_context_size()给出剩余空间模型能看多少代码始终有数。Token 计数统一走 tokenizer.py 的count_tokens保证各模块口径一致。如何选型3 种场景对应 3 种记忆策略你的场景推荐生成器理由短任务10 步、窗口充足MessageHistoryGenerator信息全保真模型决策质量最高长任务、多轮测试、大上下文窗口紧张Compact 系列4 个去重技巧大幅压降 Token使用纯文本 ReAct 协议的模型React 系列Thought/Action/Observation 文本格式想自己动手验证效果tests/memory/ 下有两个可直接运行的用例test_message_history_generator.py和test_react_compact_message_history.py。快速检查清单防 Prompt 爆炸的 5 个配置点✅设置max_tokens给历史生成器一个全局预算如模型窗口的 70%✅设置max_tokens_per_observation给单条观察结果设上限超限自动换摘要✅长任务切换到 Compact 生成器启用文件去重与 diff 增量✅按需关闭include_file_context/include_git_patch纯搜索类任务可省一大块✅优先使用观察结果的summary字段每个 Action 的 Observation 都该提供一行摘要小结GhostCoder 的上下文管理哲学可以浓缩为一句话模型不需要全部历史只需要足够决策的最小历史。通过消息历史生成器这一可插拔组件配合 Token 限额裁剪、观察摘要、文件去重、diff 增量与测试状态跟踪五道闸门即使 Agent 连跑几十步Prompt 也能稳定控制在模型窗口之内。理解这套机制后你也能在自己的 Agent 项目中复刻同样的防爆炸能力。【免费下载链接】ghostcoderSolving the problems of merging incomplete code written by an LLM and splitting up code for embedding and indexing in a vector store.项目地址: https://gitcode.com/gh_mirrors/gh/ghostcoder创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考