
OpenClaw 里想用 amazon-bedrock得手写 openclaw.json 的 providers还得在本机长期留一份 AWS 密钥。这条思路可以换用 TaoToken 的统一接入先去 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 创建一把 API Key然后照着 amazon-bedrock 的 provider 格式在同一个 providers 列表里补一个 TaoToken 条目baseUrl 填 https://taotoken.net/api模型 id 用模型广场上当前可用的那个。最后把 agents.defaults.model.primary 指过去执行一次 openclaw gateway restart模型请求就能从这条兼容通道走。之所以盯着 amazon-bedrock 那份配置改是因为它把 OpenClaw 里「一个 provider 到底该怎么写」示范得很完整baseUrl、auth、api、models 四件套一个不少。把这四个字段吃透换成别的统一 API 通道手感其实是同一套。下面按原文的四步顺序走一遍每一步都对应地说明改哪儿、为什么改。1. openclaw.json 的 providers 里为什么没有 amazon-bedrock1.1 默认 provider 列表覆盖不到 AWS 这一路OpenClaw 出厂自带的 provider 大多冲着标准的 OpenAI 风格接口去而 amazon-bedrock 走的是 AWS SDK 加 Converse 流式接口认证方式也不是一个 Authorization 头能解决的所以在选模型的界面里翻不到它属于正常现象。打开 ~/.openclaw/openclaw.json会看到 providers 是一个数组里面每个元素代表一家模型服务的接入方式这就是官方留出来的扩展位。换句话说缺的不是功能缺的是一段没人替你写好的配置。1.2 原文的手工路径.env 加 providers 两条腿原始那篇的做法是把这件事拆成四步。第一步在 ~/.openclaw/ 下新建一个 .env写入 AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_REGION 三个键键名区分大小写作用是让 openclaw gateway 在初始化阶段读到这组访问令牌。第二步回到 openclaw.json在 providers 列表里追加一个 amazon-bedrock 对象baseUrl 指向 bedrock-runtime 的区域端点auth 写 aws-sdkapi 写 bedrock-converse-streammodels 数组里逐个列出要用的模型。第三步把 agents.defaults.model.primary 写成「provider 名/模型 id」。第四步重启网关。四步拆开看真正跟 AWS 绑死的只有第一步、第二步里的 baseUrl以及 auth、api 那两个取值。模型 id 本来就该按实际开通情况来填跟通道本身没有强绑定关系。1.3 换成 TaoToken 之后要动的其实只有两处想清楚这一点替换就变得很简单。令牌那一层不再往 .env 里塞 AWS 三件套改成放一把 Keyprovider 那一层baseUrl 换成 https://taotoken.net/api auth 和 api 换成你本地 OpenClaw 版本里对应「OpenAI 兼容通道」的那两个取值。agents 段和重启动作基本照抄原文就行。2. .env 里那三行 AWS 令牌换成一个 Key2.1 先去把 Key 创建出来浏览器打开 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 注册登录后进控制台在 API Keys 页面新建一把 Key。复制出来的那串就是后面要写进配置的东西本文统一用 YOUR_API_KEY 代替别把真 Key 贴到会公开的地方。顺手做一件事在模型广场里确认一下你打算用的模型 id 到底是什么写法。带版本后缀、带日期后缀的一律以页面上显示的为准不要凭记忆手编一个看起来差不多的。2.2 ~/.openclaw/.env 只留一行回到终端把原来的 AWS 三行注掉或者删掉换成一行# ~/.openclaw/.env TAOTOKEN_API_KEYYOUR_API_KEY键名的书写习惯跟原文保持一致全大写加下划线。写完之后不用手动 exportopenclaw gateway 启动时会读这个文件。如果你更习惯用系统级环境变量export 一份同名的也行两种方式选一种别两边都写还写得不一样。2.3 这一步和原文的差异在哪原文那三行是为了让 AWS SDK 自己完成签名所以必须给到 AK、SK 和区域。这边认证靠一把 Key 解决本机不需要再存一份云厂商的长效凭证环境变量这一层从三个缩到一个。顺带提一句Key 尽量别写进会提交到仓库的文件里。.env 本身通常在忽略列表内但如果你把它挪到了别处记得顺手加一条忽略规则。3. 在 providers 列表里补一个 taotoken 条目3.1 先把 amazon-bedrock 那四个字段拆开看原文那份配置里真正决定「怎么连」的是这四个字段字段amazon-bedrock 的写法作用baseUrlhttps://bedrock-runtime.us-east-1.amazonaws.com请求打到哪个端点authaws-sdk用什么方式做认证apibedrock-converse-stream用哪套协议说话models一组模型对象这家服务下有哪些模型可用baseUrl、auth、api 三个字段必须严格按 OpenClaw 支持的取值写写错一个网关要么起不来要么起来了也连不通。models 是你要自己决定的id 按实际能访问到的模型填。3.2 照着这个格式写 provider打开 ~/.openclaw/openclaw.json找到 providers 这个数组在末尾追加下面这段。baseUrl 写 https://taotoken.net/api 注意末尾不要加 /v1路径由客户端自己拼。{ taotoken: { baseUrl: https://taotoken.net/api, auth: api-key, api: openai-chat-completions, models: [ { id: 以模型广场当时列表为准, name: 兼容通道模型, reasoning: false, input: [text], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 0, maxTokens: 0 } ] } }几点说明。第一auth 和 api 的取值请对齐你本地 OpenClaw 版本支持的枚举不同版本叫法可能有差别别直接照抄 bedrock-converse-stream那是 AWS 专用的协议标识。第二cost、contextWindow、maxTokens 这几个数字以模型广场页面当时标注的为准页面上没标的就先别塞具体数字宁可留空也别编。第三id 是整份配置里最关键的一格下一节专门讲。3.3 模型 id 从模型广场拿别手编很多人在这里栽跟头是因为随手写了个看着眼熟的名字。可用的模型列表在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 的模型广场里页面显示什么就写什么一个字符都别改。带冒号、带短横线的长 id 要整段复制手敲几乎必错。如果你打算配多个模型就在 models 数组里多加几个对象每个对象 id 各不相同。primary 只会用到其中一个其余的先放着哪天想切再改那一行就行。这样做的好处是切换成本很低不用每次都回来重写整段 provider。4. agents.defaults.model.primary 指到新通道4.1 primary 和 fallbacks 怎么摆provider 加好还不算完得告诉 agent 默认用谁。在 openclaw.json 里找到 agents.defaults.model把 primary 写成「provider 名 / 模型 id」的形式agents: { defaults: { model: { primary: taotoken/YOUR_MODEL_ID, fallbacks: [] } } }斜杠前面是你在上一步起的 provider 名必须一字不差斜杠后面是 models 数组里那个 id。原文里写的是 amazon-bedrock/us.amazon.nova-2-lite-v1:0同一个套路只是把前缀换掉、把 id 换成模型广场上的那一个。fallbacks 是备选队列。如果你本地还挂着别的 provider可以按优先级往下排主通道抽风时能兜住。只配一个通道的话留空数组就行不用硬凑。4.2 models 段里的 alias 配套原文在 agents.defaults.models 里给每个模型配了个 alias把长长的模型 id 缩成一个短名字。这个不是必须的但配了之后在会话里切模型会舒服很多models: { taotoken/YOUR_MODEL_ID: { alias: tt } }键名同样是「provider 名 / 模型 id」和 primary 保持完全一致差一个字符就认不出来。alias 本身随意起只要别跟已有的重名。5. openclaw gateway restart 之后怎么确认真的通了5.1 起网关先看日志配置保存之后执行openclaw gateway restart盯一下启动输出。正常起来的话日志里会列出加载到的 provider 数量和默认模型。如果 provider 总数没变多半是 JSON 少了个逗号或者括号没闭合找个 JSON 校验器过一遍最快如果起来了但一调用就报认证相关先去检查 .env 里的键名有没有拼错。5.2 用同一把 Key 发一条测试消息网关起来不等于通。稳妥的做法是拿同一把 Key在 模型对话 里发一条最简单的消息看模型 id 和通道是不是都能正常回应。这一步的意义在于把问题范围缩到一半模型对话里能回说明 Key 和模型 id 没问题剩下的锅在 OpenClaw 的配置里模型对话里也报错那就先把 Key 或模型 id 处理掉别在 openclaw.json 里绕圈子。5.3 回控制台对一下这次调用再回到 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 的控制台翻一下用量记录刚才那条测试消息应该能对上号。如果折腾了半天一条记录都没有说明请求根本没打出去回头看看 baseUrl 有没有被某个工具自作主张补成别的地址。看到记录的那一刻整条链路就算闭环了。6. 排障几个最常见的不生效6.1 网关读不到 .env 里的 Key症状是启动正常一调用就报认证失败。常见原因有三个文件不在 ~/.openclaw/ 下、文件名不是 .env、键名大小写和引用处对不上。另外注意别在 .env 的值两侧加引号不少解析器会把引号也当成值的一部分结果 Key 多出两个字符。6.2 baseUrl 尾巴上多写了 /v1这是最容易出的一个错很多人凭肌肉记忆就把 /v1 加上去了。填进 OpenClaw 的 baseUrl 就是 https://taotoken.net/api 末尾到此为止。多写一段的结果通常是 404 而不是 401看报错码能很快区分是路径问题还是认证问题。6.3 primary 前缀和 provider 名对不上比如 provider 起名叫 taotokenprimary 里却拼成了别的写法或者模型 id 中间少了一个字符。这类问题的表现是网关起来了但一提问就说找不到模型。把 primary 的值从 models 数组里复制粘贴一遍比手敲靠谱得多。6.4 配完这一次之后OpenClaw 的 provider 机制说白了就是一个标准插槽amazon-bedrock 那份配置刚好把插槽的四个针脚标清楚了。把它抄成模子之后以后再换通道无非就是改 baseUrl 和模型 id 两处。真要动手的话建议先把模型广场页面开着边填边对照比来回切标签页省事。要是之后还打算在别的工具里复用同一把 Key可以顺手看一眼 Coding Plan以及 控制台 API Keys 里那把 Key 的余量心里有个数后面调起来不慌。