Docs / Giao thức
Anthropic Messages
Anthropic SDK và Claude Code: đổi ANTHROPIC_BASE_URL là xong. Đường DUY NHẤT cho model claude-*.
Cấu hình
Endpoint giữ nguyên hình dạng của Anthropic, nên mọi tham số, tool definition, content block và cache_control đều hoạt động như cũ. Chỉ đổi base URL và key.
Base URL KHÔNG có /v1SDK Anthropic tự nối
/v1/messages vào base_url, nên giá trị đúng là https://api.apimodelhub.com. Điền https://api.apimodelhub.com/v1 thì nó gọi /v1/v1/messages và nhận 404 — lỗi trông như key sai nhưng không phải.Biến môi trường
export ANTHROPIC_BASE_URL=https://api.apimodelhub.com
export ANTHROPIC_API_KEY=sk-spk-...Python (anthropic)
from anthropic import Anthropic
client = Anthropic(base_url="https://api.apimodelhub.com", api_key="sk-spk-...")
msg = client.messages.create(
model="claude-sonnet-5-5",
max_tokens=512,
messages=[{"role": "user", "content": "Hello"}],
)
print(msg.content[0].text)TypeScript (@anthropic-ai/sdk)
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
baseURL: "https://api.apimodelhub.com",
apiKey: process.env.ANTHROPIC_API_KEY,
});
const msg = await client.messages.create({
model: "claude-sonnet-5-5",
max_tokens: 512,
messages: [{ role: "user", content: "Hello" }],
});Streaming
Bật stream: true như bình thường. SSE được chuyển byte-exact — không parse rồi dựng lại, nên thứ tự event và nội dung từng chunk giống hệt gọi trực tiếp.
with client.messages.stream(
model="claude-sonnet-5-5",
max_tokens=512,
messages=[{"role": "user", "content": "Write a haiku"}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)Prompt caching được tính đúngCache read rẻ hơn nhiều so với input (theo tỷ lệ của nhà cung cấp), cache write 5 phút và 1 giờ là hai mức khác nhau. Chúng tôi tính riêng từng mức — nhờ vậy khách dùng nhiều cache trả ít hơn hẳn so với bị gộp chung một giá.
Đếm token trước khi gửi
POST /v1/messages/count_tokens chuyển tiếp tới nhà cung cấp và KHÔNG bị tính tiền. Dùng nó để chặn request quá lớn trước khi trả tiền cho model.
n = client.messages.count_tokens(
model="claude-sonnet-5-5",
messages=[{"role": "user", "content": "Hello"}],
)
print(n.input_tokens)