【排障】OpenClaw 接中转站常见坑与解决方案

2026-04-11 13:341阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐
问题描述:

用 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-chatopenaianthropic 等都会报错。

解决

老老实实用上面三个值之一。推荐用 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-chatopenaianthropic 等都会报错。

解决

老老实实用上面三个值之一。推荐用 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运行日志也是没有请求的日志