1. 为什么要在本地跑 LiteLLM 接统一 KeyLiteLLM 是一个把上百家模型 API 统一成 OpenAI 兼容格式的代理层装好之后你本地就多了一个/v1/chat/completions端点无论后面接的是哪家模型前端 SDK 都不用改。它适合三类人一是手里同时用好几家模型、不想每个项目都写一套适配代码的开发者二是想把模型调用收敛到一个入口、方便做日志和限流的后端同学三是本地做 Agent 或 RAG 实验、需要随时切换模型对比效果的人。这篇教程聚焦一件事装完 LiteLLM 之后怎么用 TaoToken 的统一 Key 和 API 通道把第一个多模型请求真正跑通。我会给出可直接复制的config.yaml骨架、环境变量写法、curl 验证命令以及几个我实际踩过的报错。目标是从安装到调用成功控制在 10 分钟内全程不需要你去逐个申请各家平台的 Key。需要先说明一点LiteLLM 本身只是转发层它不提供模型额度。你仍然需要一个能同时覆盖多个模型的通道TaoToken 在这里扮演的就是这个角色——一个 Key、一个 Base URL背后可以路由到不同模型。下面所有配置都围绕这个思路展开。2. 安装 LiteLLM 与 TaoToken 前置准备2.1 安装 LiteLLM推荐用 pip 装带代理服务的那一档纯 SDK 版本没有/v1端点跑不了本文的验证流程python -m venv litellm-env source litellm-env/bin/activate pip install litellm[proxy] -i https://pypi.org/simple装完确认版本低于 1.40 的版本对多模型路由支持较弱建议升级到最新litellm --version如果你用 Docker也可以直接拉官方镜像但本文以 pip 方式为主排错更直观。2.2 拿到 TaoToken 的 Key 和 Base URL登录 TaoToken 控制台在 API Keys 页面创建一个新 Key。这个 Key 就是你后面填进环境变量的唯一凭证不要写进代码仓库。控制台入口https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentlitellm_installAPI Keys 页面https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentlitellm_installBase URL 统一用https://taotoken.net/api注意这个地址后面不加 UTM 参数直接作为 API 根路径使用。LiteLLM 里配置时通常要带上/v1也就是https://taotoken.net/api/v1具体看下面配置。2.3 环境变量准备把 Key 放进环境变量避免硬编码。Linux/macOS 下export TAOTOKEN_API_KEYsk-你的Key export TAOTOKEN_BASE_URLhttps://taotoken.net/api/v1Windows PowerShell$env:TAOTOKEN_API_KEYsk-你的Key $env:TAOTOKEN_BASE_URLhttps://taotoken.net/api/v1注意环境变量只在当前终端会话有效重开终端要重新 export或者写进~/.bashrc。写进配置文件时不要带引号以外的多余空格否则 LiteLLM 读到的 URL 会多出空白字符导致 404。3. 可复制的 config.yaml 骨架LiteLLM 的核心是配置文件它决定了有哪些模型名可用、每个模型走哪个通道。下面这份骨架可以直接用我把它拆成三段讲清楚。3.1 完整配置model_list: - model_name: gpt-4o-mini litellm_params: model: openai/gpt-4o-mini api_key: os.environ/TAOTOKEN_API_KEY api_base: os.environ/TAOTOKEN_BASE_URL - model_name: claude-3-5-sonnet litellm_params: model: openai/claude-3-5-sonnet api_key: os.environ/TAOTOKEN_API_KEY api_base: os.environ/TAOTOKEN_BASE_URL - model_name: deepseek-chat litellm_params: model: openai/deepseek-chat api_key: os.environ/TAOTOKEN_API_KEY api_base: os.environ/TAOTOKEN_BASE_URL general_settings: master_key: sk-local-master database_url: null litellm_settings: drop_params: true request_timeout: 1203.2 关键字段说明model_name是你对外暴露的名字客户端请求时用这个litellm_params.model里的openai/前缀表示用 OpenAI 兼容协议去请求后面跟真实模型标识。因为 TaoToken 走的是 OpenAI 兼容通道所以这里统一加openai/前缀而不是用anthropic/或bedrock/。api_key和api_base用os.environ/语法引用环境变量这样配置文件可以进版本库而不泄露密钥。drop_params: true很关键不同模型对参数支持不一致开启后 LiteLLM 会自动丢弃不支持的字段避免因为某个模型不认top_p之类参数而整体报错。3.3 启动代理litellm --config config.yaml --port 4000 --host 0.0.0.0看到Uvicorn running on http://0.0.0.0:4000就说明起来了。master_key设成sk-local-master是为了本地调用时有个固定鉴权值生产环境请换成随机串。4. 验证请求与成功结果4.1 先列模型确认配置加载curl -s http://localhost:4000/v1/models \ -H Authorization: Bearer sk-local-master | python -m json.tool返回里应该能看到gpt-4o-mini、claude-3-5-sonnet、deepseek-chat三个 id。如果这里少了某个模型说明 yaml 缩进有问题YAML 对空格极其敏感model_list下每一项的-必须对齐。4.2 发第一个多模型请求curl -s http://localhost:4000/v1/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer sk-local-master \ -d { model: gpt-4o-mini, messages: [{role: user, content: 用一句话说明什么是统一模型网关}] } | python -m json.tool把model换成claude-3-5-sonnet或deepseek-chat再发一次如果都能返回choices[0].message.content说明多模型通道已经打通。这就是 LiteLLM 的价值客户端代码完全不变只改一个 model 字段。4.3 用 Python SDK 调用from openai import OpenAI client OpenAI( base_urlhttp://localhost:4000/v1, api_keysk-local-master ) for name in [gpt-4o-mini, claude-3-5-sonnet, deepseek-chat]: resp client.chat.completions.create( modelname, messages[{role: user, content: 回复 OK 两个字母即可}] ) print(name, -, resp.choices[0].message.content)这段脚本能一次跑通三个模型就完成了本文的闭环目标。实测下来从装包到这一步顺利的话 10 分钟内可以搞定。5. 本篇常见报错排查5.1 401 Unauthorized最常见的原因是TAOTOKEN_API_KEY没生效。LiteLLM 启动时读取环境变量如果你在另一个终端 export 的当前进程读不到。检查方法echo $TAOTOKEN_API_KEY为空就重新 export 再重启 LiteLLM。另外注意 Key 前后不要有空格复制时容易带上换行。5.2 404 Not Found 或 model not found两种可能一是api_base少了或多了/v1。TaoToken 的根路径是https://taotoken.net/apiLiteLLM 请求时会拼/chat/completions所以api_base要写成https://taotoken.net/api/v1。二是请求的model名不在model_list里LiteLLM 只认你定义的model_name不会自动透传未知模型。5.3 超时或连接被重置先确认request_timeout是否够大长文本推理容易超过默认 60 秒配置里设成 120。如果仍然超时用 curl 直接打 TaoToken 的端点排除 LiteLLM 层的问题curl -s https://taotoken.net/api/v1/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -d {model:gpt-4o-mini,messages:[{role:user,content:hi}]}这条能通说明通道没问题问题在 LiteLLM 配置不通就检查 Key 和网络。5.4 YAML 解析报错报错信息里带yaml.scanner.ScannerError基本都是缩进。用两个空格不要用 Tab。可以先用 Python 校验python -c import yaml; yaml.safe_load(open(config.yaml))没报错再启动 LiteLLM。6. 后续怎么用这套配置跑通之后你可以把 LiteLLM 当成团队内部的统一入口前端、脚本、Agent 全部指向http://localhost:4000/v1模型切换只改配置不改代码。需要长期做编码或 Agent 场景的话可以看下 Coding Plan 的额度方案比按次调用更适合高频使用Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentlitellm_install接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentlitellm_install模型对话体验https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentlitellm_install一个实用技巧把config.yaml里的model_list按用途分组比如fast-*前缀给低延迟任务、reason-*给复杂推理这样在业务代码里按前缀选模型比记具体模型名更省心。另外drop_params: true建议一直开着它能挡掉大量因参数不兼容导致的 400 错误这是我踩过几次坑之后固定下来的配置。
