Replies: 2 comments
|
补充与其他专题的边界:
|
|
2026-09-09 SHA-pinned 账本,不是新实验文件。未安装、未运行、未 对照:本 checkout 工具在 compaction / resume / provider 切换后如何重投影,仍是本帖的开放账。 覆盖猎取 #156 只负责这些 epoch 上的 cache 观察。origin 本轮不改 explicit 默认,不把五个组收成第二套 discovery OS。 |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
这是 OpenPI 产品哲学总纲 #299 与 Tool Surface Economics #300 的后续专题。
#300 讨论了工具常驻、显式加载、Adaptive Gateway 与 Provider-native deferred loading 的成本。一个进一步的问题是:工具定义在 Session 中途被动态加载后,新的 Context epoch 会怎样处理它?
这里的 epoch 不只指 Compaction,也包括 Session reopen/process restart、branch/fork、model/provider switch,以及 authority/resource shrink。它们都会迫使 Runtime 把 canonical capability state 重新投影为模型可见上下文。
这不只是 Token 优化。它决定 Runtime 权威状态、模型可见能力和 Provider cache boundary 能否保持一致。
问题场景
部分新模型支持把动态工具定义追加到当前历史位置:
这样可以避免为了加入新工具而重写旧 prefix。
但当 Context 过长,Pi 会把较早历史替换为 summary,并只保留近期消息。此时需要回答:
当前 Pi 0.84.1 的可见行为
当前源码可以确认:
setActiveTools()会把新增工具名记录在 Tool Result 的addedToolNames;summary + retainedTail形成自包含 checkpoint,再接 compaction 后的新 entries;只有旧 Session 没有retainedTail时,才回退到firstKeptEntryId兼容路径;addedToolNames的 Tool Result 仍在retainedTail,adapter 可以保留原 deferred load point;如果加载点被压缩掉,当前 active tools 会重新成为 immediate/top-level definitions。能力没有被卸载,但序列化位置改变,可能形成新的 cache prefix;这说明“压缩旧历史”和“卸载 Runtime 能力”不是一回事。但 Session reload、Provider switch、权限变化后的完整恢复合同仍需固定实验验证。
必须区分两类 Compaction
Pi semantic compaction
Pi 生成可读 summary,并把近期
AgentMessage[]物化为retainedTail。后续模型上下文由 Pi 重建,summary pass 自身的 usage 与下一次普通请求应分开记录。Provider-native compaction
例如 OpenAI Responses 可能返回 opaque canonical compaction item,要求后续原样传入。它的可检查性、传输、usage、cache boundary 和跨 Provider 迁移合同不同,不能把 Pi 的
addedToolNames/retainedTail行为直接外推过去,也不能把 opaque item 当作 Runtime 权限来源。本帖当前可从源码确认的行为主要针对 Pi semantic compaction。Provider-native compaction 必须单独冻结 API、model snapshot 和 wire items 验证。
建议的所有权边界
Runtime 保存权威状态
包括:
这些事实不能依赖模型 summary,也不能由 Provider tool reference 自动扩权。
Compaction Summary 保存语义进度
包括:
Summary 不应复制完整 Tool Schema,也不应成为权限来源。
Provider Adapter 重新投影工具定义
在每个新的 context/cache epoch,根据当前 Runtime 权威状态选择:
需要避免的失败形态
候选设计
A. 只依赖进程内 active tools
Compaction 不改变 active set;下一请求根据现有 active tools 重建定义。
优点是简单、Pi-native。缺点是进程重启和 Session 恢复没有持久合同。
B. 在 Session/Compaction 元数据中持久化能力投影
记录 capability 名称、tool-surface fingerprint 与来源,但不记录完整 Schema,也不直接记录执行权限。
优点是可恢复、可诊断。风险是形成第二份状态,必须与当前配置、Trust 和资源状态重新求交,不能盲目回放。
C. 恢复时重新派生
从当前配置、Session canonical state、资源状态和 authority boundary 重新计算工具面;旧记录只用于诊断差异。
这最符合 fail-closed,但需要明确哪些 capability 是用户授权,哪些只是模型在旧上下文中的临时发现。
可能的组合是:B 记录 receipt,C 负责权威恢复。
最小可证伪实验
固定 Pi/OpenPI、Provider、模型、cache key 和工具组,至少覆盖:
addedToolNamesTool Result 仍位于新格式retainedTail;retainedTail移除,active tools 重新成为 immediate/top-level;firstKeptEntryId的 Session 兼容恢复;逐 turn 记录:
addedToolNames与 Provider item 类型;预期不变量:
与现有工作的关系
非目标
希望讨论最终回答:
All reactions