1. 多模型 Key 散落一地OpenClaw 切模型切到崩溃如果你同时用 Qwen、DeepSeek、Claude、GPT 这几家模型大概率经历过这种场面每个供应商一个控制台每个控制台一套 KeyKey 还要分环境变量、分项目、分测试和生产。等到 OpenClaw 这类 Agent 工具要切模型时你得先翻出对应供应商的 Key再改一遍配置文件重启网关然后祈祷没写错缩进。LiteLLM 的价值就在这里它把不同供应商的模型统一成 OpenAI 兼容接口你只需要面对一个baseUrl和一个master_key。OpenClaw 则负责把 Agent 的模型调用指向这个统一入口。两者组合之后多模型切换从「改三家配置」变成「改一行 model 名」。但真正落地时还有一层没解决LiteLLM 背后那堆供应商 Key 依然散落在环境变量里每接一个新模型就要新增一个 Key团队协作时还要把 Key 传来传去。这篇要做的是用 TaoToken 的统一 Key 和 API 通道把 LiteLLM 的model_list收敛成一套凭证再让 OpenClaw 通过 LiteLLM 完成模型切换。适合正在搭多模型 Agent、被 Key 管理折磨过的开发者。2. TaoToken 前置把供应商 Key 收敛成一套TaoToken 在这里扮演的角色是「统一 API 通道」。你不需要为每个模型单独申请和保管 Key而是用一套 TaoToken 的 Key通过它的 API 地址访问不同模型。LiteLLM 的model_list里每个条目都指向 TaoToken 的api_baseapi_key统一读同一个环境变量。这样做的好处很直接新增模型时只改model字段不用再去找新供应商的 Key团队共享时只发一个 Key轮换凭证时只改一处。对于 OpenClaw 这种需要频繁切换模型的场景配置复杂度从 O(n) 降到 O(1)。需要提前准备的东西一个 TaoToken 账号拿到 API Key本机装好 Python 3.9 和 pip装好 OpenClaw后面会给配置骨架可选Docker用于后面做用量持久化TaoToken 的 API 入口是https://taotoken.net/api兼容 OpenAI 的/v1/chat/completions格式。你可以在控制台里创建 Key建议按用途分多个 Key比如一个给 LiteLLM 用一个给本地调试用方便后面排查问题时隔离。3. 可复制配置LiteLLM 接 TaoToken OpenClaw 骨架3.1 安装 LiteLLM最省事的方式是 pip 直接装pip3 install litellm装完之后确认版本litellm --version如果你打算用 Docker 部署后面做用量持久化会用到可以跳过这步直接用镜像。3.2 写 LiteLLM 配置新建litellm_config.yaml核心是把每个模型的api_base指向 TaoTokenapi_key统一读环境变量model_list: - model_name: qwen-plus litellm_params: model: openai/qwen-plus api_key: os.environ/TAOTOKEN_API_KEY api_base: https://taotoken.net/api/v1 - model_name: deepseek-chat litellm_params: model: openai/deepseek-chat api_key: os.environ/TAOTOKEN_API_KEY api_base: https://taotoken.net/api/v1 - model_name: claude-sonnet litellm_params: model: openai/claude-sonnet api_key: os.environ/TAOTOKEN_API_KEY api_base: https://taotoken.net/api/v1 general_settings: master_key: sk-litellm-local-2024几个关键点说明一下。model字段用openai/前缀是因为 TaoToken 走的是 OpenAI 兼容协议LiteLLM 会按 OpenAI 格式发请求。model_name是你自己起的别名OpenClaw 里引用的就是这个名字可以随便改但两边要一致。master_key是 LiteLLM 自己的准入凭证跟 TaoToken 的 Key 是两回事客户端连 LiteLLM 时用这个。设置环境变量export TAOTOKEN_API_KEY你的 TaoToken Key3.3 启动 LiteLLMlitellm --config litellm_config.yaml --port 4000看到Uvicorn running on http://0.0.0.0:4000就说明起来了。如果报model not found先检查model_list里的model_name有没有拼错。3.4 OpenClaw 侧配置骨架OpenClaw 的配置文件在~/.openclaw/openclaw.json。核心是把 provider 指向本地 LiteLLM模型 id 跟 LiteLLM 的model_name对齐{ models: { mode: merge, providers: { litellm: { baseUrl: http://localhost:4000/v1, apiKey: sk-litellm-local-2024, api: openai-completions, models: [ { id: qwen-plus, name: Qwen-Plus }, { id: deepseek-chat, name: DeepSeek-Chat }, { id: claude-sonnet, name: Claude-Sonnet } ] } } }, agents: { defaults: { model: { primary: litellm/qwen-plus }, models: { litellm/qwen-plus: {}, litellm/deepseek-chat: {}, litellm/claude-sonnet: {} } } } }apiKey填的是 LiteLLM 的master_key不是 TaoToken 的 Key。models数组里的id必须跟litellm_config.yaml里的model_name完全一致否则 OpenClaw 会报模型不存在。agents.defaults.models里列出所有可切换的模型OpenClaw 的切换命令才能识别。改完重启网关openclaw gateway restart4. 验证请求从 curl 到 OpenClaw 切换4.1 先验证 LiteLLM 通道用 curl 直接打 LiteLLM确认它能正确转发到 TaoTokencurl http://localhost:4000/v1/chat/completions \ -H Authorization: Bearer sk-litellm-local-2024 \ -H Content-Type: application/json \ -d { model: qwen-plus, messages: [{role: user, content: 用一句话说明你是什么模型}] }正常返回会带choices[0].message.contentmodel字段显示qwen-plus。如果返回 401检查Authorization里的值是不是跟master_key一致如果返回 500 且提示上游错误检查TAOTOKEN_API_KEY有没有 export 成功。4.2 验证模型切换把model换成deepseek-chat再打一次curl http://localhost:4000/v1/chat/completions \ -H Authorization: Bearer sk-litellm-local-2024 \ -H Content-Type: application/json \ -d { model: deepseek-chat, messages: [{role: user, content: 用一句话说明你是什么模型}] }两次请求用的是同一个 Key、同一个api_base只有model字段不同。这就是统一 Key 的核心价值切换模型不需要换凭证。4.3 OpenClaw 侧切换在 OpenClaw 里查看当前模型openclaw model current切换模型openclaw model switch litellm/deepseek-chat再确认一次openclaw model current然后发一条测试消息看返回内容是否来自新模型。如果切换后报model not found大概率是openclaw.json里models数组的id跟 LiteLLM 的model_name不一致或者agents.defaults.models里没列出这个模型。4.4 用量监控LiteLLM 默认把用量记在内存里重启就丢。要长期看 token 消耗得接 PostgreSQL。先建网络和数据库docker network create litellm-network docker run -d \ --name litellm-postgres \ --network litellm-network \ -e POSTGRES_USERlitellm \ -e POSTGRES_PASSWORDlitellm123 \ -e POSTGRES_DBlitellm \ -p 5432:5432 \ -v litellm-postgres-data:/var/lib/postgresql/data \ --restart unless-stopped \ postgres:15然后在litellm_config.yaml的general_settings里加一行general_settings: master_key: sk-litellm-local-2024 database_url: postgresql://litellm:litellm123litellm-postgres:5432/litellm用 Docker 起 LiteLLMdocker run -d \ --name litellm-proxy \ --network litellm-network \ -p 4000:4000 \ -e TAOTOKEN_API_KEY你的 TaoToken Key \ -e DATABASE_URLpostgresql://litellm:litellm123litellm-postgres:5432/litellm \ -e LITELLM_MASTER_KEYsk-litellm-local-2024 \ -e UI_USERNAMEadmin \ -e UI_PASSWORDadmin123 \ -v ./litellm_config.yaml:/app/config.yaml \ --restart unless-stopped \ ghcr.io/berriai/litellm:main-latest \ --config /app/config.yaml --port 4000打开http://localhost:4000/ui用admin/admin123登录在 Usage 页面就能看到每个模型的 token 消耗和请求次数。这里的数据是按model_name聚合的所以你能清楚看到 Qwen 和 DeepSeek 各用了多少。5. 本篇常见错排查报错一AuthenticationError: Invalid API key先分清是哪一层的 Key 错了。客户端连 LiteLLM 用的是master_keyLiteLLM 连 TaoToken 用的是TAOTOKEN_API_KEY。如果 curl 返回 401检查Authorization头如果 LiteLLM 日志里报上游 401检查环境变量有没有传进容器。Docker 部署时-e TAOTOKEN_API_KEY...不能漏。报错二model not found三个地方要对齐litellm_config.yaml的model_name、openclaw.json里models[].id、agents.defaults.models的键名。任何一处不一致都会报这个错。建议先用 curl 确认 LiteLLM 能识别这个模型名再去查 OpenClaw 配置。报错三OpenClaw 切换后仍走旧模型openclaw gateway restart之后配置才生效。如果重启了还不行检查openclaw.json里models.mode是不是merge如果是replace可能会覆盖掉其他 provider 的配置。另外agents.defaults.model.primary只是默认值切换命令会覆盖它但重启后可能回到默认需要重新切。报错四Docker 里 LiteLLM 连不上 Postgres两个容器要在同一个 network 里database_url里的 host 用容器名litellm-postgres不是localhost。如果 Postgres 还没起来就启动 LiteLLMLiteLLM 会报连接失败等几秒重启一下 LiteLLM 容器即可。报错五用量页面空白database_url没配或者配错时LiteLLM 不会报错只是不写库。检查general_settings里有没有database_url以及 Docker 启动时DATABASE_URL环境变量有没有传。两个地方都配了的话以环境变量为准。6. 后续怎么扩展这套结构搭好之后加新模型只需要在litellm_config.yaml的model_list里加一段api_key和api_base照抄现有的然后在openclaw.json的models数组和agents.defaults.models里各加一行重启网关就能用。整个过程不涉及新供应商的 Key 申请也不用改 OpenClaw 的 provider 配置。如果你想让 OpenClaw 的 Agent 在不同任务里自动选模型可以在agents.defaults.models里给每个模型加权重或标签OpenClaw 支持按任务类型路由。LiteLLM 侧也可以配 fallback比如qwen-plus超时自动切deepseek-chat这部分在litellm_params里加fallbacks字段就行。需要创建和管理 TaoToken 的 Key可以直接进控制台操作https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewriteAPI Key 的创建入口在这里https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewriteLiteLLM 接入的完整参数说明可以对照文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite如果你还没决定用哪个模型可以先在模型对话页面试一下再写进配置https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentchatutm_campaignrewrite长期跑 Agent 任务的话Coding Plan 的额度模型比按量计费更划算适合 OpenClaw 这种高频调用的场景https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite