新把任何智能体接入 UberLLM:一个密钥,所有模型,价格不高于官方价。
UberLLM

使用 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)

  1. 在您的 密钥页面 创建密钥并充值。
  2. 将其保存为环境变量:
export UBERLLM_API_KEY=ull_your_key
  1. 将客户端指向 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 /responses or /embeddings: 这些路由在此处不存在,请参见上方。
  • model_not_found: OpenAI 风格的 ID,例如 gpt-4o,需要在前面加上制造商:openai/gpt-4o。
  • openai.RateLimitError (429): key 的每分钟限制(默认为 300)。请在 keys 页面提高此限制,或添加带退避的重试机制。
  • 402 insufficient_credits: 请在积分页面充值。

继续阅读

入门模型

第一个在下面的代码中。每个都接受 tool calls。

模型模型 ID(复制粘贴)当前价格
DeepSeek V4.1 Flashdeepseek/deepseek-v4.1-flash输入 $0.00018 · 输出 $0.0014 / 1M
Gemini 3.5 Flashgoogle/gemini-3.5-flash输入 $0.0150 · 输出 $0.0900 / 1M
Claude Sonnet 5.5anthropic/claude-sonnet-5.5输入 $0.1062 · 输出 $0.5310 / 1M
GPT-5.5openai/gpt-5.5输入 $0.1250 · 输出 $0.7500 / 1M
Kimi K3moonshotai/kimi-k3输入 $0.0010 · 输出 $0.0788 / 1M
GLM 5.3z-ai/glm-5.3输入 $0.00070 · 输出 $0.0141 / 1M
Gemma 3 27Bgoogle/gemma-3-27b-it输入 $0.00079 · 输出 $0.0020 / 1M
Qwen3 VL 235B A22Bqwen/qwen3-vl-235b-a22b-instruct输入 $0.0021 · 输出 $0.0188 / 1M

价格为上次每小时更新时的价格,不加收费用 · 所有模型 →

适用于大型批处理作业

批量进行总结、标记和提取的最低每 token 价格。

模型模型 ID(复制粘贴)当前价格
Gemma 3 27Bgoogle/gemma-3-27b-it输入 $0.00079 · 输出 $0.0020 / 1M
GPT-OSS 120Bopenai/gpt-oss-120b输入 $0.000069 · 输出 $0.00030 / 1M
DeepSeek V3.2deepseek/deepseek-v3.2输入 $0.0026 · 输出 $0.0039 / 1M
Qwen 3 235B A22B Instruct 2507qwen/qwen3-235b-a22b-2507输入 $0.00057 · 输出 $0.0035 / 1M
Gemini 3.1 Flash Litegoogle/gemini-3.1-flash-lite输入 $0.0025 · 输出 $0.0149 / 1M
DeepSeek V4.1 Flashdeepseek/deepseek-v4.1-flash输入 $0.00018 · 输出 $0.0014 / 1M

价格为上次每小时更新时的价格,不加收费用 · 所有模型 →

常见问题

我可以使用官方的 OpenAI Python SDK 配合 UberLLM 吗?

是的。将 base_url="https://api.uberllm.dev/v1" 和您的 UberLLM 密钥传递给 OpenAI(),或设置 OPENAI_BASE_URL 和 OPENAI_API_KEY。带有 streaming、tools 和 JSON 输出的 chat.completions 适用于所有聊天模型。

LangChain 兼容 UberLLM 吗?

是的。来自 langchain-openai 的 ChatOpenAI 接受 base_url 和 api_key;chains、agents 和 tool binding 对任何 UberLLM 聊天模型都保持不变。

UberLLM 支持 embeddings 或 Responses API 吗?

Responses API 可以,embeddings 不可以。UberLLM 提供 /v1/chat/completions、/v1/responses(client.responses.create,无需 previous_response_id:每次调用发送整个对话)以及 Anthropic 的 /v1/messages 路由。请将 embeddings 保留在其当前提供商处。