认证方式的三大派别
在具体讲每家之前,先说一个宏观结构。所有 provider 的认证方式无非三类:
理解了这三类,接下来每家只要学"它属于哪类、要配几个变量、有什么专属坑"即可。
OpenAI(含兼容第三方)
最简单的一家。环境变量:
export OPENAI_API_KEY="sk-..." # 可选, 默认 https://api.openai.com/v1 export OPENAI_API_BASE="..." # 可选, 某些企业账号需要 export OPENAI_ORGANIZATION="org-..."
调用:
completion(model="gpt-4o", messages=msgs) completion(model="gpt-4o-mini", messages=msgs) completion(model="o1", messages=msgs) # 推理模型 completion(model="o3-mini", messages=msgs)
调第三方 OpenAI 兼容:改 base_url
很多厂商直接提供 OpenAI 兼容端点(DeepSeek、Moonshot、Groq 都有专属前缀可省事,但如果你要接一个没有专属前缀的服务,比如公司内部的 qwen 服务),用通用的 openai/ 前缀 + 显式 base_url:
resp = completion( model="openai/qwen2.5-72b-instruct", messages=msgs, api_key="sk-company-xxx", api_base="https://llm-gateway.company.internal/v1", )
这是"万能兜底"用法——只要服务端长得像 OpenAI,都能走这条路。
Anthropic Claude
export ANTHROPIC_API_KEY="sk-ant-..."
completion(model="anthropic/claude-sonnet-4-5", messages=msgs, max_tokens=1024) completion(model="anthropic/claude-haiku-4-5", messages=msgs, max_tokens=1024) completion(model="anthropic/claude-opus-4-1", messages=msgs, max_tokens=4096)
1. max_tokens 是必填。不传 LiteLLM 会用默认值,但我们强烈建议显式传——否则某些老版本会报错。
2. temperature 上限是 1,不是 2。
3. system 消息写在 messages 最前面即可,LiteLLM 会自动抽出来塞到 Anthropic 的独立
system 字段。
Claude 独有:Prompt Caching 和 Extended Thinking
Claude 3.5 / 4 支持 prompt caching——把 system 或长文档标记为可缓存,下次命中折扣 90%。LiteLLM 支持这种写法:
resp = completion( model="anthropic/claude-sonnet-4-5", messages=[ {"role": "system", "content": [ {"type": "text", "text": "<20 万字的长合同...>", "cache_control": {"type": "ephemeral"}}, # 标记可缓存 ]}, {"role": "user", "content": "请总结第 3 条"}, ], max_tokens=1024, ) print(resp.usage.prompt_tokens_details.cached_tokens) # 缓存命中的 token 数
Extended thinking(会思考的 Claude)通过 thinking 参数开启:
resp = completion( model="anthropic/claude-sonnet-4-5", messages=msgs, max_tokens=8192, thinking={"type": "enabled", "budget_tokens": 4000}, )
Google Gemini(AI Studio)
Google 的 LLM 有两条路:AI Studio(面向开发者,一个 key 搞定)和 Vertex AI(面向企业,要 GCP 项目)。前者用 gemini/ 前缀,后者用 vertex_ai/。
export GEMINI_API_KEY="AIza..."
completion(model="gemini/gemini-2.5-pro", messages=msgs) completion(model="gemini/gemini-2.5-flash", messages=msgs) completion(model="gemini/gemini-2.0-flash", messages=msgs) completion(model="gemini/gemini-2.0-flash-thinking-exp", messages=msgs)
Gemini 的特有参数
resp = completion( model="gemini/gemini-2.0-flash", messages=msgs, temperature=0.5, extra_body={ "topK": 40, # Gemini 专有 "safetySettings": [ # 审查策略 {"category": "HARM_CATEGORY_HATE_SPEECH", "threshold": "BLOCK_NONE"}, ], }, )
Azure OpenAI
Azure 是 OpenAI 模型,但挂在微软的 endpoint 下,认证方式完全不同。三个变量缺一不可:
export AZURE_API_KEY="..." export AZURE_API_BASE="https://my-instance.openai.azure.com" export AZURE_API_VERSION="2024-10-21"
# model 是你在 Azure Portal 创建的 deployment 名 completion(model="azure/my-gpt4o-deployment", messages=msgs)
· model 参数是你的 deployment 名,不是模型名。
· api_version 每几个月更新一次,太旧会报错;太新可能没 GA。
· Azure 有 content filter,回复可能被包裹成
content_filter finish_reason。· 国区 Azure(Azure China)要换 endpoint(
.openai.azure.cn)和独立 key。
AWS Bedrock
Bedrock 是 AWS 的 LLM 聚合服务,里面有 Anthropic、Meta、Mistral、Cohere、Titan 等厂商的模型。认证走标准 AWS IAM:
export AWS_ACCESS_KEY_ID="AKIA..." export AWS_SECRET_ACCESS_KEY="..." export AWS_REGION_NAME="us-east-1" # 如果你在 EC2 或 Lambda 里, 用 IAM Role 就不用上面三个变量
# Bedrock 里的 Claude completion( model="bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0", messages=msgs, max_tokens=1024, ) # Bedrock 里的 Llama completion( model="bedrock/meta.llama3-70b-instruct-v1:0", messages=msgs, max_tokens=1024, ) # Bedrock Nova (AWS 自家 2024 新模型) completion( model="bedrock/us.amazon.nova-pro-v1:0", messages=msgs, max_tokens=1024, )
1. Region 问题:不是所有模型都在所有 region 上线。Claude 一般在 us-east-1、us-west-2、eu-central-1。国内用户最多的是 us-east-1。
2. Inference Profile:2024 年起 Bedrock 要求跨 region inference 走 profile,model id 会带
us. 前缀(如 us.amazon.nova-pro-v1:0)。3. AssumeRole:跨账号场景用 STS 临时凭证时,设
AWS_SESSION_TOKEN。
Vertex AI(GCP)
Vertex 是 Google 的企业级 LLM,底下模型既有 Google 自家的 Gemini,也有 Anthropic Claude。认证走 GCP 的 ADC:
# 方式一: service account JSON export GOOGLE_APPLICATION_CREDENTIALS="/path/to/sa.json" # 方式二: gcloud CLI 登录 (本地开发) gcloud auth application-default login # 必填 export VERTEXAI_PROJECT="my-gcp-project-id" export VERTEXAI_LOCATION="us-central1"
# Gemini on Vertex completion(model="vertex_ai/gemini-2.5-pro", messages=msgs) # Claude on Vertex completion( model="vertex_ai/claude-sonnet-4-5@20250822", # 注意版本号写法 messages=msgs, max_tokens=1024, )
用 Vertex 的理由通常是合规——数据必须留在 GCP 项目里,不能走公共 API。企业部署非常常见。
Ollama(本地)
Ollama 是 Mac/Linux 上跑本地模型的首选工具。启动后默认监听 http://localhost:11434。LiteLLM 直接接:
ollama pull llama3.2 ollama pull qwen2.5
completion( model="ollama/llama3.2", messages=msgs, api_base="http://localhost:11434", # 默认就是这个, 可省 )
两种前缀的区别:
/api/chat 协议。LiteLLM 做翻译。还有第三种写法——把 Ollama 当 OpenAI 兼容服务接:
completion( model="openai/llama3.2", messages=msgs, api_base="http://localhost:11434/v1", api_key="ollama", # 随便填, Ollama 不校验 )
Together AI / Groq / Fireworks
这三家都是"开源模型托管+OpenAI 兼容"类型的服务,主打性价比和速度。配法统统超简单:
export TOGETHER_API_KEY="..." export GROQ_API_KEY="gsk_..." export FIREWORKS_AI_API_KEY="fw_..."
completion(model="together_ai/meta-llama/Llama-3.3-70B-Instruct-Turbo", messages=msgs) completion(model="groq/llama-3.3-70b-versatile", messages=msgs) completion(model="fireworks_ai/accounts/fireworks/models/llama-v3p3-70b-instruct", messages=msgs)
Groq 主打 延迟——70B 模型实测 300+ tok/s,适合需要流畅 UI 流式输出的场景。Together 和 Fireworks 型号最全。
OpenRouter
OpenRouter 自己就是一个"聚合网关",一个 key 就能调几十家。在 LiteLLM 里被当成普通 provider 接入,但你可以拿它做 provider-of-providers——适合小团队省去自己对接的麻烦:
export OPENROUTER_API_KEY="sk-or-..."
completion(model="openrouter/anthropic/claude-sonnet-4-5", messages=msgs) completion(model="openrouter/openai/gpt-4o", messages=msgs) completion(model="openrouter/google/gemini-2.0-flash", messages=msgs)
什么时候用 LiteLLM、什么时候用 OpenRouter?一句话区分:
OpenRouter 是 SaaS 网关,它给你发一个 key,你付钱给它,它付钱给上游。省事但不可控。
LiteLLM 是开源库/自建网关,你自己持有各家 key,自己承担 ops。可控但要自己维护。
混用:完全可以把 OpenRouter 当 LiteLLM 的一个 provider,用 LiteLLM 做路由 + OpenRouter 做兜底。
国内厂商:DeepSeek / 智谱 / 通义 / Moonshot
国内几家大模型都提供 OpenAI 兼容端点,LiteLLM 都有专属前缀,配法极简单:
DeepSeek
export DEEPSEEK_API_KEY="sk-..."
completion(model="deepseek/deepseek-chat", messages=msgs) # 通用对话 V3 completion(model="deepseek/deepseek-reasoner", messages=msgs) # R1 推理模型
DeepSeek 性价比无敌,R1 推理模型在实测中对标 o1-mini 但便宜 20 倍。国内直连稳定。
智谱 GLM
export ZHIPU_API_KEY="..."
completion(model="zhipu/glm-4-plus", messages=msgs) completion(model="zhipu/glm-4-flash", messages=msgs)
通义千问 Qwen(阿里)
通义在 LiteLLM 里没有独立前缀,走 openai/ + 兼容端点:
completion( model="openai/qwen-max", messages=msgs, api_key=os.getenv("DASHSCOPE_API_KEY"), api_base="https://dashscope.aliyuncs.com/compatible-mode/v1", )
Moonshot 月之暗面
export MOONSHOT_API_KEY="sk-..."
completion(model="moonshot/moonshot-v1-8k", messages=msgs) completion(model="moonshot/moonshot-v1-32k", messages=msgs) completion(model="moonshot/moonshot-v1-128k", messages=msgs)
自建推理服务:vLLM / SGLang / TGI
如果你自己跑一个开源模型(例如用 vLLM 部署 Llama-3-70B),不用给 LiteLLM 写什么插件——这些推理服务都主动暴露 /v1/chat/completions:
# 启动 vLLM
vllm serve meta-llama/Llama-3.3-70B-Instruct --port 8000
completion( model="openai/meta-llama/Llama-3.3-70B-Instruct", messages=msgs, api_key="sk-no-key-required", api_base="http://llm-01.intranet:8000/v1", )
SGLang、TGI、LM Studio 统统同理。这种 openai/ + base_url 的组合就是兜底——第 12 章的生产部署最终态,就是这套。
一份 dev 环境配置模板
把上面的东西整理成一份可以直接用的 .env 文件,放在项目根目录,用 python-dotenv 加载:
# ===== 基础三大家 ===== OPENAI_API_KEY=sk-... ANTHROPIC_API_KEY=sk-ant-... GEMINI_API_KEY=AIza... # ===== 企业网关 ===== AZURE_API_KEY=... AZURE_API_BASE=https://my.openai.azure.com AZURE_API_VERSION=2024-10-21 AWS_ACCESS_KEY_ID=AKIA... AWS_SECRET_ACCESS_KEY=... AWS_REGION_NAME=us-east-1 # ===== 性价比备用 ===== DEEPSEEK_API_KEY=sk-... GROQ_API_KEY=gsk_... TOGETHER_API_KEY=... # ===== 国内 ===== ZHIPU_API_KEY=... MOONSHOT_API_KEY=sk-... DASHSCOPE_API_KEY=sk-... # ===== 本地 ===== # Ollama 不用 key
加载模板:
from dotenv import load_dotenv from litellm import completion load_dotenv() # 自动把 .env 读入 os.environ # 这之后, 所有 completion(model="xxx") 都会找到对应 key resp = completion(model="anthropic/claude-sonnet-4-5", messages=[{"role":"user","content":"hi"}], max_tokens=100)
探测可用性:validate_environment
你配了一大堆环境变量,怎么知道哪家能调通?LiteLLM 有个工具函数:
import litellm result = litellm.validate_environment("anthropic/claude-sonnet-4-5") print(result) # {'keys_in_environment': True, 'missing_keys': []} result = litellm.validate_environment("azure/my-deployment") print(result) # {'keys_in_environment': False, # 'missing_keys': ['AZURE_API_KEY', 'AZURE_API_BASE', 'AZURE_API_VERSION']}
写个启动时的健康检查,保证程序起来就知道哪些路通、哪些路断:
import litellm PROVIDERS = [ "gpt-4o-mini", "anthropic/claude-haiku-4-5", "gemini/gemini-2.0-flash", "deepseek/deepseek-chat", "groq/llama-3.3-70b-versatile", ] for m in PROVIDERS: r = litellm.validate_environment(m) flag = "OK " if r["keys_in_environment"] else "MISSING" print(f"{flag} {m} {r['missing_keys']}")
每家的模型到哪找
一个现实问题:厂商的模型名经常变。LiteLLM 维护了一份实时模型表,叫 model_prices_and_context_window.json,里面有每个模型的价格、上下文窗口、支持能力。在线版本:
https://github.com/BerriAI/litellm/blob/main/model_prices_and_context_window.json
Python 里直接读:
import litellm info = litellm.get_model_info("anthropic/claude-sonnet-4-5") print(info["max_input_tokens"]) # 200000 print(info["input_cost_per_token"]) # 0.000003 print(info["output_cost_per_token"]) # 0.000015 print(info["supports_function_calling"]) print(info["supports_vision"])
这个表是社区滚动更新的,价格精度每周都在刷新。第 9 章会讲怎么覆盖它——比如你买了 Bedrock 的 savings plan,实际价格比公开报价低 40%。
企业部署的安全实践
上线前几条硬底线:
- 不要把 key 写死在代码里。任何时候都要走环境变量或 secret manager(AWS Secrets Manager / GCP Secret Manager / HashiCorp Vault)。
- 把 dev / staging / prod 的 key 分开。每一套用独立账单,便于审计和追责。
- 限制每个 key 的权限。Anthropic / OpenAI 都支持 restricted API key,只允许调某几个模型或限额。
- 为每家 provider 设超时。
completion(model=..., timeout=30),避免上游挂掉拖垮你的服务。 - 把 key 日志脱敏。LiteLLM 的 logger 默认会脱敏 key 前缀,但自己写的 trace 容易漏,特别注意别
print(**kwargs)。
本章小结
- 认证三派:API Key / 云厂商凭证 / 自建 base_url
- OpenAI / Anthropic / Gemini 是"一个 key 就跑"的轻量派
- Azure / Bedrock / Vertex 是"多变量 + 云凭证"的企业派
- Ollama / vLLM / SGLang 是"自建 base_url"的私有派,用
openai/前缀兜底最灵活 - 国内 DeepSeek / 智谱 / Moonshot 都有专属前缀,通义走
openai/+ 兼容端点 - 用
litellm.validate_environment做启动健康检查,get_model_info查模型参数