pi 加入实验性提示词缓存预热,并修复技能补全排名与 CJK 文件补全边界
2026 年 9 月 19 日,pi 合入三个 PR——一笔实验性特性、两笔补全修复——当天晚些时候发布的 v0.86.0 已把三笔全部带上。mitsuhiko(Earendil 联合创始人)的 #9668 让 provider 的提示词缓存条目在停顿期间保持存活;外部贡献者 yearth 与 haoqixu 分别贡献两笔修复:#9120 修技能补全排名,#9746 修文件补全的 CJK 边界。
#9668 针对的是停顿的代价:provider 会在一段时间不活动后丢弃提示词缓存条目,下一个请求只能按全价重新支付输入费用。预热在到期前不久——排在缓存生命周期的 90% 处,至少留出十秒余量——用单 token 输出预算重发最近一次请求,且仅当省下的未命中成本减去刷新成本后仍有至少 0.05 美元的预期收益时才发送。一次刷新按整个上下文的一次缓存读取加一个输出 token 计费,永不进入模型上下文;/session 会报告下一次决策。
范围是刻意收窄的:预热要求模型与保留档位有已知的缓存寿命,内置目录只标注了直连 Anthropic——那里的临时条目存活五分钟,可延长到一小时——其余 provider 与自定义模型可在 models.json 里声明 promptCache 寿命。OpenAI 模型被刻意不加标注,因为文档记载的 TTL 不足以证明缓存会完全失效;采用按预算思考的 Claude 模型在思考开启期间会被跳过。新增的 cacheWarming 设置提供 off、streaming(默认值,在长工具运行期间保护昂贵前缀)与 idle 三档,扩展可通过新的 cache_warming_decision 事件覆盖每一次决策。
#9746 修的是文件补全的一处盲区:补全此前不把 CJK 标点当作边界,紧跟标点之后的路径无法触发补全——PR 里的例子是 我们需要实现新功能,docs。现在 CJK 标点与引号外的空白一样算作边界,解析与触发沿用同一套规则;CJK 字符仍是合法的路径内容,带引号的路径保留空格与标点。
#9120 修复 #8813:技能斜杠补全此前按完整的 skill:<name> 字符串排名,固定的 skill: 前缀对分数的影响可能盖过名称本身——加载 skill:deep-research 与 skill:research-idea 时输入 /idea,排在前面的是 deep-research,而查询只匹配后者的裸名称。现在非显式查询按裸名称匹配,显式 /skill:... 查询保留完整命令匹配,回归测试覆盖全部三条路径。
三笔改动都已可安装:v0.86.0 于当天发布,其说明将 #9668 列在新特性、两笔补全修复列在修复项下。
source: https://github.com/earendil-works/pi/pulls?q=is%3Apr+merged%3A2026-09-19+is%3Aclosed