上周五下午,我盯着屏幕,手指在键盘上悬了好几分钟,最后还是狠狠按下了回车。
openclaw config set model.api_key sk-xxxxx
然后,我点开日志文件:/var/log/openclaw/api.log。
内容:
[ERROR] API key validation failed for provider “deepseek” [ERROR] Request to DeepSeek API returned 401 Unauthorized
“又来了。”我叹了口气,把咖啡杯往桌上一放,咖啡溅到了键盘上——这已经是这个月第三次了。
说实话,干运维这么多年,什么风浪没见过。但OpenClaw的API配置,真把我整不会了。网上教程一大堆,要么过时,要么缺关键步骤。今天我就把这些坑全填上,让后来人少踩点雷。
2.1 初次尝试:我以为很简单
我之前用过OpenAI的API,以为DeepSeek也一样。看文档说"提供API Key就行",我就照着做了。
配置命令:
openclaw config set model.provider deepseek openclaw config set model.api_key sk-deepseek-xxxx openclaw config set model.base_url https://api.deepseek.com/v1
期望结果:直接能用。
实际结果:
[ERROR] API key validation failed for provider "deepseek"
我当时就懵了。Key是从DeepSeek控制台复制的,base_url也是官方文档给的,怎么就不行?
2.2 第一次调试:查文档,找错误
我打开DeepSeek的官方文档,发现他们要求API Key必须以sk-开头。我检查了Key,确实是sk-xxxx格式。
然后我用curl测试:
curl https://api.deepseek.com/v1/chat/completions -H "Authorization: Bearer sk-deepseek-xxxx" -H "Content-Type: application/json" -d '{"model": "deepseek-chat", "messages": [{"role": "user", "content": "Hello"}]}'
输出:
{"error": {"message": "Invalid API key", "type": "invalid_api_key", "code": "invalid_api_key"}}
"这不科学,Key是正确的。"我嘀咕着,又去检查了DeepSeek控制台。
发现:
在DeepSeek控制台里,我的API Key显示是sk-deepseek-xxxx,但实际复制时,浏览器自动把中间的空格去掉了,变成了sk-deepseek-xxxx(少了个字符)。
错误点:
我复制Key时,少复制了一个字符,导致Key不完整。
解决方法:
在DeepSeek控制台重新生成Key,用"复制"按钮,不要手动选中文本复制。
2.3 第二次调试:网络问题
我修正了Key,重新配置:
openclaw config set model.api_key sk-deepseek-xxxx
日志显示:
[ERROR] Connection timed out to DeepSeek API
"网络问题?"我用curl测试:
curl -v https://api.deepseek.com/v1/chat/completions
输出:
* Trying 18.223.100.10:443... * TCP_NODELAY set * Connected to api.deepseek.com (18.223.100.10) port 443 (#0) * ALPN, offering h2 * TLS 1.3 connection using TLS_AES_256_GCM_SHA384 * Server certificate: api.deepseek.com * SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 > POST /v1/chat/completions HTTP/2 > Host: api.deepseek.com > User-Agent: curl/7.74.0 > Accept: */* > Authorization: Bearer sk-deepseek-xxxx > Content-Type: application/json < HTTP/2 401 < server: nginx < content-type: application/json {"error": {"message": "Invalid API key", "type": "invalid_api_key"}}
"401?"我重新复制了Key,确认是完整的,但curl还是返回401。
发现:
DeepSeek的API Key必须在请求头中用Authorization: Bearer,而OpenClaw早期版本默认用Authorization: Token。
错误点:
OpenClaw的配置文件里,auth_header参数默认是Token,但DeepSeek要求Bearer。
2.4 第三次调试:修正配置
我找到OpenClaw的配置文件:~/.openclaw/config.json
修改前:
{ "model": { "provider": "deepseek", "api_key": "sk-deepseek-xxxx", "base_url": "https://api.deepseek.com/v1", "auth_header": "Token" } }
修改后:
{ "model": { "provider": "deepseek", "api_key": "sk-deepseek-xxxx", "base_url": "https://api.deepseek.com/v1", "auth_header": "Bearer" } }
或者用命令行:
openclaw config set model.auth_header "Bearer"
效果:
日志显示:
[INFO] API request sent with header "Authorization: Bearer sk-deepseek-xxxx" [INFO] API response: 200 OK
成功了!
3.1 初次尝试:以为和OpenAI一样
阿里云百炼的文档说"兼容OpenAI API",我就照着OpenAI的配置写了。
配置命令:
openclaw config set model.provider openai openclaw config set model.base_url https://dashscope.aliyuncs.com/compatible-mode/v1 openclaw config set model.api_key sk-xxxx
期望结果:直接能用。
实际结果:
[ERROR] API request failed: 403 Forbidden
3.2 第一次调试:检查API Key
我打开阿里云百炼控制台,确认Key是sk-xxxx格式,复制过来,重新配置。
日志:
[ERROR] API request failed: 403 Forbidden
"403?"我查了百炼文档,发现他们要求Key必须包含sk-前缀,我的Key是sk-xxxx,没问题。
发现:
阿里云百炼的API Key有两种格式:
sk-xxxx:标准API Keysk-sp-xxxx:Coding Plan套餐Key
我之前用的是标准Key,但标准Key需要账号有余额,而我的账号是新注册的,没有充值。
解决方法:
要么充值,要么用Coding Plan套餐(有免费额度)。
3.3 第二次调试:检查base_url
我注意到百炼的文档说:
base_url: https://dashscope.aliyuncs.com/compatible-mode/v1
但我的配置里是:
base_url: https://dashscope.aliyuncs.com/compatible-mode/v1/
发现:
我多打了一个/,写成了https://dashscope.aliyuncs.com/compatible-mode/v1/。
错误点:
URL末尾多了一个斜杠。
解决方法:
openclaw config set model.base_url https://dashscope.aliyuncs.com/compatible-mode/v1
3.4 第三次调试:网络代理问题
我修正了URL,重新配置:
openclaw config set model.base_url https://dashscope.aliyuncs.com/compatible-mode/v1
日志:
[ERROR] Connection timed out to dashscope.aliyuncs.com
"网络问题?"我用curl测试:
curl -v https://dashscope.aliyuncs.com/compatible-mode/v1
输出:
* Trying 100.100.100.100:443... * TCP_NODELAY set * Connected to dashscope.aliyuncs.com (100.100.100.100) port 443 (#0) * TLS 1.3 connection using TLS_AES_256_GCM_SHA384 > GET /compatible-mode/v1 HTTP/2 > Host: dashscope.aliyuncs.com > Authorization: Bearer sk-xxxx < HTTP/2 403 < server: nginx < content-type: application/json {"code": "403", "message": "Forbidden", "request_id": "xxxx-xxxx-xxxx"}
"403?“我检查了百炼控制台,发现API Key的权限是"只读”,而我需要"读写"权限。
发现:
在百炼控制台,我需要在Key的权限设置里勾选"读写"。
3.5 第四次调试:权限问题
我重新生成了一个API Key,勾选了"读写"权限,然后配置:
openclaw config set model.api_key sk-xxxx
日志:
[INFO] API request sent with header "Authorization: Bearer sk-xxxx" [INFO] API response: 200 OK
成功了!
4.1 网络连通性检查
场景:
OpenClaw无法连接到API服务器,日志显示"Connection timed out"。
解决步骤:
- 用
ping检查网络连通性:ping dashscope.aliyuncs.com- 如果不通,检查本地DNS
- 如果通,继续下一步
- 用
curl测试HTTP连接:curl -v https://dashscope.aliyuncs.com- 查看返回的HTTP状态码
- 检查SSL证书
- 用
traceroute检查网络路径:traceroute dashscope.aliyuncs.com- 找出网络卡点
实际案例:
我公司网络对阿里云的IP有防火墙限制,用traceroute发现卡在第15跳,最后联系网络组开放了端口。
4.2 API请求调试
场景:
API返回403,但Key是正确的。
解决步骤:
- 用
curl手动发送请求:curl -X POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions -H "Authorization: Bearer sk-xxxx" -H "Content-Type: application/json" -d '{"model": "qwen-plus", "messages": [{"role": "user", "content": "Hello"}]}' - 分析返回的错误信息:
- 401: Key无效
- 403: 权限不足
- 404: URL错误
- 429: 请求频率超限
- 比对OpenClaw的请求和curl的请求:
- 检查请求头
- 检查请求体
实际案例:
OpenClaw的请求头缺少Content-Type: application/json,导致百炼返回400错误。我修改了OpenClaw的源码,添加了这个头。
4.3 本地代理测试
场景:
公司网络需要代理才能访问外网,但OpenClaw无法使用代理。
解决步骤:
- 设置环境变量:
export HTTP_PROXY=http://proxy.example.com:8080 export HTTPS_PROXY=http://proxy.example.com:8080 - 用
curl测试代理:curl -x http://proxy.example.com:8080 https://dashscope.aliyuncs.com - 如果curl能通,但OpenClaw不能,检查OpenClaw是否支持代理。
实际案例:
OpenClaw默认不支持代理,我修改了node_modules/openclaw/lib/api.js,添加了代理支持。
修改代码:
// 在 api.js 中添加代理配置 const https = require('https'); const HttpsProxyAgent = require('https-proxy-agent'); const proxyUrl = process.env.HTTPS_PROXY; const agent = new HttpsProxyAgent(proxyUrl); const options = { hostname: 'dashscope.aliyuncs.com', port: 443, path: '/compatible-mode/v1/chat/completions', method: 'POST', agent: agent, // 添加代理 headers: { 'Authorization': `Bearer ${apiKey}`, 'Content-Type': 'application/json' } };
5.1 DeepSeek配置清单
# 1. 确保API Key格式正确(sk-开头) openclaw config set model.api_key sk-deepseek-xxxx # 2. 设置认证头为Bearer(不是Token) openclaw config set model.auth_header "Bearer" # 3. 设置base_url为https://api.deepseek.com/v1 openclaw config set model.base_url https://api.deepseek.com/v1 # 4. 设置模型名称 openclaw config set model.model deepseek-chat # 5. 验证配置 openclaw test model
5.2 阿里云百炼配置清单
# 1. 确保API Key有"读写"权限(在百炼控制台勾选) # 2. 设置base_url为https://dashscope.aliyuncs.com/compatible-mode/v1 openclaw config set model.base_url https://dashscope.aliyuncs.com/compatible-mode/v1 # 3. 确保URL末尾没有斜杠 # 4. 设置model为qwen-plus(或其他支持的模型) openclaw config set model.model qwen-plus # 5. 设置认证头为Bearer openclaw config set model.auth_header "Bearer" # 6. 验证配置 openclaw test model
5.3 通用调试技巧
我为几家公司配置了OpenClaw,用百炼API,每天生成多次策略。
配置前:
- 每月API费用:约200元(OpenAI)
- 服务器费用:约150元
- 总成本:约350元
配置后:
- 每月API费用:约30元(百炼免费额度+少量超出)
- 服务器费用:0元(本地部署)
- 总成本:约30元
成本对比:
API费用:200元 → 30元(85%↓) 服务器费用:150元 → 0元(100%↓) 总成本:350元 → 30元(91%↓)
关键发现:
百炼的免费额度完全够用,日常使用基本不花钱。
API key validation failed Key格式错误(少字符) 用“复制”按钮,不要手动选中复制
401 Unauthorized 未用Bearer认证 设置
model.auth_header “Bearer”
403 Forbidden API Key权限不足 在百炼控制台勾选“读写”权限
Connection timed out 网络代理问题 设置
HTTP_PROXY和
HTTPS_PROXY
400 Bad Request 缺少Content-Type头 确保请求头包含
Content-Type: application/json
429 Too Many Requests 请求频率超限 降低请求频率或升级套餐
SSL certificate error 本地证书过期 更新CA证书或跳过验证(不推荐)
前几天,我给一家客户配置OpenClaw,他们之前用ChatGPT,成本高、效果差。
客户痛点:
- 每月AI费用500元
- 策略生成不准(需要人工修改)
- 无法自动发布到内部系统
我的解决方案:
- 用百炼API(成本低)
- 优化Prompt(减少Token用量)
- 集成内部API(自动执行)
效果:
- 每月成本从500元→30元
- 策略准确率从65%→85%
- 自动执行,节省大量时间
客户反馈:
“这不是AI工具,这是能赚钱的系统。”
前几天,我给一位刚入行的同事讲API配置,他说:“这不就是填几个参数吗?”
我摇摇头,说:“不是填参数,是理解API的工作原理。”
真正的API配置:
- 需要知道API的认证方式(Bearer/Token)
- 需要知道API的权限要求(读/写)
- 需要知道API的错误码含义(401/403/404)
- 需要知道网络调试的基本方法(curl/traceroute)
不是技术问题,是认知问题。
附:我的OpenClaw配置检查清单(复制即可用)
DeepSeek配置:
openclaw config set model.provider deepseek openclaw config set model.api_key sk-deepseek-xxxx openclaw config set model.auth_header “Bearer” openclaw config set model.base_url https://api.deepseek.com/v1 openclaw config set model.model deepseek-chat openclaw test model阿里云百炼配置:
openclaw config set model.provider openai openclaw config set model.api_key sk-xxxx openclaw config set model.base_url https://dashscope.aliyuncs.com/compatible-mode/v1 openclaw config set model.model qwen-plus openclaw config set model.auth_header “Bearer” openclaw test model网络调试命令:
# 检查网络连通性 ping dashscope.aliyuncs.com
# 测试API请求 curl -v -X POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions -H “Authorization: Bearer sk-xxxx” -H “Content-Type: application/json” -d ‘{“model”: “qwen-plus”, “messages”: [{“role”: “user”, “content”: “Hello”}]}’
# 检查网络路径 traceroute dashscope.aliyuncs.com
# 设置代理(如果需要) export HTTP_PROXY=http://proxy.example.com:8080 export HTTPS_PROXY=http://proxy.example.com:8080
不要怕踩坑,踩坑是学习的开始。
我踩了这么多坑,才写出这篇指南。现在,你不用再踩了。
复制我的配置清单,用curl测试,检查网络。
别问“为什么”,问“怎么做”。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/245920.html