piagent_
← /资讯
2026年9月16日community

pi 把会话中途 system 消息记入转录,用户 bash 钩子异常改为直接失败,session ID 查找免去全量转录扫描

pi 在 2026 年 9 月 16 日合入了三个 PR——一个特性加两个有 issue 对应的修复,三者都还没进入任何已打 tag 的 release(最新的仍是 v0.85.1)。#9548 出自 mitsuhiko(Armin Ronacher,Earendil 联合创始人)之手,让会话中途的 system 消息成为转录(transcript)中被如实记录的一部分,而不是对会话起始条件的静默改写。christianklotz 的 #9662 堵住了一个静默回退的口子:路由扩展崩溃时,用户的 bash 命令不再落到宿主机上执行。metaist 的 #9601 则移除了启动时的全量转录扫描——磁盘上的会话越多,这条路径就越慢。

#9548 把初始 system prompt 和完整的工具定义记入转录的第一条 system 消息,此后指令或工具一旦变更——包括一次运行途中由工具自身触发的变更——就在下一次模型响应前追加一条 system 消息。工具激活不再绑定在某个特定的工具结果上。状态没变就不产生消息;每次变更都是一份分节差异(section diff):更新只重复改动的 prompt 分节,被移除的分节标记为 null,并列出 toolsAdded 与 toolsRemoved。

不支持会话中途 system 消息的模型走 collapseSystemMessages():回放的 prompt 与当前工具并入首条 system 消息,其余丢弃。支持与否由模型目录里的兼容开关(supportsMidConvoSystemMessages)标记,且只为经过验证的模型设置:三类传输各有已标记的型号(OpenAI Responses 上是 GPT-5.x 与 GPT-6 Astra,Chat Completions 上是 Kimi K3 与 DeepSeek V4 Pro,Anthropic 上是 Opus 4.8、Opus 5 与 Fable 5/5.1),而 Google/Gemini、Vertex、Bedrock Converse 及一切未标记模型一律折叠。默认 system prompt 改为固定引言加若干命名的 XML 风格分节——<tools>、<rules>、<docs>、可选的 <addendum>、<project_context> 与 <skills>、<cwd>——旧的基于工具结果的延迟加载机制被移除,压缩条目则新增 systemMessage 检查点。缓存保留与否取决于端点和变更方式,PR 自己说得很直白:并非普遍成立。此外还捎带一处修复:OpenRouter 此前对 anthropic/claude-opus-5 的 configuration_update effort 消息一概拒绝(main 上每个请求都 400),现在 pi 的模型目录已对该条目加 gate,不再发送这类消息。

#9662 修复的 #9068 场景是:user_bash 路由处理器抛出异常——比如某个扩展把 ! 和 !! 命令路由进隔离 VM——pi 却转而用默认的本机 shell 执行命令。现在 user_bash 处理器抛错时,!、!! 与 RPC bash 命令直接失败,本该跑在隔离执行域里的命令不会再悄悄落到宿主机上。处理器返回 undefined 时仍保留显式的本机回退;这一破坏性行为变更连同迁移路径一并写进了文档。

#9601 修复的 #9440 场景是:带 --session-id 启动的 pi 会在启动时扫描全部转录——一个管理着 4000 多份转录的扩展实测启动要 16 秒上下。修复改为用精确的 session ID 查找直接读取会话头,不再加载整份转录;作者比较了保留 async 契约与改成同步两种方案,发现后者对后续缓存命中更有利,于是去掉了 async。微基准显示查找耗时从 68.1 秒降到 3.5 秒——约为原来的 1/19.5——同时 PR 自己也说明:复杂度仍随转录数量线性增长。

在 v0.85.1 之后的下一个 tag 出现之前,这三个改动都只存在于 main 上。#9068 的静默回退报告与 #9440 里的启动基准数字,分别为两个修复提供了之前的对照。

source: https://github.com/earendil-works/pi/pulls?q=is%3Apr+merged%3A2026-09-16+is%3Aclosed