
Dùng Claude với SDK OpenAI: điểm cuối tương thích OpenAI, truyền luồng, công cụ và giới hạn
Mã được viết cho OpenAI SDK có thể gọi Claude mà không cần viết lại: trỏ base_url đến /v1của gateway, sử dụng khóa gateway và ID mô hình Claude. Endpoint chấp nhận yêu cầu Chat Completions, truyền luồng theo cùng định dạng và hỗ trợ gọi hàm. Một số tính năng Claude chỉ có trong định dạng gốc của Anthropic; phần cuối trình bày khi nào nên chuyển đổi.
Thông tin về endpoint
| Mục | Giá trị |
|---|---|
| URL cơ sở | https://aiprimetech.io/v1 |
| Endpoint trò chuyện | POST https://aiprimetech.io/v1/chat/completions |
| Danh sách mô hình | GET https://aiprimetech.io/v1/models |
| Xác thực | Authorization: Bearer <key>; x-api-key cũng được chấp nhận |
| Mô hình | Các ID Claude như claude-sonnet-5; các ID GPT với khóa thuộc nhóm Codex |
Python
pip install openaiimport os
from openai import OpenAI
client = OpenAI(base_url="https://aiprimetech.io/v1", api_key=os.environ["AIPRIME_API_KEY"])
resp = client.chat.completions.create(
model="claude-sonnet-5",
max_tokens=1024,
messages=[
{"role": "system", "content": "You are a concise assistant."},
{"role": "user", "content": "Explain idempotency keys in two sentences."},
],
)
print(resp.choices[0].message.content)
print(resp.usage)base_url phải kết thúc bằng /v1: SDK thêm /chat/completions vào đó. Nếu không có /v1 yêu cầu được gửi đến trang web và trả về HTML; khi có /v1 hai lần, nó trả về 404 page not found.
Node.js
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://aiprimetech.io/v1", apiKey: process.env.AIPRIME_API_KEY });
const resp = await client.chat.completions.create({
model: "claude-sonnet-5",
max_tokens: 1024,
messages: [{ role: "user", content: "Write a haiku about retries." }],
});
console.log(resp.choices[0].message.content);Truyền dữ liệu theo luồng
stream = client.chat.completions.create(
model="claude-sonnet-5",
max_tokens=2048,
stream=True,
stream_options={"include_usage": True},
messages=[{"role": "user", "content": "Outline a zero-downtime migration."}],
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
if chunk.usage:
print("\n", chunk.usage)Dùng luồng cho câu trả lời dài: yêu cầu không dùng luồng phải hoàn tất trong thời gian chờ của ứng dụng khách, còn luồng thì không. include_usage thêm một đoạn cuối chứa số lượng token. Tìm hiểu thêm về lý do điều này quan trọng trong truyền phản hồi LLM theo luồng.
Gọi hàm
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Current weather for a city",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"],
},
},
}]
resp = client.chat.completions.create(
model="claude-sonnet-5", max_tokens=512, tools=tools,
messages=[{"role": "user", "content": "What is the weather in Paris?"}],
)
call = resp.choices[0].message.tool_calls[0]
print(call.function.name, call.function.arguments) # get_weather {"city": "Paris"}Phản hồi trả về có finish_reason: "tool_calls" và theo kiểu OpenAI tool_calls. Chạy hàm, thêm một tool thông điệp chứa kết quả và giá trị tương ứng của tool_call_id, rồi gọi lại, giống hệt như với các mô hình OpenAI.
Suy luận và tư duy
reasoning_effort ánh xạ tới thiết lập mức độ nỗ lực của Claude và chấp nhận low, medium, high, xhigh hoặc max. Giá trị none bị từ chối. Khi mô hình tư duy, nội dung suy luận được trả về trong một trường riêng reasoning_content bên cạnh content, nên mã đọc message.content vẫn hoạt động mà không cần thay đổi.
resp = client.chat.completions.create(
model="claude-opus-5-5", max_tokens=4096, reasoning_effort="high",
messages=[{"role": "user", "content": "Find the bug in this function: ..."}],
)Mô hình
| ID mô hình | Dùng cho |
|---|---|
claude-sonnet-5 | Lựa chọn mặc định cho lập trình và tác vụ của tác nhân: nhanh, mạnh, giá tầm trung. |
claude-opus-5-5 | Suy luận khó hơn, tái cấu trúc mã quy mô lớn, tác nhân chạy trong thời gian dài. |
claude-fable-5-1 | Năng lực cao nhất và đắt nhất; dành cho các tác vụ khó nhất. |
claude-haiku-4-5 | Rẻ và nhanh: tiêu đề, tóm tắt, phân loại, các bước nhỏ. |
Dùng chính xác các ID này. Các ID cũ có ngày tháng như claude-3-5-sonnet-20241022 vẫn xuất hiện trong một số danh sách mô hình nhưng không được phục vụ và trả về lỗi mô hình không được hỗ trợ.
Khi nào nên dùng API gốc của Anthropic
Định dạng OpenAI hỗ trợ trò chuyện, truyền theo luồng, công cụ và hình ảnh. Dùng định dạng Messages của Anthropic trên cùng cổng kết nối khi bạn cần chỉ định rõ các điểm ngắt bộ nhớ đệm prompt, các khối tư duy để truyền lại giữa các lượt, tài liệu PDF hoặc trích dẫn. Các hướng dẫn về Anthropic Python SDK và thiết lập hướng dẫn Vercel AI SDK trình bày cách sử dụng này.
Khắc phục sự cố
| Những gì bạn thấy | Nguyên nhân | Cách khắc phục |
|---|---|---|
Lỗi phân tích cú pháp JSON, phản hồi bắt đầu bằng < | base_url không có /v1 | https://aiprimetech.io/v1 |
404 page not found | /v1 hai lần | Chính xác một /v1 |
401 Invalid API key | Thiếu khóa hoặc khóa không đúng trong tiến trình | Kiểm tra biến; mỗi khóa thuộc về một cổng kết nối |
| Mô hình không được hỗ trợ | ID mô hình cũ có ngày tháng hoặc bị viết sai | Dùng một ID trong bảng phía trên |
'none' is not supported | reasoning_effort="none" | Sử dụng low hoặc cao hơn, hoặc bỏ qua |
429 Concurrency limit exceeded for user | Quá nhiều yêu cầu đang được xử lý đồng thời | Giới hạn số yêu cầu song song; xem giới hạn tốc độ và thử lại |
| Hết thời gian chờ với câu trả lời dài | Yêu cầu dài không dùng luồng | Dùng luồng hoặc tăng thời gian chờ của ứng dụng khách |
Câu hỏi thường gặp
Tôi có thể dùng Claude với OpenAI SDK không?
Tôi dùng URL cơ sở nào cho Claude trong OpenAI SDK?
Gọi hàm có hoạt động với Claude thông qua định dạng OpenAI không?
Khi nào tôi nên dùng API gốc của Anthropic?
Lấy khóa API — không cần tài khoản Anthropic hay đăng ký danh sách chờ.
Lấy khóa API của bạnAI Prime Tech là một cổng API độc lập. AI Prime Tech không liên kết với, không được Anthropic chứng thực và không phải là đại lý bán lại của Anthropic. Claude và các tên mô hình liên quan là nhãn hiệu của chủ sở hữu tương ứng.