OpenAI SDK
MarkdownCác thư viện OpenAI chính thức cho Python và Node.js hoạt động với Ailoot mà không cần sửa mã — chỉ thay địa chỉ và khóa.
Hướng dẫn đầy đủ
Cài đặt
pip install openainpm install openaiKết nối
Đặt địa chỉ gốc https://api.ailoot.ai/v1. Có thể đặt trong mã hoặc qua các biến OPENAI_BASE_URL và OPENAI_API_KEY — khi đó hoàn toàn không cần sửa mã.
from openai import OpenAI
import os
client = OpenAI(max_retries=0,
base_url="https://api.ailoot.ai/v1",
api_key=os.environ["AILOOT_API_KEY"],
)
resp = client.chat.completions.create(
model="claude-sonnet-5-5",
messages=[{"role": "user", "content": "Giải thích API là gì trong hai câu."}],
)
print(resp.choices[0].message.content)import OpenAI from "openai";
const client = new OpenAI({ maxRetries: 0,
baseURL: "https://api.ailoot.ai/v1",
apiKey: process.env.AILOOT_API_KEY,
});
const resp = await client.chat.completions.create({
model: "claude-sonnet-5-5",
messages: [{ role: "user", content: "Giải thích API là gì trong hai câu." }],
});
console.log(resp.choices[0].message.content);Responses API
Định dạng mới của OpenAI. Dùng được với các mô hình có định dạng Responses trong danh mục (53 mã định danh, gồm Claude, GPT, DeepSeek, Qwen, Kimi, GLM).
resp = client.responses.create(
model="gpt-6.1-sol",
instructions="Trả lời ngắn gọn, đúng trọng tâm.",
input="TCP khác UDP ở điểm nào?",
)
print(resp.output_text)const resp = await client.responses.create({
model: "gpt-6.1-sol",
instructions: "Trả lời ngắn gọn, đúng trọng tâm.",
input: "TCP khác UDP ở điểm nào?",
});
console.log(resp.output_text);Công cụ (function calling)
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Thời tiết trong thành phố",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"],
},
},
}]
import json
messages = [{"role": "user", "content": "Thời tiết ở Kazan thế nào?"}]
# Tắt tính năng tự động thử lại: nếu hết thời gian chờ, trước tiên hãy kiểm tra Request ID trong lịch sử sử dụng.
client = client.with_options(max_retries=0)
for turn in range(4):
resp = client.chat.completions.create(
model="claude-sonnet-5-5", messages=messages, tools=tools,
)
message = resp.choices[0].message
messages.append(message.model_dump(exclude_none=True))
if not message.tool_calls:
print(message.content)
break
for call in message.tool_calls:
if call.function.name != "get_weather":
raise ValueError("Unexpected function")
arguments = json.loads(call.function.arguments)
# Thay bằng hàm thời tiết của bạn; ví dụ này sử dụng dữ liệu minh họa.
result = {"city": arguments["city"], "temperature_c": 20, "demo": True}
messages.append({"role": "tool", "tool_call_id": call.id,
"content": json.dumps(result, ensure_ascii=False)})
else:
raise RuntimeError("Tool loop limit reached")Embedding
emb = client.embeddings.create(
model="nvidia/nemotron-3-embed-1b",
input=["Tài liệu thứ nhất", "Tài liệu thứ hai"],
)
print(len(emb.data), len(emb.data[0].embedding))Hình ảnh đầu vào
resp = client.chat.completions.create(
model="gpt-6.1-sol",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "Trong ảnh này có gì?"},
{"type": "image_url", "image_url": {"url": "https://example.com/photo.jpg"}},
],
}],
)Xử lý lỗi
Lỗi Ailoot được trả về theo định dạng OpenAI, nên các ngoại lệ tiêu chuẩn của SDK có thể bắt được. Nội dung lỗi có Request ID.
import openai
try:
resp = client.chat.completions.create(model="claude-sonnet-5-5", messages=[{"role": "user", "content": "Xin chào"}])
except openai.APIStatusError as e:
print(e.status_code, e.response.json()["error"]["code"])
print(e.response.headers.get("x-request-id"))try {
await client.chat.completions.create({ model: "claude-sonnet-5-5", messages: [{ role: "user", content: "Xin chào" }] });
} catch (err) {
if (err instanceof OpenAI.APIError) {
console.log(err.status, err.code, err.headers?.["x-request-id"]);
}
}Còn câu hỏi? Hãy gửi Request ID và mô tả — chúng tôi sẽ giúp tìm hiểu.Liên hệ hỗ trợ