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

发布时间:2026/11/5 16:24:31

深入 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/11/4 21:16:37

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

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

2026/10/28 15:34:34

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

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

2026/11/5 15:00:49

基于Hadoop+Spark的民宿智能推荐系统设计与实现

1. 项目概述:大数据时代的民宿智能推荐这个毕业设计项目融合了当前大数据领域最主流的技术栈,构建了一个完整的民宿推荐系统解决方案。作为一名长期从事大数据系统开发的工程师,我认为这个选题非常贴合实际应用场景——随着旅游业的复苏和共享…

2026/11/5 14:10:30

ADS122U04IPWR+STM32F427ZI工业级温度测量信号链设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 14:10:30

UART接口24位ADC搭配RS485,解决远距离温度监控难题

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 14:10:30

UART接口24位ADC搭配PIC18F46K22的RTD与热电偶测温实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 13:55:19

GD32E10x官方例程入门:从GPIO点灯到串口调试

简介:这份GD32E10x系列官方例程面向嵌入式硬件与单片机开发者,基于ARM Cortex-M3内核,汇集兆易创新GD32E10x的示例代码,适合工业控制、消费电子、通信设备等场景的学习、验证与二次开发。压缩包共935个文件,约11.16MB&…

2026/11/5 13:50:18

基于Django的运维平台实战:资产、发布、巡检、告警一体化

简介:这份资源是一套基于Django框架开发的运维平台源码,面向具备Python基础、希望了解Web运维系统实现思路的开发者与运维人员,可用于学习主机管理、服务监控、日志查看、任务调度、权限控制、资源统计、脚本执行与故障告警等常见运维模块的落…

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 0:02:07

多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中…

2026/11/5 0:02:07

大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#…

2026/11/5 0:02:07

鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的…

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

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

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

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