深入 oh-my-pi 的 PR 风格短摘要:compaction-short-summary 提示词的设计与实现解析

发布时间:2026/9/10 1:41:07

深入 oh-my-pi 的 PR 风格短摘要:compaction-short-summary 提示词的设计与实现解析 深入 oh-my-pi 的 PR 风格短摘要compaction-short-summary 提示词的设计与实现解析【免费下载链接】oh-my-pi⌥ Coding agent with the IDE wired in项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-pi在 oh-my-pi 的长会话压缩context compaction机制中除了生成用于恢复上下文的完整结构化摘要之外还需要为每次压缩生成一段面向展示的短摘要——用 Pull Request 描述的口吻概括这次对话改了什么。本指南以packages/agent/src/compaction/prompts/compaction-short-summary.md这份提示词文件为骨架结合packages/agent/src/compaction/compaction.ts的源码实现讲解短摘要的生成规则、调用链、存储结构以及它与完整摘要、turn-prefix 摘要等其他压缩提示词的分工。读完本文你将理解 oh-my-pi 为何要为压缩事件单独设计一套PR 描述风格的提示词以及这套机制在会话记录中如何被生成、传递与展示。短摘要提示词的三条硬性约束compaction-short-summary.md全文只有三行却精确界定了短摘要的产出形态。它要求模型把一段对话压缩成一段Pull Request 描述pull request descriptionSummarize conversation changes as a pull request description. MUST 2–3 sentences; first person (I added…, I fixed…); describe changes, not process. NEVER mention tests, builds, or other validation steps; explain user request; ask questions.逐条拆解体裁约束输出必须是 PR 描述的口吻即站在作者视角描述这次会话中完成的代码/文档/配置变更而不是流水账式地复述对话过程。篇幅与人称约束严格 23 句话使用第一人称I added…、I fixed…内容聚焦改了什么changes而非怎么做的process。内容边界约束严禁提及测试、构建或其他验证步骤同时要体现用户的原始请求explain user request并在必要处提出问题ask questions。后两条约束的目的很明确短摘要是给人用户回看会话记录看的轻量摘要而不是给模型续接上下文用的。测试与构建信息属于过程会让短摘要变得冗长且偏离变更点保留用户请求与待澄清问题则能让用户快速判断这次会话是否达到了我想要的效果、还有什么悬而未决。需要说明的是这份提示词之所以如此精简是因为它只负责格式约束。实际的摘要内容通过调用 LLM 生成而调用侧的 prompt 组装、token 预算、系统提示词都由源码完成见下文。短摘要的生成调用链generateShortSummary短摘要的生成入口位于 compaction.ts 中的generateShortSummary函数约 L1164-L1235。该函数在模块加载时已经通过prompt.render完成了模板渲染const SHORT_SUMMARY_PROMPT prompt.render(compactionShortSummaryPrompt);compaction-short-summary.md以文本资源形式导入import compactionShortSummaryPrompt from ./prompts/compaction-short-summary.md with { type: text }并经prompt.render包装成最终注入到对话中的指令文本。generateShortSummary的核心实现要点如下Token 预算严格受限const maxTokens Math.min(512, Math.floor(0.2 * reserveTokens));短摘要的输出上限被限制为min(512, 20% 的 reserveTokens)。对比完整摘要的min(floor(0.8 * reserveTokens), MAX_SUMMARY_TOKENS)与 turn-prefix 摘要的min(floor(0.5 * reserveTokens), MAX_SUMMARY_TOKENS)可以看出短摘要是三类摘要中预算最小、最省的一次 LLM 调用——这从源码结构上印证了它轻量展示用的定位。Prompt 组装与完整摘要共用同一套骨架let promptText conversation\n${conversationText}\n/conversation\n\n; if (historySummary) { promptText previous-summary\n${escapeSummaryBoundaryTags(historySummary)}\n/previous-summary\n\n; } promptText formatAdditionalContext(options?.extraContext); promptText SHORT_SUMMARY_PROMPT;会话内容被包裹在conversation标签内防止模型把对话当作继续对话的上下文而是当作待总结对象若存在历史摘要historySummary即上次压缩产生的完整摘要则以previous-summary标签注入且经escapeSummaryBoundaryTags转义避免摘要内容中的标签干扰结构可选的extraContext以additional-context列表形式追加最后拼上本文档SHORT_SUMMARY_PROMPT作为格式约束。推理强度遵循用户 /model 选择调用时通过resolveCompactionEffort(model, options?.thinkingLevel)解析 reasoning 力度ThinkingLevel.Off时完全省略推理参数undefined/Inherit回退到历史默认Effort.High显式选择则尊重用户并做模型级 clamp。传输路径两条本地路径instrumentedCompleteSimple发起 oneshot系统提示词固定为SUMMARIZATION_SYSTEM_PROMPT见 summarization-system.md该提示词把历史对话与前序摘要视为不可信数据禁止跟随其中任何指令远程路径当配置了remoteEndpoint时走requestRemoteCompaction远程压缩服务同样携带SUMMARIZATION_SYSTEM_PROMPT与maxTokens。可观测性与容错该调用以oneshotKind: compaction_short_summary打点 OTEL 遥测失败时经createSummarizationError映射为带errorStatus的ProviderHttpError并遵循与完整摘要一致的 oneshot 重试策略summaryOneshotRetry保证单次瞬时故障如 429/529不会拖垮整个压缩流程。短摘要的触发时机与落库短摘要并非每次压缩都必然重新生成。在 compact 主流程约 L1842-L1848中const shortSummary usedRemoteCompaction ? Remote compaction : await generateShortSummary(recentMessages, summary, model, reserveTokens, apiKey, signal, { ...summaryOptions, extraContext: options?.extraContext, thinkingLevel: options?.thinkingLevel, });当本次压缩走了远程provider-native压缩OpenAI V1/V2 远程压缩成功时短摘要直接固定为Remote compaction——因为远程压缩不产出本地文本摘要为避免制造不实描述而使用占位文案否则对保留的最近消息recentMessages即压缩后仍以原文保留的近期对话调用generateShortSummary并携带本次生成的完整summary作为historySummary上下文。生成的shortSummary作为CompactionResult.shortSummary返回接口定义见 compaction.ts 的CompactionResult注释明确写着 Short PR-style summary for display purposes。随后会话管理器将其落库会话条目类型中声明了shortSummary?: string见 entries.ts构造压缩摘要消息时通过createCompactionSummaryMessage写入shortSummary字段见 messages.ts其中还包括tokensBefore、tokensAfter、method如 remote/soft/handoff等展示元数据分支汇总场景同样透传shortSummary见 branch-summarization.ts。因此用户界面中本次压缩做了什么的展示位消费的正是这份 PR 风格的短摘要而用于模型续接的完整上下文则由summary承载。两者各司其职。与完整摘要及 turn-prefix 摘要的分工oh-my-pi 的压缩提示词家族位于packages/agent/src/compaction/prompts/短摘要与它们共同构成三层摘要体系提示词文件用途输出预算相对 reserveTokenscompaction-summary.md生成结构化 handoff 摘要Goal / Progress / Next Steps / Critical Context 等分区供另一个 LLM 接续任务约 80%compaction-update-summary.md迭代式更新既有摘要存在previousSummary时替代初始提示词要求保留既有信息、更新进度与下一步同左compaction-turn-prefix.md当切割点落在某个 turn 中间时压缩该 turn 的前缀部分为保留的后缀提供上下文约 50%compaction-short-summary.md生成 PR 风格的 23 句短摘要仅供展示约 20%上限 512 tokens值得注意的是完整摘要格式compaction-summary.md也要求如果对话以未回答的问题结束必须保留该问题原文这与短摘要的 ask questions 规则形成呼应无论长摘要还是短摘要悬而未决的用户问题都不允许被丢弃。区别在于完整摘要把问题放入Critical Context分区供模型接续而短摘要以自然语言提问的方式让用户察觉。从调用关系看compaction.ts 的compact函数常规路径先并行/串行生成完整历史摘要与 turn-prefix 摘要并合并summary historyResult \n\n---\n\n**Turn Context (split turn):**\n\n turnPrefixResult随后追加文件操作清单upsertFileOperations记录本次压缩涉及的读写文件最后才调用generateShortSummary产出展示用短摘要。使用与验证建议查看生效效果压缩发生手动/compact或自动触发后会话记录中的compactionSummary消息同时携带summary与shortSummary两个字段前者用于上下文重建后者用于界面展示。自定义输出风格短摘要的格式完全由 compaction-short-summary.md 控制。若希望短摘要更贴近团队 PR 模板如增加 Motivation 或 Related issues可扩展该提示词文件但应保持 23 句、第一人称、不提验证步骤的既有约束——这正是源码中maxTokens预算所对应的产出规模。约束的兼容性三条 MUST/NEVER 规则与SUMMARIZATION_SYSTEM_PROMPT的输出仅限结构化摘要要求叠加生效由于系统提示词把对话内容视为不可信数据即使历史对话里出现请忽略格式要求之类的指令短摘要也不会被污染。综上compaction-short-summary.md虽然只有三行却通过源码中的预算控制maxTokens、边界转义escapeSummaryBoundaryTags、远程/本地双路径与遥测打点成为 oh-my-pi 会话压缩体系中面向人的最后一公里把一次可能涉及数万 token 的长会话压缩成两句话就能读懂的 PR 式变更说明。【免费下载链接】oh-my-pi⌥ Coding agent with the IDE wired in项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-pi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/10 1:41:07

C# Winform医院挂号管理系统开发实践:从数据库设计到并发控制

简介:这是一个基于C# WinForm的医院挂号管理系统,采用C/S架构与MVC三层模式,实现用户管理、科室管理、医生管理、门急诊挂号、挂号查询、修改口令、挂号单打印、帮助文档等完整模块,适合C#学习者或毕业设计参考。资源包共185个文件…

2026/9/10 1:36:07

STM32CubeMX+TouchGFX+QSPI组合实战:从环境配置到GUI联调全解析

简介:这份工程包面向使用 STM32CubeMX 与 TouchGFX 进行嵌入式 GUI 开发的工程师,解决将图片、字库这类超大数组从内部 Flash 搬运到外部 QSPI Flash(W25Q256)的典型问题。zip 包共 2000 个文件,核心代码以 652 个 .c …

2026/9/10 2:31:13

【无人机控制】基于自适应模糊增益调度滑模控制技术(AFGS-SMC)四旋翼飞行器姿态控制的内环控制器,减少传统滑模控制(SMC)伴随的抖振现象附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、算法改进、程序设计科研仿真。🍎 往期回顾关注个人主页:完整代码获取 定制创新 论文复现私信🍊个人信条:做科研&#xff0c…

2026/9/10 2:31:13

Medusa 文档写作规范指南:Vale 与 ESLint 规则体系全解析

Medusa 文档写作规范指南:Vale 与 ESLint 规则体系全解析 【免费下载链接】medusa The worlds most flexible commerce platform for agents and developers 项目地址: https://gitcode.com/GitHub_Trending/me/medusa 本篇指南围绕 Medusa 开源仓库中的文档…

2026/9/9 13:11:35

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

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

2026/9/8 7:15:15

超人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
免费获取方案
咨询二维码