oh-my-pi 上下文压缩摘要注入机制:compaction-summary-context 模板如何让 Agent 基于先前工作继续

发布时间:2026/9/10 9:37:05

oh-my-pi 上下文压缩摘要注入机制:compaction-summary-context 模板如何让 Agent 基于先前工作继续 oh-my-pi 上下文压缩摘要注入机制compaction-summary-context 模板如何让 Agent 基于先前工作继续【免费下载链接】oh-my-pi⌥ Coding agent with the IDE wired in项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-pi本篇指南聚焦 oh-my-pi⌥ Coding agent with the IDE wired in长会话上下文压缩Context Compaction链路中的一个关键拼图——compaction-summary-context.md模板。它负责在压缩完成后把先前工作与工具状态以受控的方式重新注入后继 LLM 的上下文并约束模型必须基于先前工作继续、绝不重复先前工作。读完本文你将掌握该模板的逐行语义、它在消息转换层的真实组装方式以及它背后compact()全流程切割点选择、本地/远程摘要生成、摘要持久化与跨模型复用的源码级工作原理可直接用于理解或定制 oh-my-pi 类 Coding Agent 的长会话记忆机制。模板本体五行的语义密度关联文档 compaction-summary-context.md 全文仅 5 行属于典型的短而强的指令模板Prior model work/tool state available. MUST build on prior work; NEVER duplicate prior work. summary {{summary}} /summary逐行拆解其语义Prior model work/tool state available.——显式告知后继模型当前上下文并非空白起点此前已存在模型工作产物与工具状态历史工具调用结果、文件操作、决策记录等。这是为后续约束做的事实铺垫。MUST build on prior work; NEVER duplicate prior work.——核心指令全部大写强调。它把继续推进设为强约束把重复劳动设为禁区防止压缩后模型把已完成的步骤再执行一遍例如重复应用已打过的补丁、重复运行已跑过的命令。summary…/summary与{{summary}}占位符——XML 风格标签用于划定摘要的边界{{summary}}是模板渲染时被真实摘要文本替换的插槽。标签边界的存在让模型能够明确区分注入的历史摘要与当前实时对话。这种短指令 标签占位符的结构与同目录其他上下文模板一脉相承例如 handoff-summary-context.md 使用handoff{{summary}}/handoff包裹交接文档并强调这是你自己的工作记忆不是用户输入branch-summary-context.md 则以Branch-return summary:前缀加summary标签注入分支回归摘要。渲染与组装从模板到真实请求消息模板本身是纯文本资源真正把它变成请求消息的是消息转换层 messages.ts。模板的加载与渲染函数模板通过with { type: text }作为文本资源导入messages.tsimport compactionSummaryContextPrompt from ./prompts/compaction-summary-context.md with { type: text };随后定义渲染函数messages.tsexport function renderCompactionSummaryContext(summary: string): string { return prompt.render(COMPACTION_SUMMARY_TEMPLATE, { summary }); }prompt.render来自oh-my-pi/pi-utils作用是把模板中的{{summary}}占位符替换为实际的摘要文本——这正是上文模板第三部分起作用的环节。compactionSummary 消息的 LLM 形态转换convertMessageToLlmmessages.ts是核心域消息到 provider 请求消息的单一事实来源。对role compactionSummary的消息其转换逻辑为messages.tscase compactionSummary: return { role: user, content: message.blocks ! undefined ? [{ type: text as const, text: message.summary }, ...message.blocks] : [ { type: text as const, text: message.method handoff ? renderHandoffSummaryContext(message.summary) : renderCompactionSummaryContext(message.summary), }, ...(message.images ?? []), ], attribution: agent, historyRewriteAt: message.timestamp, providerPayload: message.providerPayload, timestamp: message.timestamp, };关键设计点以user角色注入摘要被包装为一条user消息但attribution: agent明确标记其来源是 Agent 自身而非真实用户避免模型把历史摘要误读为新指令。historyRewriteAt标记该消息是历史重写压缩的产物供上层做计费归属与语义区分。handoff 分支当method handoff时改用 handoff-summary-context.md 模板该模板显式声明交接文档已完整存在除非用户明确要求绝不再写一份交接文档可防止后继实例误把第一人称的 Next Steps 当作新用户指令。snapcompact 分支当存在blocks快照压缩产生的图像/文本块时直接以summary blocks拼装跳过旧式包装。图像透传images数组被原样附加保证远程压缩如 OpenAI remote compaction保留的多模态内容可以继续回放。此外findValidCutPointscompaction.ts把compactionSummary与user、assistant、branchSummary等一并列为合法切割点意味着压缩边界可以落在上一次压缩摘要处实现迭代式压缩。摘要从何而来compact() 全流程模板注入的{{summary}}文本由 compaction.ts 的compact()compaction.ts配合prepareCompaction()生成。流程分四步。第一步准备阶段 prepareCompactionprepareCompactioncompaction.ts在不动上下文的前提下规划压缩方案边界处理尊重/clear重置边界与上一次可复用的压缩边界若最近的压缩条目对当前模型不可读则视为不存在并向后展开原始消息见下文的findReadableCompactionIndex。切割点选择findCutPointcompaction.ts从最新消息往回累计 token直到达到keepRecentTokens预算切割点只能落在user/assistant/custom/branchSummary/compactionSummary等消息上绝不切割在toolResult上工具结果必须跟随其工具调用保证消息对完整。三类消息划分messagesToSummarize将被摘要并丢弃的历史、turnPrefixMessages若切割落在回合中间被切割的回合前半段、recentMessages压缩后完整保留的近段历史。第二步远程压缩优先compact()内部按优先级尝试 provider 原生远程压缩OpenAI V2 流式远程压缩当模型满足shouldUseCompactionV2Streaming时compaction.ts把消息转换为 OpenAI Responses/Codex 原生输入含上一轮远程压缩的replacementHistory拼接通过 compaction-v2-streaming.ts 发起远程请求并在preserveData中持久化 provider 回放载荷。V1 远程压缩回退V2 失败时信号中止除外回退到 openai.ts 的 V1 远程压缩。本地摘要兜底远程压缩不可用或全部失败时降级为本地 LLM 摘要。远程压缩成功后summary仅为占位文本如 compaction.ts 的formatRemoteCompactionSummaryRemote compaction preserved provider-native history for this session. Compaction processed N input tokens.真正历史存放在 provider 回放载荷中只有当下一次压缩无法复用该载荷时例如切换了 provider才会重新展开原始消息做本地摘要见remotePreserveReusablecompaction.ts。第三步本地摘要生成 generateSummary本地路径调用generateSummarycompaction.ts会话先被serializeConversationForSummary序列化为文本包裹进conversation…/conversation标签防止模型续写而非总结。若存在上一次摘要则以previous-summary…/previous-summary携带并改用增量更新模板 compaction-update-summary.md要求保留旧摘要全部信息、把完成的 In Progress 移到 Done、更新 Next Steps、保留精确文件路径/函数名/错误信息实现迭代式压缩。基础摘要模板 compaction-summary.md 规定输出为结构化的 handoff 摘要Goal、Constraints Preferences、ProgressDone / In Progress / Blocked、Key Decisions、Next Steps、Critical Context、Additional Notes并强制只输出结构化摘要、绝不输出额外文本。摘要 token 预算maxTokens min(floor(0.8 * reserveTokens), MAX_SUMMARY_TOKENS)其中DEFAULT_RESERVE_TOKENS 16384、MAX_SUMMARY_TOKENS与其相等compaction.ts保证压缩比随窗口增大而改善而不是退化。若单次窗口装不下整个会话planSummaryWindows会把消息切分为多个窗口折叠式依次摘要——每个窗口以上一个窗口产出的摘要为previousSummary继续增量更新。第四步短摘要与文件操作回填generateShortSummarycompaction.ts基于recentMessages与历史摘要生成 PR 风格的展示用短摘要预算被压到min(512, floor(0.2 * reserveTokens))。computeFileLists与upsertFileOperations把历史中被读取/修改的文件列表回填进摘要供后继实例快速恢复文件操作上下文。摘要的持久化与上下文恢复压缩结果被封装为CompactionSummaryMessagemessages.ts携带summary、shortSummary、tokensBefore压缩前 token 数、tokensAfter压缩后估算、method如remote/soft/handoff、blocks/imagessnapcompact 图像块、warning等元数据作为会话条目持久化。后继模型恢复上下文时若存在可读的压缩条目findReadableCompactionIndexcompaction.ts从最新往回找到第一个当前模型可读的压缩边界。关键约束是remotePreserveReusableprovider 原生的远程压缩回放载荷只在当前模型与压缩时 provider 相同且远程回放仍启用时可复用否则该压缩条目对当前模型等于不存在后续压缩会越过它重新展开原始消息做本地摘要避免跨模型后上下文永久性失忆。恢复时正是通过本文主角renderCompactionSummaryContext(summary)把摘要文本包进summary…/summary注入或当method handoff时走 handoff 模板完成基于先前工作继续的上下文重建。触发器与阈值压缩何时发生模板注入是压缩的出口而压缩的入口由配置与阈值决定shouldCompactcompaction.ts在contextTokens thresholdTokens时触发。resolveThresholdTokenscompaction.ts优先采用thresholdTokens固定值钳制在[1, contextWindow - 1]否则按thresholdPercent比例计算最后兜底为contextWindow - reserveTokens。默认配置compaction.ts为enabled: true、strategy: context-full、keepRecentTokens: 20000、midTurnEnabled: true、autoContinue: true、remoteEnabled: true、remoteStreamingV2Enabled: truereserveTokens缺省时生效DEFAULT_RESERVE_TOKENS且小窗口模型会自动以窗口 15% 的比例预留替代resolveBudgetReserveTokenscompaction.ts。compactionContextTokenscompaction.ts对 provider 上报值与本地存储会话估算值取较大者防止上线前请求载荷被压缩扩展如 Headroom、混淆器、内联 snapcompact导致 provider 上报的 token 被低估、真实历史无限膨胀。同目录模板的分工一览compaction-summary-context.md不是孤岛它与prompts/目录下其他模板构成完整协作链prompts 目录模板文件职责compaction-summary-context.md压缩后摘要注入上下文的包装指令本文主角compaction-summary.md首次摘要生成的结构化输出模板handoff 格式compaction-update-summary.md迭代压缩时增量更新旧摘要的模板compaction-short-summary.md展示用 PR 风格短摘要模板compaction-turn-prefix.md回合中间切割时被切割回合前半段的摘要模板handoff-summary-context.md/handoff-document.md显式交接handoff文档的生成与注入branch-summary-context.md/branch-summary.md分支回归摘要的生成与注入snapcompact-archive-context.md旧 snapcompact 档案文本合并进摘要的格式auto-handoff-threshold-focus.md自动交接阈值聚焦提示summarization-system.md摘要系统级提示词file-operations.md文件操作提取规则context-window-truncated-output.md上下文窗口截断输出说明小结短模板、长链路的工程启示compaction-summary-context.md用 5 行文本解决了长会话 Coding Agent 的一个核心矛盾压缩节省了上下文空间却不能丢失已完成工作的记忆。其工程化价值体现在边界清晰summary标签 attribution: agent让模型能区分历史记忆与用户新指令约束显式MUST build on prior work; NEVER duplicate prior work 直接压制压缩后最常见的重复劳动问题链路完整从prepareCompaction切割、compact远程/本地摘要、generateSummary窗口折叠到convertMessageToLlm注入、findReadableCompactionIndex恢复模板只是这条链路末端的最后一句话但正是这句话决定了后继实例以何种心智模型解读注入的摘要。理解这条链路后若要为 oh-my-pi 定制长会话行为例如调整摘要格式、改变注入措辞、或新增第三类上下文模板可分别从 prompts 目录的模板、messages.ts 的转换层、以及 compaction.ts 的流程层入手三者各司其职、互不越界。【免费下载链接】oh-my-pi⌥ Coding agent with the IDE wired in项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-pi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/10 9:37:05

薄harness与厚harness:模型部署中的能力契约与共进化

1. “薄”与“厚”不是尺寸问题,而是模型能力边界的认知分水岭最近在多个技术社区和内部项目复盘会上,反复听到一句话:“这个harness太薄了,压不住模型”;又或者:“我们搭了个厚harness,结果推理…

2026/9/10 9:37:05

表格神经网络演进:从MLP到TFM的三次范式跃迁

1. 这不是又一篇“模型演进时间线”——表格神经网络到底在解决什么真问题?你打开招聘网站搜“数据科学家”,90%的JD里都写着“熟悉结构化数据建模”,但翻遍主流课程和教程,讲得最细的永远是图像识别、NLP大模型——可现实里&…

2026/9/10 11:32:28

模型训练篇 | 欢度中秋节!手把手教你如何用YOLOv12算法训练月饼检测器

前言:Hello大家好,我是小哥谈。中秋佳节将至,除了赏月、品茶,最能代表这一传统节日的莫过于形色各异的月饼了。今年的中秋节,让我们用计算机视觉技术为节日增添一份科技趣味——手把手教你训练一个专属的月饼检测器,让AI帮你识别桌上的各式月饼!🌈 目录 🚀1.算…

2026/9/10 11:32:28

MATLAB实现MFCC语音特征提取全流程解析

简介:本资源是一套面向语音信号处理初学者与进阶学习者的MFCC特征提取实践方案,聚焦声学特征工程核心环节,适用于语音识别、情感分析、声纹验证等AI语音项目前期数据准备。压缩包共5个文件,含3个关键MATLAB源码(主函数…

2026/9/10 11:32:28

CANN/ge图编译调试参数

功能调试 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的…

2026/9/10 11:32:28

Amazon品牌备案前产品包装必须印商标吗2026年要求详解

Amazon要求品牌名称或Logo以永久附着的方式出现在产品或包装上,这是Brand Registry的资格条件之一。 这项要求的目的不是增加门槛,而是确认申请者与实际商品之间存在真实联系。本文说明什么叫永久附着、产品与包装各自的适用场景、产品照片如何准备&…

2026/9/9 13:11:35

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/10 11:16:38

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/10 0:00:55

目录对比去重实战:用哈希算法精准清理重复文件

我电脑里现在还有一块换了三次机的“数据墓地”硬盘,里面存着2016年以前所有旧笔记本的完整备份。平时不觉得有什么,直到前阵子想把它整理归档,发现同一个安装包、同一批照片、同一份论文草稿,在几个不同的备份目录里反复出现。更…

2026/9/10 0:00:55

Leaflet离线地图完整Demo合集:内网部署与坐标纠偏实战

简介:这是一份面向Web GIS开发者的LeafLet离线地图示例合集,帮助开发者快速掌握离线地图从搭建到交互的完整流程。压缩包共723个文件,大小14.06MB,以319个js脚本、175个html页面和29个css样式文件为主体,配合png/svg图…

2026/9/10 0:00:55

MATLAB读取Rinex 3.02观测文件:多系统GNSS数据解析实战

简介:基于MATLAB开发的Rinex3.02版观测文件(o文件)读取代码包,面向卫星定位导航方向的学习者与研究人员,用于解决新版观测文件的数据解析、历元提取与时间转换问题。压缩包共4个文件,包含两个m脚本、一个19…

2026/9/7 16:23:03

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/7 22:46:00

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/9 10:21:54

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码