1. OpenClaw 本地连接千问报 401 的真实场景OpenClaw 是一个跑在本地的 AI 编码助手框架你可以把它理解成一个「壳」它本身不产出模型能力而是通过openclaw.json这个配置文件去对接各家模型服务。阿里云百炼上的千问Qwen系列就是其中一类尤其是qwen3-max和qwen3-coder-next这两个模型在代码补全和长上下文任务里表现不错很多人想把它接进 OpenClaw 当主力。问题往往出在第一次配置。你按教程填好了 API Key重启 OpenClaw发一句话终端直接甩回来HTTP 401: invalid access token or token expired翻译过来就是「无效的 token 或者 token 过期」。这时候大部分人的第一反应是 Key 复制错了于是反复重新生成、重新粘贴结果还是 401。我试过在这个坑里来回折腾半小时最后发现根因根本不在 Key 本身而在openclaw.json里几个字段的搭配方式。具体来说有三个高频误区。第一把百炼的 Base URL 写成了别的区域端点或者漏掉了/compatible-mode/v1这段路径导致请求打到了不兼容 OpenAI 协议的接口上。第二api字段没写或者写错OpenClaw 不知道该用哪种请求格式去对话。第三models数组里列的模型 ID 和agents.defaults.model.primary里引用的名字对不上OpenClaw 找不到对应模型鉴权阶段就直接失败了。这篇就围绕openclaw.json这一个文件把 Base URL、API Key、模型 ID、gateway token 四样东西怎么填、填完怎么验证、报错怎么排查一步步走完。适合已经在本地装好 OpenClaw、手里有百炼 API Key、但卡在连接这一步的人。全程只需要改一个 JSON 文件加跑一条命令不需要动其他任何东西。2. TaoToken 前置准备与 openclaw.json 定位在动配置文件之前先把两样东西准备好一个可用的 API Key以及找到openclaw.json的确切路径。API Key 这块如果你手上还没有可以到 TaoToken 的控制台去创建地址是 https://taotoken.net/api-keys 登录后新建一个 Key复制出来形如sk-xxxxxxxxx的字符串。这个 Key 就是后面填进apiKey字段的东西。注意创建后只显示一次先存到记事本里。关于接入方式TaoToken 提供的是标准的 OpenAI 兼容接口Base URL 用 https://taotoken.net/api 即可它和百炼原生的dashscope.aliyuncs.com端点在使用上是同一套协议你按本文的字段结构填就行。如果你更想直接用百炼官方端点把baseUrl换成https://dashscope.aliyuncs.com/compatible-mode/v1也一样能跑通两种写法在 OpenClaw 里是等价的。然后是找文件。OpenClaw 的配置默认放在用户目录下的.openclaw文件夹里不同系统路径不一样Windows 下是C:\Users\admin\.openclaw\openclaw.json注意admin是你的实际用户名别照抄。Mac 和 Linux 下是~/.openclaw/openclaw.json~展开就是你的 home 目录。如果你不确定文件在哪可以在终端里跑一句查找命令。Mac/Linux 用ls -la ~/.openclaw/Windows 的 PowerShell 用Get-ChildItem $env:USERPROFILE\.openclaw\能看到openclaw.json就说明路径对了。如果这个目录压根不存在说明 OpenClaw 还没初始化过先启动一次 OpenClaw它会自动生成一份默认配置然后再来改。改之前强烈建议先备份一份因为 JSON 格式对逗号和引号极其敏感改坏了整个文件加载失败OpenClaw 会直接起不来cp ~/.openclaw/openclaw.json ~/.openclaw/openclaw.json.bakWindows 下把cp换成copy即可。备份完再动手心里踏实。3. 可复制的 openclaw.json 配置片段下面这份就是能直接用的完整配置。把YOUR_APIKEY换成你刚才创建的 KeyYOUR_TOKEN保持 OpenClaw 自动生成的那个值一般首次配置完成后它自己会写进去你不用手动改。整段覆盖你原来的openclaw.json内容即可。{ meta: { lastTouchedVersion: 2026.2.1, lastTouchedAt: 2026-02-03T08:20:00.000Z }, models: { mode: merge, providers: { bailian: { baseUrl: https://taotoken.net/api, apiKey: YOUR_APIKEY, api: openai-completions, models: [ { id: qwen3-max, name: qwen3-max, reasoning: false, input: [text, image], contextWindow: 1000000, maxTokens: 65536 }, { id: qwen3-coder-next, name: qwen3-coder-next, reasoning: false, input: [text], contextWindow: 262144, maxTokens: 65536 } ] } } }, agents: { defaults: { model: { primary: bailian/qwen3-max }, models: { bailian/qwen3-max: {}, bailian/qwen3-coder-next: {} } } }, commands: { native: auto, nativeSkills: auto, restart: true, ownerDisplay: raw }, gateway: { mode: local, auth: { mode: token, token: YOUR_TOKEN } } }几个字段必须说清楚因为 401 十有八九就出在这几行。baseUrl是请求的根地址。用 TaoToken 就填https://taotoken.net/api用百炼官方就填https://dashscope.aliyuncs.com/compatible-mode/v1。注意末尾不要多加斜杠也不要漏掉/compatible-mode/v1这段漏了就会打到不兼容的接口上返回的报错往往就是鉴权失败。apiKey填你创建的那个sk-开头的字符串前后不要有空格不要带引号以外的任何字符。复制的时候容易把换行也带进去粘完检查一下。api字段固定写openai-completions它告诉 OpenClaw 用 OpenAI 的对话补全协议去请求。这个字段如果缺失OpenClaw 可能回退到别的协议导致请求格式不对。models数组里每个模型的id必须和服务端真实模型名一致qwen3-max和qwen3-coder-next就是百炼上的准确 ID。contextWindow和maxTokens按上面填qwen3-max支持 100 万上下文qwen3-coder-next是 26 万填小了浪费能力填大了可能被服务端拒绝。最后agents.defaults.model.primary写的是bailian/qwen3-max这个bailian/前缀对应的是providers里的键名bailian两者必须一致。你把 provider 改名成qwen这里就得写qwen/qwen3-max对不上就找不到模型。改完保存重启 OpenClaw 让配置生效。重启命令一般在 OpenClaw 里执行restart或者直接关掉进程重新启动。4. 验证请求与成功结果配置改完不代表就通了得实际发一次请求验证。OpenClaw 提供了命令行方式直接对话不用进交互界面就能测。最直接的方式是跑一条单次对话命令。在终端里执行openclaw chat --model bailian/qwen3-max --message 用一句话说明什么是递归如果配置正确几秒内你会看到模型返回的内容类似递归是指一个函数在其定义中直接或间接调用自身通过将大问题拆解为同类的小问题来求解。看到正常文字回复就说明 Base URL、API Key、模型 ID 三样全部对上了链路是通的。如果你想更底层地验证可以绕过 OpenClaw 直接用 curl 打一次接口这样能排除是 OpenClaw 自身的问题还是服务端的问题curl https://taotoken.net/api/chat/completions \ -H Authorization: Bearer YOUR_APIKEY \ -H Content-Type: application/json \ -d { model: qwen3-max, messages: [{role: user, content: 你好}] }返回的 JSON 里如果有choices数组且choices[0].message.content有内容说明 Key 和端点都没问题。如果这里就报 401那问题在 Key 或 Base URL跟 OpenClaw 无关。还有一种验证方式是进 OpenClaw 的交互模式直接输入问题看它用哪个模型回答。启动后输入/model可以查看当前激活的模型确认显示的是bailian/qwen3-max。然后随便问一句观察返回速度和内容是否正常。成功之后你还可以切到qwen3-coder-next试试代码任务把primary临时改成bailian/qwen3-coder-next重启让它写一段排序算法看看输出质量。两个模型都通了说明整套配置稳固。如果验证时返回的是空内容或者超时先别急着改配置往下看排查部分。5. 本篇常见错误排查配置过程中最容易撞上的就是开头那个 401下面把几个真实报错和对应处理列出来。HTTP 401: invalid access token or token expired这是最高频的。原因通常有三个Key 复制时带了空格或换行baseUrl写错导致请求打到了不认这个 Key 的端点或者 Key 本身已失效。处理方式是重新复制 Key确认baseUrl是https://taotoken.net/api或百炼的https://dashscope.aliyuncs.com/compatible-mode/v1然后重启。如果还不行用上面那条 curl 单独测 Key能定位到底是哪一环。local proxy failed / connection refused这个报错说明 OpenClaw 尝试连本地代理但失败了。检查gateway.mode是不是localgateway.auth.mode是不是token。如果你之前配过别的代理把残留的代理字段删掉。另外确认没有其他程序占用了 OpenClaw 要用的端口。reading choices: unexpected end of JSON input这个通常是服务端返回了非 JSON 内容比如 HTML 错误页。多半是baseUrl路径不对请求打到了网页而不是 API。确认地址末尾是/api或/compatible-mode/v1不要多也不要少。也可能是网络中间层拦截了请求换个网络环境试试。OAuth 相关报错如果你看到 OAuth 字样说明配置里混进了需要 OAuth 的 provider 设置。OpenClaw 对接千问用的是 API Key 模式不需要 OAuth。检查providers下是不是有多余的 provider 配置把不相关的删掉只留bailian这一个。模型找不到 / model not foundagents.defaults.model.primary里的名字和providers里的键名对不上。比如 provider 叫bailianprimary 就必须是bailian/qwen3-max。同时确认models数组里确实有qwen3-max这个 id。排查时有个通用思路先用 curl 测端点排除服务端问题再用 OpenClaw 命令行测排除配置文件问题最后进交互模式测排除运行时问题。一层层缩小范围比盲目改配置快得多。6. 长期编码场景的接入建议把千问接进 OpenClaw 只是第一步真正要长期用来写代码还有几个点值得注意。模型选择上日常对话和文档理解用qwen3-max它的 100 万上下文适合丢大文件进去分析。纯代码生成、重构、补全这类任务切到qwen3-coder-next26 万上下文对大多数项目够用响应也更聚焦。你可以在agents.defaults.models里把两个都列上需要时切换primary即可。如果你打算把 OpenClaw 当成日常编码助手长期跑建议了解一下 Coding Plan 这类方案地址是 https://taotoken.net/coding-plan 它针对持续性的编码调用做了优化比单次按量更适合高频使用。配置层面建议把openclaw.json纳入版本管理但不要把真实 Key 提交上去。可以放一份带占位符的模板真实 Key 通过环境变量注入或者单独放一个不提交的本地文件。这样换机器时配置能快速复用又不会泄露凭证。验证模型能力时除了命令行也可以到模型对话页面直接试地址是 https://taotoken.net/chat 输入同样的问题对比输出能帮你判断是模型本身的问题还是 OpenClaw 配置的问题。最后接入文档建议收藏一份字段含义和最新端点以文档为准https://taotoken.net/doc 。配置这东西版本一更新字段可能就变遇到拿不准的字段先查文档再改比反复试错省时间。整套流程走下来从改openclaw.json到跑通第一次对话熟练后五分钟内能完成。