
先给一个判断LiteLLM Router 真正值钱的地方不是把一堆模型接进来而是把模型调用的预算、限流、重试、fallback 和日志放到同一个网关里治理。架构图本身没问题真正让项目卡住的是落地时 Key 越攒越多OpenAI 一把、Anthropic 一把、Google 一把每把还要单独看余额、单独续费、单独排查限额。TaoToken 的做法是把这些 Key 收拢成一把再喂给同一个 LiteLLM Router。要拿这一把 Key先去 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_content 注册并创建 API KeyRouter 里的 Base URL 统一填 https://taotoken.net/api末尾不要加 /v1。下面是迁移时实际要改的文件和验证步骤。1. 这张架构图没错麻烦的是 Key 越攒越多1.1 Router 管的是策略不是 Key 本身很多人把 LiteLLM Router 理解成「一个接口连十个模型」其实更准确的说法是它是一套网关策略。请求进来后走哪个模型、失败重试几次、超预算怎么办、上游挂了是否降级到备用模型都由 router_settings 和每个 model 的 litellm_params 控制。这些规则才是 Router 的核心资产API Key 只是执行这些规则时需要的通行证。既然通行证只是凭据那一叠 Key 散落在各家控制台里就是最不该有的运维负担。某个 Key 过期、某个 Key 超限、某团队偷偷用了不该用的模型排查起来都要先经历一个「先确认是哪个 Key」的过程。把这些 Key 收到一处不改变规则本身只改变规则执行时的认证方式。架构图不用重画中间只是多了一条统一通道。1.2 迁移前后对比三把 Key 收成一把原本状态接入 TaoToken 后model_list 里每个 litellm_params 各填一家平台 Keyapi_key 全部填同一把 YOUR_API_KEYapi_base 指向 openai/anthropic/google 各自域名api_base 固定为 https://taotoken.net/api某家余额告警要去对应平台控制台查在 TaoToken 控制台统一查看调用记录工程师离职时交接几份不同平台的密钥文档只交接一个入口和一把 Key需要说清楚TaoToken 不是把三家模型合并成一个模型。GPT 仍是 GPTClaude 仍是 ClaudeGemini 仍是 Gemini。Router 决定的 model_name 完全不变变化的只是上游 Base URL 和认证凭据。这样做的收益是以后新增模型时不需要再让运维去申请另一家平台的 Key只需在配置里把新模型的 api_key 也填上同一把再核对模型广场的 ID。2. 拿 Key先到模型广场对一下模型 ID2.1 注册、创建 API Key 和模型 ID 都在同一个地方打开 TaoToken注册登录后在控制台创建 API Key再把 Key 复制到剪贴板备用。模型 ID 不用到别处记模型广场那一页就有当时上线的模型列表。我迁移时习惯先把 config.yaml 里用到的模型名抄到文本里再和模型广场逐行对照确认每个模型都处于可调用状态然后才动配置。这一步容易踩的坑是网上各种配置片段里经常出现带日期后缀或「更强」字样的模型名。这些名字不一定在模型广场上线直接复制过来Router 会把请求发给上游但上游不认识这个模型最终报 Invalid model 或 404。所以请记住模型 ID 一律以模型广场当时列表为准不要照搬别的文章的配置。2.2 兼容通道本身不参与路由决策TaoToken 在 LiteLLM 里的角色就是一条兼容通道。它不参与路由决策不决定哪个请求走哪个模型更不干预失败重试。路由决策仍然由 LiteLLM Router 做这里配置的重试次数、超时时间、冷却时间、预算告警迁移后原样生效。可以把 Router 想成外卖平台的调度中心各家餐厅是模型供应商配送规则是路由策略。原来调度中心需要分别和各餐厅结算每接一家餐厅就要押一张卡TaoToken 相当于把所有餐厅的结算收到同一个账房Router 依然按自己的规则派单、催单、取消订单。理解这一点后迁移范围就很清楚了只动 model_list 里的 api_key 和 api_base其它一切保持原状。3. 改动只落在 config.yaml 的 model_list3.1 迁移前的状态三个 litellm_params 三把 Key假设你现在的 config.yaml 长这样model_list: - model_name: gpt-4o litellm_params: model: openai/gpt-4o api_key: sk-123456 - model_name: claude-sonnet litellm_params: model: anthropic/claude-sonnet api_key: sk-ant-abcdef - model_name: gemini-pro litellm_params: model: gemini/gemini-pro api_key: AIzaSy-xyz三个模型三把 Key三家控制台。任何一把失效或超限Router 都会在线上表现出「某个模型突然不可用」但你很难第一时间判断是 Key 的问题还是模型本身的问题因为在 Router 日志里看到的是同一个错误码。长期维护下来哪个 Key 什么时候过期基本靠人肉记。3.2 迁移后的状态api_key 全部替换api_base 固定把上面片段改成下面这样model_list: - model_name: gpt-4o litellm_params: model: openai/gpt-4o api_key: YOUR_API_KEY api_base: https://taotoken.net/api - model_name: claude-sonnet litellm_params: model: anthropic/claude-sonnet api_key: YOUR_API_KEY api_base: https://taotoken.net/api - model_name: gemini-pro litellm_params: model: gemini/gemini-pro api_key: YOUR_API_KEY api_base: https://taotoken.net/api注意下面几点参数填写要求api_key全部替换为从 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_content 创建的那把 YOUR_API_KEY不要填成官网登录密码api_base固定写 https://taotoken.net/api末尾不要加 /v1LiteLLM 会自己拼后续路径model 参数openai/、anthropic/、gemini/ 前缀是 LiteLLM 识别供应商的前缀保留原来的写法具体名字以模型广场当时列表为准上面示例里的 claude-sonnet 只是示意你迁移时保持 config.yaml 里原来的模型名即可不必改成示例里的缩写。如果你 Key 习惯放在环境变量里检查一下.env中的OPENAI_API_KEY、ANTHROPIC_API_KEY这类配置替换成同一把新 Key否则环境变量优先级会盖过 config.yaml。3.3 router_settings 保持原样限流降级不用重写很多文章会把迁移写成「换 Key」一件事但真正要关注的是别的配置不要被动到。比如你的 router_settings 里可能已经配了这些router_settings: num_retries: 2 request_timeout: 30 allowed_fails: 3 cooldown_time: 30 routing_strategy: usage-based-routing-v2这些参数定义的是 Router 的重试、超时、冷却和路由策略。迁移时建议原样保留先观察一段时间再微调。如果担心上游新通道的并发能力可以在每个 litellm_params 下保留原来的 rpm/tpm 限流值不要因为 Key 统一了就把限流放宽否则某个项目突发流量会把整个通道打满连带其它项目也受影响。4. 验证/health 过了之后再发一次真实请求4.1 本地启动 Router先看 readiness配置保存后先用命令行把 Router 跑起来litellm --config ./config.yaml --port 4000然后请求本地的健康检查端点curl http://localhost:4000/health/readiness返回 {status:OK} 说明配置能被正常解析Router 处于就绪状态。需要注意的是readiness 只代表 Router 本身没问题它不会真的去上游模型发一次请求。所以健康检查之后一定要再做一次实际调用。4.2 用本地代理发一条消息看它走到哪个模型LiteLLM 启动后会在本地暴露一个 OpenAI 兼容入口直接向它发请求即可curl http://localhost:4000/chat/completions \ -H Content-Type: application/json \ -d { model: gpt-4o, messages: [{role: user, content: ping}] }把 model 依次换成 config.yaml 里定义的其他别名比如 claude-sonnet、gemini-pro分别看是否正常返回。如果某个模型报错先把报错信息和该模型的 litellm_params 对照一遍再决定是改 Key 还是改模型 ID。同时看一眼 Router 日志里实际命中的模型字段确认没有因为 fallback 被悄悄换到别的模型。4.3 回控制台对一下这次调用是否记账请求成功后回 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_content 的控制台看调用记录。刚才三次请求应该都能看到对应的用量。这一步能证明流量确实经过了 TaoToken 通道而不是因为环境变量残留走到了别的上游。如果控制台没有记录先查 Router 进程的环境变量里是否还有旧的 ANTHROPIC_BASE_URL 或 OPENAI_BASE_URL这类变量会覆盖 config.yaml 里的 api_base导致请求根本没发到 https://taotoken.net/api。清理掉之后重启 Router 再验一次。5. 复制这张迁移检查表5.1 先从低风险项目开始收拢场景判断只有一个模型、一个应用不用 Router直接官方 SDK 更简单本次迁移也不适用多个团队共用多模型预算要按项目切分值得迁移Router 继续管项目级限额请求量高低波动明显可以迁移保留限流、排队、重试策略批量摘要、分类、改写这类低风险任务适合路由到便宜模型统一 Key 后更好调整代码生成、合同分析、金融判断可以迁移但不要自动降级到不可控的模型只是想绕过某家平台的风控不在范围内任何兼容通道都不该这么用收拢 Key 解决的是凭据管理问题不是治理问题。原来 Router 做的预算、限流、重试、审计迁移后一样不少。建议先拿一个低风险项目做试点跑一两天确认稳定再逐步把其它项目的 Router 实例都切到同一套配置上。5.2 键统一之后更要管住降级边界Key 统一之后切换模型的成本肉眼可见地降低这时候最容易顺手把高风险任务的 fallback 打开让失败请求自动转到更便宜的模型上。便宜模型能接住很多低风险任务但高风险任务需要的是稳定、可追踪、可解释的失败记录。默认 fallback 不该把审计要求高的请求悄悄带到其它供应商。6. 换 Key 之后最常见的三个报错6.1 401 UnauthorizedKey 本身的问题换成 YOUR_API_KEY 后如果收到 401先按顺序排查三件事复制 Key 时有没有多出空格或换行Key 是不是在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_content 控制台创建的有没有把官网登录密码当成 API Key 填进去。这三处都正常再看 Router 日志里实际发出的 Authorization 头确认不是被系统环境变量里的旧 Key 覆盖。6.2 model not found模型 ID 没对齐模型广场这个报错在迁移后最常见。原因是 config.yaml 里 litellm_params.model 写了一个模型广场里没有上线的 ID或者前缀写错LiteLLM 把 openai/ 写成了别的供应商前缀。打开模型广场把报错模型的名字逐字对照一遍。另外要区分 model_name 和 litellm_params.model前者是 Router 内部用的别名后者必须能被上游真实识别。两者不一致时Router 可能成功选路但上游拒绝执行。6.3 请求变慢或者频繁失败重试参数和冷却时间不合适如果请求不是直接报错而是慢、偶尔成功偶尔失败问题通常在 router_settings 的 num_retries、allowed_fails、cooldown_time。上游通道短暂抖动时Router 会按配置重试重试次数太多会把超时时间叠得很长。还有一种隐蔽情况api_base 写成了 https://taotoken.net/api/v1末尾多出的 /v1 会让上游返回 404Router 把这当成失败又自动重试最后表现为「请求明显变慢」。核对一下 api_base再看限流值是否和模型广场标明的速率一致。7. 迁移收尾用同一把 Key 跑一次对话再离开7.1 先到模型对话页验证 Key 可用性如果手头没有现成的 LiteLLM 环境可以在 模型对话页 先用同一把 Key 发一条消息。这样能把「Key 的问题」和「配置的问题」隔离开对话页正常说明 Key 和模型 ID 都没错问题在 LiteLLM 配置对话页也报错那就先回控制台重新创建 Key 再看模型名单。7.2 按调用记录评估 Coding Plan再决定要不要继续调整验证通过后回到 API Keys 控制台 看这把 Key 在 Router 迁移期间的调用记录确认每次请求都记在账上。如果团队接下来会频繁用 Router 跑任务可以打开 Coding Plan 看套餐是否匹配用量。至于 Claude Code 这类命令行工具接入思路一致环境变量里的 Base URL 同样填 https://taotoken.net/api具体字段对照 Claude Code 接入文档。先把 Router 这条主线跑稳再逐步把其它工具切到同一把 Key 上。