Tài liệu
Claude Agent SDK
Agent SDK không có tùy chọn URL cơ sở — nó khởi chạy CLI Claude Code và chuyển toàn bộ môi trường cho CLI. Đây là điểm để can thiệp định tuyến, và chỉ cần hai biến.
Tìm tùy chọn base_url trong SDK sẽ không thấy kết quả nào; đây không phải thiếu sót trong tài liệu — tùy chọn đó không tồn tại. SDK chạy CLI Claude Code dưới dạng tiến trình con, và chính CLI đọc ANTHROPIC_BASE_URL cùng ANTHROPIC_AUTH_TOKEN. Thiết lập hai biến đó sẽ định tuyến mọi lệnh gọi mà tác tử thực hiện, không cần thay đổi mã của tác tử.
# The SDK has no base_url option. The CLI it spawns reads these, and the
# SDK passes the parent environment straight through — so exporting them
# before your program starts is enough.
export ANTHROPIC_BASE_URL=https://api.kunavo.com
export ANTHROPIC_AUTH_TOKEN=sk-kn-...
# Pin models Kunavo serves: the CLI's default and its opus/sonnet aliases
# follow Anthropic's newest models, and the sonnet alias asks for Sonnet 5.5,
# which Kunavo does not serve — unpinned, those requests 404.
export ANTHROPIC_MODEL=claude-sonnet-5
export ANTHROPIC_DEFAULT_OPUS_MODEL=claude-opus-5-5
export ANTHROPIC_DEFAULT_SONNET_MODEL=claude-sonnet-5
export ANTHROPIC_DEFAULT_HAIKU_MODEL=claude-haiku-4-5
python my_agent.pyhttps://api.kunavo.com, không có /v1. Các ứng dụng khách Anthropic tự thêm /v1/messages. Quy tắc này cũng thường gây nhầm lẫn trong các ứng dụng khách khác có định dạng Anthropic, và được giải thích trên trang ANTHROPIC_BASE_URL.Vì sao môi trường được chuyển đến CLI
Điều này đáng được giải thích trong một đoạn, vì đây là điểm khác biệt giữa một mẹo có thể ngừng hoạt động và một thuộc tính được ghi nhận mà bạn có thể dựa vào. Cơ chế truyền tải tiến trình con của SDK Python tạo môi trường cho tiến trình con từ os.environ của tiến trình cha, sau khi loại bỏ một khóa duy nhất — CLAUDECODE, để tiến trình con không nghĩ rằng nó đang chạy trong một phiên Claude Code — rồi hợp nhất với CLAUDE_CODE_ENTRYPOINT, tiếp đến là ClaudeAgentOptions.env, sau đó là phiên bản SDK.
Có hai hệ quả, và hệ quả thứ hai là điều nhiều người hiểu nhầm. Mọi thứ trong shell đều đến được CLI, vì vậy xuất hai biến này sẽ hoạt động. Và options.env được hợp nhất sau cùng vào môi trường kế thừa, nên cách thiết lập tường minh sẽ ghi đè biến đã xuất cũ thay vì bị biến đó ghi đè. Mã nguồn nằm trong subprocess_cli.py.
Cách thiết lập tường minh và khi nào cần dùng
Các biến đã xuất dùng được trên máy của bạn nhưng dễ gặp sự cố ở mọi nơi khác: điểm cuối của tác tử trở thành thuộc tính của cách tiến trình được khởi chạy; điều này sẽ gây lỗi khi lần đầu chạy dưới trình lập lịch, trong vùng chứa hoặc trong tác vụ CI không nạp cấu hình hồ sơ của bạn. Truyền env vào đối tượng tùy chọn khiến việc định tuyến trở thành một phần của chương trình.
import asyncio
from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions
# The explicit form. options.env is merged ON TOP of the inherited
# environment, so this wins over whatever the shell happens to hold —
# which is what you want in anything that is not your own laptop.
options = ClaudeAgentOptions(
env={
"ANTHROPIC_BASE_URL": "https://api.kunavo.com",
"ANTHROPIC_AUTH_TOKEN": "sk-kn-...",
"ANTHROPIC_MODEL": "claude-sonnet-5",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "claude-opus-5-5",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "claude-sonnet-5",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "claude-haiku-4-5",
},
)
async def main():
async with ClaudeSDKClient(options=options) as client:
await client.query("Summarise the open TODOs in this repo")
async for message in client.receive_response():
print(message)
asyncio.run(main())Từng bước
- Tạo khóa tại
/app/keysrồi sao chép khóa — khóa chỉ hiển thị một lần. - Chọn nơi cấu hình định tuyến: dùng biến đã xuất khi làm việc cục bộ, dùng
ClaudeAgentOptions(env=…)cho mọi tác vụ chạy không cần giám sát. - Đặt
ANTHROPIC_BASE_URLthànhhttps://api.kunavo.comvàANTHROPIC_AUTH_TOKENthành khóask-kn-…của bạn. - Đặt
ANTHROPIC_MODEL,ANTHROPIC_DEFAULT_OPUS_MODELvàANTHROPIC_DEFAULT_SONNET_MODELthành các ID được cung cấp: mặc định tích hợp của CLI cùng các bí danhopusvàsonnetsử dụng các model mới nhất của Anthropic; model mà Kunavo không cung cấp — Sonnet 5.5, được bí danhsonnetyêu cầu — sẽ trả về 404. - Đồng thời đặt
ANTHROPIC_DEFAULT_HAIKU_MODELthànhclaude-haiku-4-5: nếu thiếu, bí danhhaikucủa CLI sẽ yêu cầu một model ID mà Kunavo không cung cấp (Haiku 5.5 từ v2.1.293), khiến các tác tử con khai báomodel: haikutrả về 404. Dòng này cũng đưa các tác vụ phụ chạy nền mà CLI tự khởi chạy sang dòng mô hình rẻ nhất. - Chạy chương trình. Không cần thay đổi gì trong mã của tác tử.
Chọn bậc nào cho từng tác vụ phụ
Một tác tử phân tách công việc — một yêu cầu của bạn có thể tạo ra nhiều lượt gọi tính phí — vì vậy việc ánh xạ bậc giá quan trọng ở đây hơn trong ứng dụng trò chuyện. Mức giá tính bằng USD cho mỗi 1M token, đầu vào / đầu ra, được đọc trực tiếp từ danh mục.
| ID mô hình | Kunavo vào / ra | Phù hợp ở đâu |
|---|---|---|
claude-haiku-4-5 | $0.70 / $3.50 | Các tác vụ phụ chạy nền do CLI tự tạo — thường xuyên, tự động và dễ khiến bạn trả quá mức |
claude-sonnet-5 | $1.40 / $7.00 | Mặc định phù hợp cho phần suy luận thực tế của tác tử |
claude-opus-5 | $3.50 / $17.50 | Chỉ dùng khi bậc giá rẻ hơn cần nhiều lần thử mới hoàn thành được |
Kiểm tra trước khi gỡ lỗi SDK
Chỉ cần một yêu cầu là đủ xác định lỗi nằm ở khóa, điểm cuối hay SDK. Nếu yêu cầu này trả về 200, cùng thông tin xác thực đó cũng dùng được cho CLI mà SDK khởi chạy; nếu vẫn có lỗi, nguyên nhân nằm ở nơi đặt biến chứ không phải giá trị của chúng.
# Settles whether a failure is the key, the endpoint, or the SDK.
# 200 here means the same credential works for the CLI the SDK spawns.
curl -sS https://api.kunavo.com/v1/messages \
-H "Authorization: Bearer sk-kn-..." \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{"model":"claude-haiku-4-5","max_tokens":16,
"messages":[{"role":"user","content":"ping"}]}'Tài liệu tham khảo
SDK là mã nguồn mở tại anthropics/claude-agent-sdk-python. Hành vi môi trường được mô tả ở đây dựa trên cơ chế truyền tải tiến trình con của SDK, được kiểm tra vào ngày 2026-09-04. SDK TypeScript có cùng kiến trúc — SDK điều khiển CLI thay vì gọi API — nên CLI vẫn đọc các biến định tuyến; README của SDK không ghi lại tùy chọn hay hành vi này, vì vậy hãy xác nhận tên tùy chọn trong các kiểu dữ liệu trước khi dựa vào cách thiết lập tường minh ở đó. Phía Kunavo sử dụng Messages API; các ứng dụng khách khác định tuyến theo cùng cách được liệt kê trên trang tổng hợp tích hợp.
Câu hỏi thường gặp
Claude Agent SDK có thể dùng URL cơ sở tùy chỉnh không?
Có, nhưng không thông qua tùy chọn của SDK — không có tham số base_url, vì vậy tìm trong README cũng không thấy. SDK chạy CLI Claude Code dưới dạng tiến trình con, và chính CLI đọc ANTHROPIC_BASE_URL cùng ANTHROPIC_AUTH_TOKEN. Đặt hai biến này trong môi trường chạy chương trình sẽ định tuyến mọi lệnh gọi mà tác tử thực hiện, không cần thay đổi mã của tác tử.
SDK chuyển các biến môi trường đến CLI như thế nào?
SDK kế thừa toàn bộ môi trường của tiến trình cha và chỉ lọc chính xác một khóa. Trong cơ chế truyền tải tiến trình con của SDK Python, môi trường tiến trình con được tạo từ os.environ của tiến trình cha sau khi loại bỏ CLAUDECODE, rồi hợp nhất với CLAUDE_CODE_ENTRYPOINT, tiếp đến là ClaudeAgentOptions.env, sau đó là phiên bản SDK. Có hai hệ quả: mọi thứ trong shell đều đến được CLI, và options.env ghi đè shell vì được hợp nhất sau cùng.
Nên dùng môi trường hay ClaudeAgentOptions(env=...)?
Hãy dùng options.env ở mọi nơi ngoài máy tính cá nhân của bạn. Dựa vào môi trường shell sẵn có đồng nghĩa với việc điểm cuối của tác tử phụ thuộc vào cách tiến trình được khởi chạy; điều này sẽ gây lỗi khi lần đầu chạy dưới trình lập lịch, trong vùng chứa hoặc trong tác vụ CI không mang theo cấu hình hồ sơ của bạn. Truyền env một cách tường minh vào đối tượng tùy chọn khiến việc định tuyến trở thành thuộc tính của chương trình thay vì môi trường xung quanh; giá trị này được hợp nhất sau môi trường kế thừa nên cũng ghi đè một biến đã được xuất cũ.
Agent SDK có cần tài khoản Anthropic riêng không?
SDK cần thông tin xác thực mà CLI Claude Code chấp nhận, nhưng không nhất thiết phải là thông tin xác thực chính chủ. Vì việc định tuyến diễn ra qua ANTHROPIC_BASE_URL và ANTHROPIC_AUTH_TOKEN, mọi điểm cuối cung cấp Anthropic Messages API đều hoạt động — trên Kunavo, đó là một khóa sk-kn- dùng với https://api.kunavo.com, tính phí theo token từ số dư trả trước thay vì theo gói.
Chương trình dùng Agent SDK nên chọn những mô hình nào?
Chọn dòng mô hình phù hợp với tác vụ phụ, vì một tác tử có thể phân công công việc cho nhiều tác vụ khác. Claude Haiku 4.5 với giá $0.70 / $3.50 cho mỗi 1M token phù hợp nhất với công việc chạy nền mà CLI tự tạo; Claude Sonnet 5 với giá $1.40 / $7.00 là lựa chọn mặc định phù hợp; Claude Opus 5 với giá $3.50 / $17.50 chỉ đáng dùng khi dòng mô hình rẻ hơn cần thử nhiều lần. Dù chọn cách nào, hãy đặt ANTHROPIC_DEFAULT_HAIKU_MODEL cùng với các biến định tuyến: nếu thiếu, bí danh haiku của CLI sẽ yêu cầu một model ID mà Kunavo không cung cấp, khiến các tác tử con khai báo model: haiku trả về 404; khi đã đặt, công việc chạy nền đó sẽ dùng Haiku thay cho mô hình chính của bạn.
TypeScript Agent SDK có hoạt động theo cách tương tự không?
SDK có cùng kiến trúc — SDK điều khiển CLI Claude Code thay vì gọi API trực tiếp — nên CLI vẫn là thành phần đọc các biến định tuyến. Trang này mô tả cơ chế của SDK Python vì đó là mã nguồn đã được đọc; nếu bạn dùng SDK TypeScript, hãy xác nhận tên tùy chọn trong các kiểu dữ liệu của chính SDK đó trước khi dựa vào cách thiết lập tường minh, và tạm thời hãy dùng các biến môi trường đã xuất.
Vì sao SDK lọc CLAUDECODE khỏi môi trường?
Để CLI do SDK khởi chạy không nghĩ rằng nó đang chạy bên trong một phiên Claude Code cha. Đây là khóa duy nhất bị loại khỏi môi trường kế thừa; ở đây, điều đó chỉ cho thấy mọi thứ khác được truyền qua đầy đủ đến mức nào — bao gồm cả hai biến định tuyến mà trang này dựa vào.