SDK 与框架集成
所有 SDK 都按同样的三步接入 GateLLM。找到你用的 SDK,看清它的 base_url 约定与坑,照着抄即可。
网关以协议为导向:不管你用哪个 SDK,只要它说 OpenAI / Anthropic / Gemini / DashScope / Realtime / MCP 其中一种协议,把它的 base_url 指向网关、换上 access key,就能调用任意已配置的模型 —— 包括跨协议调用其他厂商的模型。
base_url 指向网关
默认 https://your-gateway.gatellm.io —— 是否含 /v1 因 SDK 而异(每个示例给出确切值)。
换成网关 access key
不是上游的 sk-… 密钥 —— 同一把 access key 装进你 SDK 期望的任意 header。
模型名用网关配置名
是你在控制台配置的名字 —— 不是厂商官方名。
Authorization: Bearer <key>x-api-key: <key>x-goog-api-key: <key>| SDK / 框架 | 语言 | 协议 | 文档 |
|---|---|---|---|
| 官方厂商 SDK | |||
| OpenAI SDK | Python, Node.js | OpenAI | 示例 |
| Anthropic SDK | Python, Node.js | Anthropic | 示例 |
| Google GenAI SDK | Python, JavaScript | Gemini | 示例 |
| OpenAI-compatible third parties | Python, Node.js | OpenAI-compatible | 示例 |
| DashScope 原生 | |||
| DashScope SDK | Python | DashScope | 示例 |
| 统一 SDK / 网关层 | |||
| Vercel AI SDK | TypeScript | OpenAI / Anthropic | 示例 |
| LiteLLM | Python | OpenAI-compatible | 示例 |
| Portkey | Node.js, Python | OpenAI-compatible | 示例 |
| Braintrust / Langbase | TypeScript, Python | OpenAI-compatible | 示例 |
| Semantic Kernel | Python, .NET | OpenAI-compatible | 示例 |
| Spring AI | Java | OpenAI-compatible | 示例 |
| 编排框架 | |||
| LangChain | Python, TypeScript | OpenAI / Anthropic | 示例 |
| LangGraph | Python, TypeScript | OpenAI / Anthropic | 示例 |
| LlamaIndex | Python, TypeScript | OpenAI-compatible | 示例 |
| CrewAI | Python | OpenAI-compatible (LiteLLM) | 示例 |
| AutoGen / AG2 | Python | OpenAI-compatible | 示例 |
| DSPy | Python | OpenAI-compatible | 示例 |
| Haystack | Python | OpenAI-compatible | 示例 |
| Llama Stack | Python | OpenAI-compatible | 示例 |
| Agent SDK | |||
| OpenAI Agents SDK | Python, TypeScript | OpenAI Responses | 示例 |
| Claude Agent SDK | Python, TypeScript | Anthropic | 示例 |
| Pydantic AI | Python | OpenAI-compatible | 示例 |
| Google ADK | Python | OpenAI-compatible (LiteLLM) | 示例 |
| Mastra | TypeScript | OpenAI-compatible | 示例 |
| Microsoft Agent Framework | .NET, Python | OpenAI-compatible | 示例 |
| MCP SDK | Python, TypeScript | MCP | 示例 |
| 实时语音 | |||
| Realtime WebSocket | Any WS client | OpenAI Realtime | 示例 |
| openai_audio (ASR / TTS) | Python, Node.js | OpenAI audio | 示例 |
| 本地 / 自托管 | |||
| Ollama | REST | OpenAI-compatible (upstream) | 示例 |
| vLLM | REST | OpenAI-compatible (upstream) | 示例 |
| llama.cpp server | REST | OpenAI-compatible (upstream) | 示例 |
| SGLang | REST | OpenAI-compatible (upstream) | 示例 |
| Text Generation Inference (TGI) | REST | OpenAI-compatible (upstream) | 示例 |
| LM Studio | REST | OpenAI-compatible (upstream) | 示例 |
接入坑
不是厂商官方名,也不是上游真实模型 ID —— 是你在控制台起的名字。名字不对 → 404 model_not_found。
OpenAI SDK 带 /v1;Anthropic SDK 指网关根(它自己拼 /v1/messages);Vercel AI SDK 的 createAnthropic 要带 /v1(它自己拼 /messages)。拼错会多一段或少一段路径。
当上游是 Responses 协议模型时,max_tokens 会被翻译成 max_output_tokens,且上游可能设下界(如 ≥16)—— 太小 → 400。
Claude / Gemini 的思考内容与签名会被透传或剥除 —— 取 content 数组里 type == "text" 的元素,别假设 content[0] 是文本。
它调的是 Responses API,不是 Chat Completions。上游是 openai(Chat)协议时,用 OpenAIChatCompletionsModel 显式切到 Chat;上游本身是 openai_response 时,字符串模型名直接用。
OpenAI 类只认它认识的一系列名称,会拒绝自定义网关名 —— 用 OpenAILike(Python)或显式声明模型信息绕过。
base_url 不是框架参数 —— 是 OPENAI_API_BASE 环境变量,而且 model 要带 openai/ 前缀。
不在默认清单的模型名会报错 —— 显式声明 model_info 绕过校验。
base_url 经 http_options.base_url 传入(不带 /v1),key 装在 x-goog-api-key header。