【排障】OpenClaw 接中转站常见坑与解决方案
- 内容介绍
- 文章标签
- 相关推荐
用 OpenClaw 接自定义中转站(NewAPI / OneAPI 等),配置看着没问题但就是不work,这篇整理了几个高频踩坑点和对应的解决方案,都是实战中一个个排出来的。
最近有点缺LDC,佬们如果觉得有用务必给我点一个赞谢谢
建议扔给CC/龙虾让它给你修复
1. 403 被拦
症状
provider 配好了,curl 直接请求中转站 API 完全正常(200),但 OpenClaw 发出去就是 403 Your request was blocked。
原因
OpenClaw 底层用的 @anthropic-ai/sdk,发请求时会带上官方 SDK 的 User-Agent:
User-Agent: Anthropic/JS 0.73.0
很多中转站(特别是套了 Cloudflare 或自带 WAF 的)会直接拦截带官方 SDK 特征的 UA。OpenAI/JS 同理。
验证方法
# 带 SDK UA → 403
curl -H "User-Agent: Anthropic/JS 0.73.0" \
-H "x-api-key: sk-your-api-key" \
-H "anthropic-version: 2023-06-01" \
https://your-relay.example.com/v1/messages \
-d '{"model":"claude-sonnet-4-20250514","max_tokens":10,"messages":[{"role":"user","content":"hi"}]}'
# 普通 UA → 200
curl -H "User-Agent: Mozilla/5.0" \
-H "x-api-key: sk-your-api-key" \
-H "anthropic-version: 2023-06-01" \
https://your-relay.example.com/v1/messages \
-d '{"model":"claude-sonnet-4-20250514","max_tokens":10,"messages":[{"role":"user","content":"hi"}]}'
解决
在 provider 配置里加 headers 字段覆盖 UA:
{
"my-relay": {
"baseUrl": "https://your-relay.example.com",
"apiKey": "sk-your-api-key",
"api": "anthropic-messages",
"headers": {
"User-Agent": "Mozilla/5.0"
},
"models": [...]
}
}
2. baseUrl 不要带 /v1
症状
请求直接 404,日志里看到请求路径变成了 /v1/v1/messages。
原因
Anthropic SDK 会在 baseURL 后面自动拼接 /v1/messages。如果你的 baseUrl 写了 https://your-relay.example.com/v1,实际请求就变成了:
https://your-relay.example.com/v1/v1/messages → 404
OpenAI 模式同理,SDK 会自动拼 /v1/chat/completions。
解决
baseUrl 只写到域名,不带路径:
{
"baseUrl": "https://your-relay.example.com"
}
3. api 字段只认三个值
症状
启动报 Config invalid,或者模型列表里看不到你配的 provider。
原因
OpenClaw 的 api 字段做了严格校验,只接受:
| 值 | 对应格式 |
|---|---|
anthropic-messages |
Anthropic Messages API |
openai-completions |
OpenAI Chat Completions |
openai-responses |
OpenAI Responses API |
写成 openai-chat、openai、anthropic 等都会报错。
解决
老老实实用上面三个值之一。推荐用 anthropic-messages,因为 OpenClaw 内部就是 Anthropic 格式,用 OpenAI 格式可能出现下面第 4 点的问题。
4. openai-completions 收到空回复
症状
api 设为 openai-completions,请求成功(日志 isError=false),但 UI 上显示空消息。
原因
OpenClaw 内部用 Anthropic 格式处理消息流。openai-completions 返回的 OpenAI 格式响应在某些情况下无法正确映射,导致 UI 拿不到内容。
解决
如果你的中转站同时支持 Anthropic 和 OpenAI 格式(大多数 NewAPI/OneAPI 都支持),优先用 anthropic-messages。
5. 还有两个配置文件
OpenClaw 有两处 provider 配置需要同步修改:
~/.openclaw/openclaw.json → models.providers
~/.openclaw/agents/main/agent/models.json → providers
只改一个会出现"配了但没生效"的灵异现象。改完后用 openclaw models status 确认。
完整配置示例
{
"my-relay": {
"baseUrl": "https://your-relay.example.com",
"apiKey": "sk-your-api-key",
"api": "anthropic-messages",
"headers": {
"User-Agent": "Mozilla/5.0"
},
"models": [
{
"id": "claude-sonnet-4-20250514",
"name": "my-relay claude-sonnet-4",
"reasoning": false,
"input": ["text", "image"],
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
"contextWindow": 200000,
"maxTokens": 32000
}
]
}
}
排查工具速查
| 命令 | 用途 |
|---|---|
tail /tmp/openclaw/openclaw-$(date +%F).log |
实时查看运行日志 |
openclaw models status |
查看当前模型和认证状态 |
openclaw models list --provider xxx |
查看特定 provider 的模型 |
openclaw doctor |
综合诊断 |
排查的核心思路:先用 curl 确认中转站本身没问题,再看 OpenClaw 端发出去的请求有什么不同(UA、路径、格式)。大多数情况下就是上面这几个坑。
有其他踩坑经验欢迎评论区补充
网友解答:--【壹】--:
正好今天在配置的时候一直卡住,最后用了deepseek官方的先跑起来。明天按照佬友的指南配置试下
--【贰】--:
学习一下,感谢佬友分享经验
--【叁】--:
谢谢分享经验。
--【肆】--:
踩一下坑
--【伍】--:
多谢佬友分享哦
--【陆】--:
感谢分享
--【柒】--:
非常有用,感谢分享
--【捌】--:
正好都是踩过的坑
--【玖】--:
这些坑是真的坑!
尤其使User-Agent 和 两个provider配置文件。坑死了。
--【拾】--:
感谢佬,正好遇到第一个问题
--【拾壹】--:
非常有价值
--【拾贰】--:
可惜没早点看到
--【拾叁】--:
Mark,多谢佬友分享OpenClaw的经验。
--【拾肆】--:
感谢分享
--【拾伍】--:
好帖当顶
--【拾陆】--:
感谢佬友
--【拾柒】--:
插眼,学习学习
--【拾捌】--:
强呀,大佬
--【拾玖】--:
佬有没有遇到过,发之后立马回复空消息,去控制台后台看 也是没有请求的,去看docker运行日志也是没有请求的日志
用 OpenClaw 接自定义中转站(NewAPI / OneAPI 等),配置看着没问题但就是不work,这篇整理了几个高频踩坑点和对应的解决方案,都是实战中一个个排出来的。
最近有点缺LDC,佬们如果觉得有用务必给我点一个赞谢谢
建议扔给CC/龙虾让它给你修复
1. 403 被拦
症状
provider 配好了,curl 直接请求中转站 API 完全正常(200),但 OpenClaw 发出去就是 403 Your request was blocked。
原因
OpenClaw 底层用的 @anthropic-ai/sdk,发请求时会带上官方 SDK 的 User-Agent:
User-Agent: Anthropic/JS 0.73.0
很多中转站(特别是套了 Cloudflare 或自带 WAF 的)会直接拦截带官方 SDK 特征的 UA。OpenAI/JS 同理。
验证方法
# 带 SDK UA → 403
curl -H "User-Agent: Anthropic/JS 0.73.0" \
-H "x-api-key: sk-your-api-key" \
-H "anthropic-version: 2023-06-01" \
https://your-relay.example.com/v1/messages \
-d '{"model":"claude-sonnet-4-20250514","max_tokens":10,"messages":[{"role":"user","content":"hi"}]}'
# 普通 UA → 200
curl -H "User-Agent: Mozilla/5.0" \
-H "x-api-key: sk-your-api-key" \
-H "anthropic-version: 2023-06-01" \
https://your-relay.example.com/v1/messages \
-d '{"model":"claude-sonnet-4-20250514","max_tokens":10,"messages":[{"role":"user","content":"hi"}]}'
解决
在 provider 配置里加 headers 字段覆盖 UA:
{
"my-relay": {
"baseUrl": "https://your-relay.example.com",
"apiKey": "sk-your-api-key",
"api": "anthropic-messages",
"headers": {
"User-Agent": "Mozilla/5.0"
},
"models": [...]
}
}
2. baseUrl 不要带 /v1
症状
请求直接 404,日志里看到请求路径变成了 /v1/v1/messages。
原因
Anthropic SDK 会在 baseURL 后面自动拼接 /v1/messages。如果你的 baseUrl 写了 https://your-relay.example.com/v1,实际请求就变成了:
https://your-relay.example.com/v1/v1/messages → 404
OpenAI 模式同理,SDK 会自动拼 /v1/chat/completions。
解决
baseUrl 只写到域名,不带路径:
{
"baseUrl": "https://your-relay.example.com"
}
3. api 字段只认三个值
症状
启动报 Config invalid,或者模型列表里看不到你配的 provider。
原因
OpenClaw 的 api 字段做了严格校验,只接受:
| 值 | 对应格式 |
|---|---|
anthropic-messages |
Anthropic Messages API |
openai-completions |
OpenAI Chat Completions |
openai-responses |
OpenAI Responses API |
写成 openai-chat、openai、anthropic 等都会报错。
解决
老老实实用上面三个值之一。推荐用 anthropic-messages,因为 OpenClaw 内部就是 Anthropic 格式,用 OpenAI 格式可能出现下面第 4 点的问题。
4. openai-completions 收到空回复
症状
api 设为 openai-completions,请求成功(日志 isError=false),但 UI 上显示空消息。
原因
OpenClaw 内部用 Anthropic 格式处理消息流。openai-completions 返回的 OpenAI 格式响应在某些情况下无法正确映射,导致 UI 拿不到内容。
解决
如果你的中转站同时支持 Anthropic 和 OpenAI 格式(大多数 NewAPI/OneAPI 都支持),优先用 anthropic-messages。
5. 还有两个配置文件
OpenClaw 有两处 provider 配置需要同步修改:
~/.openclaw/openclaw.json → models.providers
~/.openclaw/agents/main/agent/models.json → providers
只改一个会出现"配了但没生效"的灵异现象。改完后用 openclaw models status 确认。
完整配置示例
{
"my-relay": {
"baseUrl": "https://your-relay.example.com",
"apiKey": "sk-your-api-key",
"api": "anthropic-messages",
"headers": {
"User-Agent": "Mozilla/5.0"
},
"models": [
{
"id": "claude-sonnet-4-20250514",
"name": "my-relay claude-sonnet-4",
"reasoning": false,
"input": ["text", "image"],
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
"contextWindow": 200000,
"maxTokens": 32000
}
]
}
}
排查工具速查
| 命令 | 用途 |
|---|---|
tail /tmp/openclaw/openclaw-$(date +%F).log |
实时查看运行日志 |
openclaw models status |
查看当前模型和认证状态 |
openclaw models list --provider xxx |
查看特定 provider 的模型 |
openclaw doctor |
综合诊断 |
排查的核心思路:先用 curl 确认中转站本身没问题,再看 OpenClaw 端发出去的请求有什么不同(UA、路径、格式)。大多数情况下就是上面这几个坑。
有其他踩坑经验欢迎评论区补充
网友解答:--【壹】--:
正好今天在配置的时候一直卡住,最后用了deepseek官方的先跑起来。明天按照佬友的指南配置试下
--【贰】--:
学习一下,感谢佬友分享经验
--【叁】--:
谢谢分享经验。
--【肆】--:
踩一下坑
--【伍】--:
多谢佬友分享哦
--【陆】--:
感谢分享
--【柒】--:
非常有用,感谢分享
--【捌】--:
正好都是踩过的坑
--【玖】--:
这些坑是真的坑!
尤其使User-Agent 和 两个provider配置文件。坑死了。
--【拾】--:
感谢佬,正好遇到第一个问题
--【拾壹】--:
非常有价值
--【拾贰】--:
可惜没早点看到
--【拾叁】--:
Mark,多谢佬友分享OpenClaw的经验。
--【拾肆】--:
感谢分享
--【拾伍】--:
好帖当顶
--【拾陆】--:
感谢佬友
--【拾柒】--:
插眼,学习学习
--【拾捌】--:
强呀,大佬
--【拾玖】--:
佬有没有遇到过,发之后立马回复空消息,去控制台后台看 也是没有请求的,去看docker运行日志也是没有请求的日志

