使用 OpenAI Python SDK 和 LangChain 搭配更便宜的 API (UberLLM)
在 OpenAI(...) 或 ChatOpenAI(...) 中,将 base_url="https://api.uberllm.dev/v1" 和 api_key 设置为您的 UberLLM key,然后传入任何 UberLLM model id。Chat、streaming、tool calls 和 JSON output 仍可正常工作;您的其他 code 保持不变。
步骤 (OpenAI Python SDK)
- 在您的 密钥页面 创建密钥并充值。
- 将其保存为环境变量:
export UBERLLM_API_KEY=ull_your_key
- 将客户端指向 UberLLM:
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.uberllm.dev/v1",
api_key=os.environ["UBERLLM_API_KEY"],
)
resp = client.chat.completions.create(
model="deepseek/deepseek-v4.1-flash",
messages=[{"role": "user", "content": "Give me three names for a coffee shop."}],
)
print(resp.choices[0].message.content)
这就是全部的改动。client.chat.completions.create 与 stream=True、tools、response_format、temperature 和 max_tokens 照常工作。异步客户端 (AsyncOpenAI) 接受相同的两个参数。
无需修改代码
OpenAI SDK 也会读取两个环境变量,因此,调用 OpenAI() 且不带任何参数的脚本无需编辑即可迁移:
export OPENAI_BASE_URL=https://api.uberllm.dev/v1
export OPENAI_API_KEY=ull_your_key
python your_script.py
您仍然需要将 model= 字符串更改为 UberLLM ID,例如 deepseek/deepseek-v4.1-flash。
步骤 (LangChain)
pip install langchain-openai
import os
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="deepseek/deepseek-v4.1-flash",
base_url="https://api.uberllm.dev/v1",
api_key=os.environ["UBERLLM_API_KEY"],
)
print(llm.invoke("Say hello in one sentence.").content)
链、代理、bind_tools 和 .stream() 保持不变。在代码中传递 base_url 而不是依赖环境变量:参数始终优先,因此机器上一个无关的 OPENAI_API_BASE 无法将调用发送到其他地方。
LangChain.js 也是一样的思路:
import { ChatOpenAI } from "@langchain/openai";
const llm = new ChatOpenAI({
model: "deepseek/deepseek-v4.1-flash",
apiKey: process.env.UBERLLM_API_KEY,
configuration: { baseURL: "https://api.uberllm.dev/v1" },
});
为每项任务选择更经济的模型
一个密钥支持所有模型的优势在于,您可以避免为简单的工作支付高昂的前沿模型费用。常见的任务划分如下:
- 复杂推理或面向客户的回答:例如
deepseek/deepseek-v4.1-flash这样的顶级模型。 - 批量摘要、标签提取、信息提取:
google/gemma-3-27b-it或下方批处理表格中的其他模型,通常每 token 便宜 50 到 100 倍。
只需更改 model= 字符串,即可在两者之间切换。
不提供什么
UberLLM 提供聊天补全 (/v1/chat/completions)、Responses API (client.responses.create,包含流式传输和工具调用) 以及 Anthropic 消息路由。它在调用之间不保留任何状态,因此请在 input 中发送整个对话,而不是 previous_response_id (Responses API 参考)。它不提供嵌入或 Assistants API:请将这些调用保留在其当前提供商处。
故障排除
openai.AuthenticationError(401): key 错误或为空。打印len(os.environ["UBERLLM_API_KEY"]);一个 key 是ull_加上 43 个字符。openai.NotFoundError(404) on/responsesor/embeddings: 这些路由在此处不存在,请参见上方。model_not_found: OpenAI 风格的 ID,例如gpt-4o,需要在前面加上制造商:openai/gpt-4o。openai.RateLimitError(429): key 的每分钟限制(默认为 300)。请在 keys 页面提高此限制,或添加带退避的重试机制。- 402
insufficient_credits: 请在积分页面充值。