Sử dụng OpenAI Python SDK và LangChain với một API rẻ hơn (UberLLM)
Đặt base_url="https://api.uberllm.dev/v1" và api_key thành khóa UberLLM của bạn trong OpenAI(...) hoặc ChatOpenAI(...), sau đó truyền bất kỳ model id nào của UberLLM. Chat, streaming, tool calls và JSON output vẫn hoạt động; mã của bạn vẫn giữ nguyên.
Các bước (OpenAI Python SDK)
- Tạo khóa trên trang khóa của bạn và nạp tiền.
- Lưu nó dưới dạng biến môi trường:
export UBERLLM_API_KEY=ull_your_key
- Trỏ client đến 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)
Đó là toàn bộ thay đổi. client.chat.completions.create với stream=True, tools, response_format, temperature và max_tokens hoạt động như trước. Client bất đồng bộ (AsyncOpenAI) cũng nhận hai đối số tương tự.
Không cần chỉnh sửa code
OpenAI SDK cũng đọc hai biến môi trường, vì vậy một script gọi OpenAI() mà không có đối số nào có thể được di chuyển mà không cần chỉnh sửa:
export OPENAI_BASE_URL=https://api.uberllm.dev/v1
export OPENAI_API_KEY=ull_your_key
python your_script.py
Bạn vẫn cần thay đổi chuỗi model= thành một ID UberLLM như deepseek/deepseek-v4.1-flash.
Các bước (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)
Chains, agents, bind_tools và .stream() hoạt động không thay đổi. Truyền base_url trong mã thay vì dựa vào biến môi trường: đối số luôn được ưu tiên, vì vậy một OPENAI_API_BASE lạc trên máy sẽ không thể gửi các cuộc gọi đi nơi khác.
LangChain.js cũng có ý tưởng tương tự:
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" },
});
Chọn một mô hình rẻ hơn cho mỗi công việc
Mục đích của việc dùng một khóa cho mọi mô hình là bạn có thể ngừng trả giá cao nhất cho những công việc dễ dàng. Một cách phân chia phổ biến:
- Suy luận phức tạp hoặc trả lời khách hàng: một mô hình hàng đầu như
deepseek/deepseek-v4.1-flash. - Tóm tắt hàng loạt, gắn thẻ, trích xuất:
google/gemma-3-27b-ithoặc một mô hình khác từ bảng xử lý hàng loạt bên dưới, thường rẻ hơn 50 đến 100 lần mỗi token.
Chỉ cần thay đổi chuỗi model= để chuyển đổi giữa hai loại.
Những gì không có
UberLLM cung cấp tính năng hoàn thành cuộc trò chuyện (chat completions) (/v1/chat/completions), API Responses (client.responses.create, bao gồm streaming và tool calls) và tuyến tin nhắn của Anthropic. Nó không lưu trữ trạng thái giữa các cuộc gọi, vì vậy hãy gửi toàn bộ cuộc trò chuyện trong input thay vì previous_response_id (tham khảo API Responses). Nó không cung cấp embeddings hoặc Assistants API: hãy giữ các cuộc gọi đó trên nhà cung cấp hiện tại của bạn.
Khắc phục sự cố
openai.AuthenticationError(401): khóa sai hoặc trống. Inlen(os.environ["UBERLLM_API_KEY"]); một khóa làull_cộng 43 ký tự.openai.NotFoundError(404) trên/responseshoặc/embeddings: các tuyến đường đó không tồn tại ở đây, xem ở trên.model_not_found: ID kiểu OpenAI nhưgpt-4ocần có tên nhà cung cấp ở phía trước:openai/gpt-4o.openai.RateLimitError(429): giới hạn mỗi phút của khóa (mặc định là 300). Tăng giới hạn này trên trang khóa, hoặc thêm các lần thử lại với backoff.- 402
insufficient_credits: nạp thêm tiền trên trang tín dụng.
Đọc thêm
- Tài liệu tham khảo SDK của OpenAI và tài liệu LangChain](/docs/langchain)
- API GPT rẻ nhất
- Một API key cho tất cả các LLM