Gọi Claude API và GPT bằng Python, Node.js với API key Việt Nam

Bạn cần thêm một tính năng AI vào sản phẩm: tóm tắt phản hồi của khách, trích thông tin từ hoá đơn, trả lời câu hỏi trên website. Phần logic bạn đã hình dung xong. Thứ còn lại là một đoạn code gọi được model và một tài khoản API thanh toán được.
Nếu bạn chưa có thẻ quốc tế, hoặc muốn gọi cả Claude lẫn GPT mà không quản lý hai tài khoản nước ngoài, bài viết này dành cho bạn. Chúng tôi đưa ra các ví dụ dùng SDK chính thức của Anthropic và OpenAI cho Python và Node.js, chỉ đổi base URL và API key để trỏ về MonkeyTech API.
Chuẩn bị trước khi viết code
- API key MonkeyTech: đăng ký tại MonkeyTech API, nạp ví qua VietQR và tạo key dạng
sk-mtk-.... Nếu đây là lần đầu, xem hướng dẫn dùng Claude API tại Việt Nam. - Python 3 hoặc Node.js 18 trở lên.
- Tên model đúng: trong bài dùng
claude-fable-5vàgpt-5.6-sol. Danh sách đầy đủ có trên bảng giá hoặc quaGET /v1/models.
Hai SDK dùng hai URL gốc khác nhau. Đây là chỗ cấu hình sai phổ biến nhất:
| SDK | Base URL | Lý do |
|---|---|---|
anthropic (Python), @anthropic-ai/sdk (Node.js) |
https://api.monkeytech.vn |
SDK tự nối thêm /v1/messages |
openai (Python, Node.js) |
https://api.monkeytech.vn/v1 |
SDK yêu cầu URL đã gồm /v1 |
Đặt key trong biến môi trường, không viết thẳng vào mã nguồn:
export MONKEYTECH_API_KEY="sk-mtk-..."
Bước 1: Gọi Claude bằng Python
Cài SDK:
pip install anthropic
Tạo file claude_demo.py:
import os
from anthropic import Anthropic
client = Anthropic(
api_key=os.environ["MONKEYTECH_API_KEY"],
base_url="https://api.monkeytech.vn",
)
msg = client.messages.create(
model="claude-fable-5",
max_tokens=1024,
messages=[{"role": "user", "content": "Tóm tắt lợi ích của việc chấm công bằng điện thoại trong 3 ý."}],
)
print(msg.content[0].text)
Chạy python claude_demo.py. Thấy câu trả lời in ra là kết nối đã thông.
Bước 2: Gọi GPT bằng Python
pip install openai
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["MONKEYTECH_API_KEY"],
base_url="https://api.monkeytech.vn/v1",
)
res = client.chat.completions.create(
model="gpt-5.6-sol",
messages=[{"role": "user", "content": "Viết 2 câu chào khách cho cửa hàng trà sữa."}],
)
print(res.choices[0].message.content)
Điểm tiện lợi: cổng MonkeyTech API tự chuyển định dạng giữa chuẩn OpenAI và Anthropic. Nếu codebase của bạn đã dùng SDK openai, bạn vẫn có thể gọi Claude bằng cách đổi model="claude-fable-5", không cần cài thêm thư viện.
Bước 3: Gọi Claude và GPT bằng Node.js
npm i @anthropic-ai/sdk openai
Tạo file demo.mjs:
import Anthropic from "@anthropic-ai/sdk";
import OpenAI from "openai";
const apiKey = process.env.MONKEYTECH_API_KEY;
// Claude qua chuẩn Anthropic
const anthropic = new Anthropic({ apiKey, baseURL: "https://api.monkeytech.vn" });
const msg = await anthropic.messages.create({
model: "claude-fable-5",
max_tokens: 1024,
messages: [{ role: "user", content: "Gợi ý 3 tên cho món đồ uống mùa thu." }],
});
console.log(msg.content[0].text);
// GPT qua chuẩn OpenAI
const openai = new OpenAI({ apiKey, baseURL: "https://api.monkeytech.vn/v1" });
const res = await openai.chat.completions.create({
model: "gpt-5.6-sol",
messages: [{ role: "user", content: "Viết một câu cảm ơn khách sau khi mua hàng." }],
});
console.log(res.choices[0].message.content);
Chạy node demo.mjs. Đuôi .mjs cho phép dùng import và await ở cấp cao nhất mà không cần cấu hình thêm.
Bước 4: Bật streaming cho câu trả lời dài
Không stream thì ứng dụng phải chờ model viết xong toàn bộ câu trả lời mới nhận được kết quả. Với câu trả lời dài, người dùng sẽ thấy màn hình đứng yên khá lâu. Streaming trả về từng đoạn chữ ngay khi model tạo ra.
Python với SDK anthropic:
with client.messages.stream(
model="claude-fable-5",
max_tokens=1024,
messages=[{"role": "user", "content": "Viết quy trình mở cửa quán cà phê buổi sáng."}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
Python với SDK openai:
stream = client.chat.completions.create(
model="gpt-5.6-sol",
messages=[{"role": "user", "content": "Viết quy trình đóng ca cuối ngày."}],
stream=True,
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
Node.js với SDK @anthropic-ai/sdk:
const stream = anthropic.messages.stream({
model: "claude-fable-5",
max_tokens: 1024,
messages: [{ role: "user", content: "Viết quy trình nhận hàng từ nhà cung cấp." }],
});
stream.on("text", (text) => process.stdout.write(text));
await stream.finalMessage();
Bước 5: Xem chi phí của từng lượt gọi
Với lượt gọi không stream, MonkeyTech API trả về chi phí ngay trong tiêu đề phản hồi x-monkeytech-cost-vnd, kèm số token đầu vào, đầu ra đã tính phí. Với SDK anthropic trên Python, bạn đọc được tiêu đề này như sau:
raw = client.messages.with_raw_response.create(
model="claude-fable-5",
max_tokens=256,
messages=[{"role": "user", "content": "ping"}],
)
print("Chi phí (VNĐ):", raw.headers.get("x-monkeytech-cost-vnd"))
msg = raw.parse()
print(msg.content[0].text)
Với lượt gọi dạng stream, chi phí chỉ được chốt khi luồng kết thúc, nên bạn tra trong trang Sử dụng của bảng điều khiển. Muốn ước tính trước chi phí theo token, xem bài token là gì và cách tính chi phí API AI.
Xử lý lỗi thường gặp
| Mã lỗi | Nguyên nhân | Cách xử lý |
|---|---|---|
| 401 | Thiếu key, key sai hoặc đã thu hồi; biến môi trường chưa được nạp | Kiểm tra MONKEYTECH_API_KEY trong terminal đang chạy, tạo key mới nếu cần |
| 402 | Hết số dư ví | Nạp thêm tại bảng điều khiển |
| 404 | Sai base URL: SDK anthropic có thừa /v1, hoặc SDK openai thiếu /v1 |
Đối chiếu lại bảng URL gốc ở đầu bài |
| 429 | Quá nhiều lượt gọi song song, thường đến từ nhà cung cấp thượng nguồn | Giảm số luồng chạy cùng lúc, chờ rồi thử lại |
| 400 | JSON sai hoặc thiếu tham số, ví dụ thiếu max_tokens với SDK anthropic |
Đọc thông báo lỗi trả về và bổ sung tham số |
Cả hai SDK đều tự thử lại một số lỗi tạm thời như 429 và lỗi máy chủ. Bạn vẫn nên bắt lỗi rõ ràng để ứng dụng không dừng đột ngột. Ví dụ với Python:
import anthropic
try:
msg = client.messages.create(
model="claude-fable-5",
max_tokens=512,
messages=[{"role": "user", "content": "Xin chào!"}],
)
print(msg.content[0].text)
except anthropic.AuthenticationError:
print("401: key sai hoặc đã thu hồi.")
except anthropic.NotFoundError:
print("404: kiểm tra base_url, SDK anthropic không dùng /v1.")
except anthropic.RateLimitError:
print("429: quá nhiều lượt gọi, hãy chờ rồi thử lại.")
except anthropic.APIStatusError as e:
print(f"Lỗi {e.status_code}: {e.message}")
except anthropic.APIConnectionError:
print("Không kết nối được tới máy chủ API.")
SDK openai có các lớp lỗi cùng tên (openai.AuthenticationError, openai.NotFoundError, openai.RateLimitError, openai.APIStatusError, openai.APIConnectionError), nên bạn áp dụng cùng cấu trúc. Trên Node.js, bắt lỗi bằng err instanceof Anthropic.APIError hoặc err instanceof OpenAI.APIError rồi đọc err.status.
Lượt gọi bị lỗi xác thực, dữ liệu không hợp lệ hoặc lỗi 4xx/5xx không bị trừ tiền.
Một API key cho cả Claude và GPT
MonkeyTech API giúp lập trình viên tại Việt Nam gọi nhiều model AI mà không phải quản lý nhiều tài khoản nước ngoài:
- Tương thích chuẩn Anthropic và OpenAI: dùng SDK chính thức, chỉ đổi base URL và API key.
- Claude, GPT, DeepSeek và nhiều model khác sau cùng một key, đổi model bằng cách đổi tên model.
- Nạp ví bằng VietQR, số dư tính bằng VNĐ và không hết hạn.
- Chi phí từng lượt gọi trong tiêu đề phản hồi và trong bảng điều khiển.
- Mỗi tài khoản tối đa 10 API key hoạt động, đủ để tách key cho môi trường phát triển và môi trường chạy thật.
Nếu bạn viết code bằng Claude Code, xem thêm cách cấu hình Claude Code với API key Việt Nam.
Câu hỏi thường gặp
Không cần sửa logic. Bạn chỉ đổi base_url (Python) hoặc baseURL (Node.js) và API key. SDK anthropic dùng https://api.monkeytech.vn, SDK openai dùng https://api.monkeytech.vn/v1.
Được. Cổng MonkeyTech API tự chuyển định dạng giữa chuẩn Chat Completions và Messages, kể cả tool calling. Bạn chỉ cần đặt tên model Claude, ví dụ claude-fable-5.
Lỗi 404 thường do sai base URL. SDK anthropic tự thêm /v1/messages nên không được có /v1 ở cuối, còn SDK openai bắt buộc phải có /v1.
Xem trên bảng giá của MonkeyTech API hoặc gọi GET /v1/models bằng API key của bạn. Hãy dùng đúng tên trong danh sách, không thêm tiền tố nhà cung cấp.
Bài viết hữu ích với bạn? Thả tim để chúng tôi viết thêm chủ đề này.
Cần tự động hóa quy trình cho doanh nghiệp?
Monkey Tech build AI Agent, bot Zalo/Telegram và luồng n8n chạy thật cho bạn.