Appearance
OpenClaw 常见问题
Prompt Cache 完全不生效,缓存命中率为 0%?
原因: OpenClaw 内部会判断当前 baseUrl 是否为官方 OpenAI 端点,如果不是,就会自动剥离请求中的 prompt_cache_key 和 prompt_cache_retention 字段(防止不支持这些字段的代理报 400 错误)。codexzh 是透传代理,完全支持 Prompt Cache,但参数被剥离后,缓存永远不会命中。
方法一:配置 supportsPromptCache(推荐)
在 openclaw.json 对应模型下加一行 "compat": { "supportsPromptCache": true },告诉 OpenClaw 保留缓存参数:
json
{
"models": {
"mode": "merge",
"providers": {
"codexzh": {
"baseUrl": "https://api.codexzh.com/v1",
"apiKey": "sk-你的密钥",
"api": "openai-responses",
"models": [
{
"id": "gpt-5.4",
"compat": { "supportsPromptCache": true }
}
]
}
}
}
}修改后重启 gateway 生效(openclaw gateway stop && openclaw gateway --port 18789)。
已在完整配置里预置
手动配置文档 中的完整 openclaw.json 示例已包含此字段,直接复制使用即可。
supportsPromptCache 的合并状态
该字段由 OpenClaw PR #52017 引入,若你用的是正式版且该 PR 尚未合并,此方法可能不生效。可以关注该 PR 的合并进度,或改用下方的手动补丁方法。
方法二:手动给 dist 文件打补丁(适用于旧版或配置法无效时)
适用场景
你用的是 openai-responses,链路是 OpenClaw → 本地/第三方 OpenAI-compatible 代理 → 上游,升级到 2026.3.22+ 后缓存突然不命中。
根本原因: OpenClaw 在 2026-03-19 合入了 PR #49877,引入了 shouldStripResponsesPromptCache 函数,对非官方 OpenAI 端点自动剥离缓存参数。该逻辑会误伤实际上支持 prompt cache 的代理(如 new-api、CPA、各类中转站)。
第一步:定位目标文件
bash
# npm 全局安装时
grep -RIl 'function shouldStripResponsesPromptCache(model)' /usr/lib/node_modules/openclaw/dist
# 如果上面找不到,换这个
grep -RIl 'function shouldStripResponsesPromptCache(model)' "$(npm root -g)/openclaw/dist"第二步:备份文件
bash
# 把上一步找到的文件名替换进去
cp /usr/lib/node_modules/openclaw/dist/你找到的文件名.js \
/usr/lib/node_modules/openclaw/dist/你找到的文件名.bak第三步:修改函数
打开找到的文件,找到这段代码:
js
function shouldStripResponsesPromptCache(model) {
if (typeof model.api !== "string" || !OPENAI_RESPONSES_APIS.has(model.api)) return false;
if (typeof model.baseUrl !== "string" || !model.baseUrl.trim()) return false;
return !isDirectOpenAIBaseUrl(model.baseUrl);
}改成(把 你的代理地址 替换成实际地址,如 127.0.0.1:13000):
js
function shouldStripResponsesPromptCache(model) {
if (typeof model.api !== "string" || !OPENAI_RESPONSES_APIS.has(model.api)) return false;
if (typeof model.baseUrl !== "string" || !model.baseUrl.trim()) return false;
if (model.baseUrl.includes("你的代理地址")) return false;
return !isDirectOpenAIBaseUrl(model.baseUrl);
}第四步:重启并验证
bash
openclaw gateway restart
openclaw health重启后观察代理日志,看 cache_tokens 是否重新出现大于 0 的值。
嫌麻烦?让 OpenClaw 自己修
把下面这段发给 OpenClaw,让它自动定位文件并完成修改:
你帮我修一个 OpenClaw 的本地缓存兼容问题。
目标:
- 我现在的 OpenClaw 升级后,会把发往 OpenAI-compatible proxy 的 `prompt_cache_key` 剥掉,导致 prompt cache 基本不触发。
- 请你在本机全局安装的 OpenClaw dist 文件里,找到 `shouldStripResponsesPromptCache(model)` 这个函数。
- 对我指定的代理 baseUrl 做白名单放行,让这些代理不要再被 strip `prompt_cache_key`。
步骤:
1. 先定位 OpenClaw 的实际 dist 目录(优先 /usr/lib/node_modules/openclaw/dist,其次 $(npm root -g)/openclaw/dist)
2. 搜索 `function shouldStripResponsesPromptCache(model)` 找到目标文件
3. 先备份该文件
4. 从 ~/.openclaw/openclaw.json 读取我的 provider 配置,把所有 api=openai-responses 且非官方 OpenAI/Azure 的 baseUrl 自动加进白名单
5. 改完后重启 gateway,跑 openclaw health,告诉我改了哪个文件、放行了哪些地址、是否成功
注意:只做最小修改,不要动其他逻辑。缓存命中率低,成本比预期高?
原因: OpenClaw 的缓存需要"养"一段时间才能命中。刚开始用的时候,缓存还没建立,大量 token 走非缓存通道,价格是缓存价格的 10 倍左右,成本会比稳定期高很多。
解决方法:让 AI 自动安装技能和插件
在 Codex 对话里输入以下提示词,让 AI 自动扫描并安装能提升缓存命中率的工作流插件和会话压缩插件:
帮我扫描并安装 OpenClaw 的推荐技能(Skills),特别是工作流插件和会话压缩插件,安装完成后告诉我已安装了哪些。装好这些插件后,多用几次,缓存就会逐渐建立起来,命中率会越来越高,成本也会随之降下来。
缓存机制说明
走缓存的 token 价格是正常价格的 1/10(输入正常 $1.25/M,缓存只需 $0.125/M),所以缓存命中率对整体成本影响非常大。稳定使用一段时间后,成本会比初期低很多。
AI 开始"摆烂",只回答问题不干活了?
原因: 这是会话上下文窗口达到上限(max)导致的。当一个对话积累了大量内容,上下文快满时,AI 会进入保守模式——不会主动帮你执行任务,只会被动回答问题,看起来就像在"摆烂"。
解决方法:新建一个会话
bash
# 按 Ctrl+C 退出当前会话,重新启动
codex --yolo -m gpt-5.4新会话窗口是空的,AI 会恢复正常工作状态。
预防技巧:
- 一个功能做完就开新会话,不要在一个对话里做太多不相关的事
- 把项目规则和上下文写到
AGENTS.md里,这样每次新会话都能快速恢复上下文,不需要反复解释 - 安装会话压缩插件(见上方缓存问题的解决方法),可以在达到上限之前自动压缩历史记录,延长有效使用时间
其他问题
更多常见问题请查看 常见问题解答。