本地压缩
本地压缩是在本地处理对话历史并生成摘要,而远程压缩则依赖于OpenAI或Azure的服务来处理。
[!info] 怎么判断走的是哪种
config.toml里provider的name字段填的是OpenAI或Azure会走远程压缩,其它走本地压缩。
0.164 之前
普通请求会按当前工具列表拼一条additional_tools,它永远放在请求的第一条,但不进历史。这意味着只要工具列表变了,后面缓存全部失效。
而本地压缩请求时,它却不拼additional_tools,导致第一条就没有命中。
普通请求:[现拼工具声明 T][基础指令 B][历史 H1][历史 H2]...
压缩请求: [基础指令 B][历史 H1][历史 H2]...[总结指令 S]
[!bug]笔者认为这是一个bug
0.164 之后
默认开启incremental_tools,工具声明会存进历史,之后新增的工具作为一条新的 additional_tools 追加在历史末尾,前面的前缀不动。
因此即使工具列表变化,缓存仍然生效。
0.164 增量工具路径:
普通请求:[初始工具声明 T][基础指令 B][历史 H1][新增工具T1][历史 H2]...
压缩请求:[初始工具声明 T][基础指令 B][历史 H1][新增工具T1][历史 H2]...[总结指令 S]
└───────────────── 可以复用的共同前缀 ──────────────────────┘
[!success]这意外把本地压缩这个bug解决了。
实测数据
用的Any,模型是gpt-6-astra。缓存爽吃。
| 次数 | 命中率中位数 | 缓存 token / 输入 token | |
|---|---|---|---|
| 升级前(~0.163) | 1928 | 0% | 6141 万 / 5.74 亿,约 11% |
| 升级后(0.164) | 100 | 98.6% | 2766 万 / 3097 万,约 89% |
只适用于Responses Lite模型,因此对GPT 5.5无效。
[!success]OpenAI的Codex真是越来越好用了,最近的更新都深得我心。