ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Gajae-Code Compaction压缩机制详解:长会话如何不丢上下文?分支摘要原理剖析

Gajae-Code Compaction压缩机制详解:长会话如何不丢上下文?分支摘要原理剖析 Gajae-Code Compaction压缩机制详解长会话如何不丢上下文分支摘要原理剖析【免费下载链接】gajae-codeGajae Code MVP项目地址: https://gitcode.com/gh_mirrors/ga/gajae-codeGajae-Code 是一个开源的 AI 编程助手长会话中上下文窗口会被对话与工具输出不断填满一旦超出模型上下文上限之前的工作进度就会失忆。Gajae-Code 通过Compaction 压缩与分支摘要Branch Summary两大机制解决这个问题Compaction 把当前分支的旧历史改写为一份结构化摘要分支摘要则在/tree导航时归档被放弃分支的上下文两者都会持久化为会话条目并在重建 LLM 输入时还原为上下文消息让长会话永不丢上下文。为什么长会话会记不住LLM 的每一轮请求都要携带完整历史你让 AI 读文件、跑命令、改代码read、search、bash的工具输出会持续累积。真实的会话统计曲线能直观看到这种增长——下图是各工具调用累计消耗的 token 量read与search是绝对大头更麻烦的是真实工作流往往横跨多个阶段。下图的需求澄清 → 实施计划 → 执行验证多阶段流程每一步都会产生大量轮次当上下文超出窗口模型直接报错粗暴地删掉最旧消息又会打断因果链比如孤立的工具结果。Gajae-Code 的解法不是删而是压缩 归档。Compaction 压缩把旧历史改写成语义摘要核心实现位于 compaction.ts整体流程在 docs/compaction.md 中有完整描述。压缩何时触发4 种入口手动压缩输入/compact [指令]立即对当前分支执行压缩你还可以附带定制指令溢出自动恢复模型返回上下文溢出错误时先尝试上下文晋升切换到更大窗口的模型重试不可用时才执行压缩压缩成功后自动继续阈值维护正常回合结束后若上下文 token 数超过阈值默认约为min(上下文窗口 - max(15%, 保留token), 300000)自动压缩空闲维护可选开启空闲时用reason: idle重写历史且不会自动续跑。压缩长什么样切割点的硬规则压缩不是截断而是在历史中选一个切割点cut point把切割点之前的消息交给 LLM 生成摘要切割点之后的近期消息原样保留默认保留约 20000 token配置项compaction.keepRecentTokens边界记为firstKeptEntryId之后的消息照常发给模型之前的旧消息不再随请求发送硬规则永远不在工具结果toolResult处切割避免产生孤立的因果链碎片切割点若落在某个回合中间split turn会生成两份摘要——历史摘要 当前回合前缀摘要用分隔线合并存储第二次压缩时不再从零总结而是基于上一份摘要增量更新对应模板 compaction-update-summary.md。压缩完成后模型实际看到的是系统提示 一份摘要消息 切割点之后的近期消息——篇幅小得多语义完整度几乎不降。摘要里都有什么不止几句话摘要由专门的结构化提示词compaction-summary.md驱动强制包含目标、约束与偏好、进度已完成/进行中/被阻塞、关键决策、下一步行动、关键上下文并要求精确保留文件路径、函数名、报错信息。除此之外系统还会自动附加两类确定性信息不依赖总结模型自己猜文件活动标签全程统计read/write/edit工具调用摘要尾部追加read-files与modified-files清单在途状态注入当前活跃目标、至多 5 个进行中的工作流技能含阶段、至多 10 条未完成 todo被写进摘要请求的附加上下文。这正是长会话不丢上下文的关键——工作进行到一半时压缩模型能精确知道做到哪了、还差什么。先修剪后压缩工具输出裁剪Pruning在压缩判断之前系统会先做一轮工具输出裁剪pruning.ts很多场景下光靠它就不必动用摘要。默认策略非常保守保护最近 40000 token 的工具输出最近 2 轮真实用户对话内的输出完全不动预期节省不足 20000 token 时直接放弃裁剪skill与read的结果默认受保护仅当后续读取被证明覆盖了旧结果时才允许裁剪被裁剪的输出替换为一行高信号摘要退出码、报错行、路径提示若会话 artifact 管理可用完整输出会外溢为 artifact 文件——裁剪是可逆的模型可以用artifact://地址随时读回原文而无需重跑工具。下图是每次调用平均 token 的趋势7 日滑动平均可以看到单次read常在 1000 token 量级裁剪这类重复输出收益显著分支摘要给被放弃的分支写归档备忘Compaction 解决的是时间轴太长分支摘要解决的是空间轴分叉。Gajae-Code 的会话是一棵树用/tree见 docs/tree.md回退到历史节点、换一条路线继续时原来的分支就被放弃了。当branchSummary.enabled开启时导航流程会找出旧叶子到新叶子的公共祖先收集被放弃路径上的全部条目如 B、C、D 三条消息按预算模型上下文窗口 - branchSummary.reserveTokens从新到旧挑选要总结的消息优先保留近期上下文用 branch-summary.md 提示词生成摘要同样附上读/改文件清单把摘要以BranchSummaryEntry持久化到导航目标位置实现见 branch-summarization.ts。之后无论从哪个分支重建上下文被放弃分支的探索过程都会以一条摘要消息的形式回归——你回退重做时AI 依然记得方案 A 为什么失败不用把走过的弯路再走一遍。整个过程支持按 Escape 取消。快速上手关键配置一览相关默认值定义在 settings-schema.ts 中概念与调优指南见 docs/concepts/context-compaction.md配置项默认值说明compaction.enabledtrue压缩总开关compaction.strategycontext-full可选handoff新开会话交接见 docs/handoff-generation-pipeline.md或offcompaction.thresholdPercent-1哨兵值自动压缩阈值百分比gjc config set compaction.thresholdPercent 70即可提前压缩compaction.keepRecentTokens20000切割点之后原样保留的近期 token 数compaction.autoContinuetrue压缩后若检测到未完成工作才自动续跑已完成则跳过compaction.adaptive.enabledfalse自适应压缩长会话高频调用时自动下调阈值branchSummary.enabledfalse开启/tree导航时的分支摘要对工具调用密集、会话动辄上十万 token 的长任务可参考文档推荐的自适应起步配置baseThresholdPercent: 75、aggression: 0.2避免大上下文被反复整包重发。扩展点用 Hooks 定制压缩行为压缩管线对扩展完全开放hooks/types.tssession_before_compact压缩前介入可取消压缩或提供自定义摘要session.compacting覆盖摘要提示词、注入额外上下文、附加保留数据session_compact压缩完成后的通知事件session_before_tree/session_tree分支摘要的前置与后置钩子。总结Gajae-Code 用三层防线保证长会话不丢上下文工具输出裁剪先回收可逆的冗余输出Compaction 压缩把旧历史固化为带进度、决策与文件清单的结构化摘要分支摘要则在会话树分叉时给放弃的路线留下归档备忘。三者都以一等会话条目持久化重建上下文时自动还原——这就是长会话可以无限延续、随时回退而不失忆的底层原理。更多实现细节可查阅 docs/compaction.md。【免费下载链接】gajae-codeGajae Code MVP项目地址: https://gitcode.com/gh_mirrors/ga/gajae-code创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表