API Kimi K3.1 Pro chạy tại https://api.moonshot.ai/v1 với các model ID kimi-k3.1-pro và kimi-k3.1-pro-highspeed. Nó hỗ trợ ba định dạng truyền tải: OpenAI Chat Completions, Responses API và Anthropic Messages, nên các SDK bạn đang dùng vẫn hoạt động chỉ với việc thay đổi base URL. Model sẽ được mở khóa sau khi nạp tối thiểu 1 đô la.
Đây là tài liệu tham khảo cho mã production. Đối với lần gọi đầu tiên, streaming và các thiết lập Codex hay Claude Code, hãy đọc cách sử dụng Kimi K3.1 Pro; về chi phí, xem bảng giá Kimi K3.1 Pro. Các thông tin được lấy từ hướng dẫn nhanh K3.1 Pro của Moonshot và các tài liệu được liên kết, đọc ngày 24 tháng 10 năm 2026.
Kimi K3.1 Pro Responses API, Anthropic API và Chat Completions
Moonshot cung cấp K3.1 Pro thông qua ba bề mặt API. Hãy chọn bề mặt mà thư viện client hoặc agent của bạn đã hỗ trợ; model, key và việc tính phí đều giống nhau trên cả ba.
| Bề mặt | Định dạng | Endpoint | Client điển hình |
|---|---|---|---|
| Chat Completions | OpenAI | https://api.moonshot.ai/v1/chat/completions |
SDK openai, hầu hết các framework |
| Responses API | OpenAI Responses | https://api.moonshot.ai/v1/responses |
Codex (wire_api = "responses") |
| Messages API | Anthropic | https://api.moonshot.ai/anthropic/v1/messages |
SDK Anthropic, Claude Code |
Chúng khác nhau ở cách bạn đặt TTL của cache và nơi thông tin usage được ghi nhận (xem phần caching bên dưới). Đang chuyển từ K3? Hướng dẫn API Kimi K3 của chúng tôi vẫn còn áp dụng; K3.1 Pro là phiên bản K3 được huấn luyện hậu kỳ với cùng ngữ cảnh 1.048.576 token.
API key Kimi K3.1 Pro: mở khóa và kiểm tra quyền truy cập
Bạn cần một tài khoản đã nạp tiền và một key từ đúng sản phẩm. Bốn bước:
- Nạp tối thiểu 1 đô la trên nền tảng Kimi API. K3.1 Pro là model chủ lực và chỉ được mở khóa sau khi nạp tiền thành công.
- Tạo một key trong bảng điều khiển API keys và export nó thành
MOONSHOT_API_KEY. - Xác nhận model hiển thị với key đó bằng
GET /v1/models. - Gọi
kimi-k3.1-protừ mã nguồn.
curl https://api.moonshot.ai/v1/models \
--header "Authorization: Bearer $MOONSHOT_API_KEY" | grep -o '"kimi-k3.1-pro[^"]*"'
Nếu model không được liệt kê, hãy xử lý điều đó trước. Kimi API, Kimi Code và Kimi Membership là những sản phẩm riêng biệt: key của Kimi Code sẽ không hoạt động trên endpoint API, và membership không trở thành số dư API.
Các tham số request quan trọng đối với K3.1 Pro
Hầu hết các tham số OpenAI đều hoạt động như bạn mong đợi. Đây là những tham số khác biệt hoặc dễ khiến người dùng nhầm lẫn:
| Tham số | Điều cần biết |
|---|---|
reasoning_effort |
Trường cấp cao nhất: "low", "high" hoặc "max" (mặc định là "max"). Suy luận luôn được bật. |
thinking |
Đừng gửi nó. K3.1 Pro không hỗ trợ; hãy dùng reasoning_effort thay thế. |
max_completion_tokens |
Mặc định là 131072. Đầu ra tối đa là 1.048.576 trừ đi số token prompt của bạn. |
response_format |
json_schema với strict: true. Chỉ phân tích message.content, không bao giờ phân tích reasoning_content. |
partial |
Đặt "partial": true trên một tin nhắn assistant cuối cùng để tiếp tục từ một tiền tố. |
tool_choice |
"required" buộc phải có ít nhất một lệnh gọi công cụ; "auto" để model tự quyết định. |
prompt_cache_options |
{"mode": "implicit", "ttl": "5m" hoặc "1h"} trên Chat Completions và Responses. |
Các token suy luận được tính vào usage của bạn, vì vậy hãy dùng "low" cho phân loại và trích xuất. Preserved Thinking luôn được bật, nên mọi tin nhắn assistant đều được trả về với reasoning_content còn nguyên vẹn (hướng dẫn về các model suy luận).
Gọi công cụ Kimi K3.1 Pro: một vòng lặp hoàn chỉnh bằng Python
Một vòng lặp công cụ production trên K3.1 Pro tuân theo bốn quy tắc từ tài liệu của Moonshot:
- Buộc gọi công cụ ở lượt đầu tiên bằng
tool_choice="required", sau đó chuyển sang"auto". - Thêm toàn bộ tin nhắn assistant, bao gồm cả
reasoning_contentvàtool_calls. - Gửi một tin nhắn
toolcho mỗitool_call_id. - Giới hạn số lượt để một model bị rối không thể lặp vô hạn.
import json, os
from openai import OpenAI
client = OpenAI(api_key=os.environ["MOONSHOT_API_KEY"],
base_url="https://api.moonshot.ai/v1")
TOOLS = [{"type": "function", "function": {
"name": "get_order_status",
"description": "Look up an order's shipping status by ID",
"parameters": {"type": "object",
"properties": {"order_id": {"type": "string"}},
"required": ["order_id"]}}}]
def get_order_status(order_id):
return {"order_id": order_id, "status": "shipped"}
messages = [{"role": "user", "content": "Where is order A-1042?"}]
tool_choice = "required"
for _ in range(8): # hard cap on turns
resp = client.chat.completions.create(
model="kimi-k3.1-pro", reasoning_effort="high",
messages=messages, tools=TOOLS, tool_choice=tool_choice)
msg = resp.choices[0].message
messages.append(msg) # whole message, not msg.content
if not msg.tool_calls:
print(msg.content)
break
for call in msg.tool_calls:
result = get_order_status(**json.loads(call.function.arguments))
messages.append({"role": "tool", "tool_call_id": call.id,
"content": json.dumps(result)})
tool_choice = "auto"
Lỗi kinh điển là thêm msg.content thay vì msg, điều này làm mất tool_calls và reasoning_content.
Gọi công cụ ở quy mô lớn với search_tools
Khi agent của bạn có hàng chục hoặc hàng trăm công cụ, đừng gửi mọi định nghĩa trong mỗi request. Thực hành tốt nhất về gọi công cụ của K3 từ Moonshot khuyến nghị luồng sau:
- Khai báo một hàm
search_tools(backend của bạn triển khai nó) cùng một vài công cụ cốt lõi. - Đặt
tool_choice: "required"ở lượt đầu tiên để model truy xuất trước khi trả lời. - Chèn các định nghĩa công cụ khớp thông qua một tin nhắn
systemmang trườngtools. - Để model gọi các công cụ đã nạp ở các lượt sau, với
tool_choicequay lại"auto".
# after search_tools returns ["create_github_pr"]
messages.append({"role": "system",
"tools": [CATALOG["create_github_pr"]]})
Các định nghĩa được chèn sử dụng định dạng tools cấp cao nhất và có hiệu lực từ tin nhắn đó trở đi. Server không lưu giữ chúng, vì vậy hãy giữ tin nhắn đó trong các request sau. Việc thay đổi tool_choice hay thêm một định nghĩa đều không làm hỏng prefix cache.
Đầu vào hình ảnh và video
K3.1 Pro chấp nhận hình ảnh và video cùng với văn bản và trả về văn bản. Hãy đặt content thành một mảng các phần: một phần image_url (ví dụ trong hướng dẫn nhanh gửi một data URL base64, và lưu ý rằng URL hình ảnh công khai không được hỗ trợ) hoặc một phần video_url trỏ đến một tệp đã tải lên với ID ms://.
from pathlib import Path
video = client.files.create(file=Path("demo.mp4"), purpose="video")
content = [{"type": "video_url", "video_url": {"url": f"ms://{video.id}"}},
{"type": "text", "text": "Summarize this video."}]
Truyền content làm tin nhắn user, và xóa tệp bằng client.files.delete(video.id) khi bạn hoàn tất.
Cache ngữ cảnh trong mã nguồn
Việc caching diễn ra tự động đối với các tiền tố lặp lại với TTL mặc định là 5 phút. Các lần trúng cache được tính phí 0,20 đô la cho mỗi triệu token so với 2,00 đô la cho đầu vào không được cache, và một lần ghi với TTL 1 giờ tốn 4,00 đô la so với 2,00 đô la cho 5 phút. Với tiền tố 1M token, TTL 1 giờ sẽ hoàn vốn sau hai lần trúng cache.
Hãy đặt nội dung ổn định lên trước (system prompt, định nghĩa công cụ, tài liệu), nội dung thay đổi ở cuối, và không có timestamp trong tiền tố. Với SDK openai, truyền TTL qua extra_body:
resp = client.chat.completions.create(
model="kimi-k3.1-pro",
messages=[{"role": "system", "content": DOCS},
{"role": "user", "content": question}],
extra_body={"prompt_cache_options": {"mode": "implicit", "ttl": "1h"}},
)
d = resp.usage.prompt_tokens_details
print(resp.usage.prompt_tokens, d.cached_tokens,
getattr(d, "cache_write_tokens", 0))
API Anthropic đặt TTL bằng trường cache_control cấp cao nhất; các marker bên trong tin nhắn sẽ bị bỏ qua:
curl https://api.moonshot.ai/anthropic/v1/messages \
--header "Content-Type: application/json" \
--header "Authorization: Bearer $MOONSHOT_API_KEY" \
--data '{"model": "kimi-k3.1-pro", "max_tokens": 256,
"cache_control": {"type": "ephemeral", "ttl": "1h"},
"messages": [{"role": "user", "content": "Hello"}]}'
Việc sử dụng cache hiển thị ở đâu phụ thuộc vào bề mặt:
| Bề mặt | Đọc cache | Ghi cache |
|---|---|---|
| Chat Completions | usage.prompt_tokens_details.cached_tokens |
usage.prompt_tokens_details.cache_write_tokens |
| Responses | usage.input_tokens_details.cached_tokens |
usage.input_tokens_details.cache_write_tokens |
| Messages | usage.cache_read_input_tokens |
usage.cache_creation_input_tokens |
Khi streaming Chat Completions, hãy đặt stream_options.include_usage=true để nhận usage trong chunk cuối cùng. Mỗi lần trúng cache sẽ gia hạn TTL, vốn được cố định ở lần ghi đầu tiên. Quy tắc đầy đủ: hướng dẫn cache ngữ cảnh.
Lỗi API Kimi K3.1 Pro và cách khắc phục
Hầu hết các lỗi rơi vào sáu dạng. Hãy kiểm tra error.type trên mọi lỗi 429, vì cách khắc phục phụ thuộc vào nó.
| Triệu chứng | Nguyên nhân | Cách khắc phục |
|---|---|---|
| 401 hoặc 404 | Sai key sản phẩm, không khớp vùng, không có số dư, hoặc sai tên model | Dùng key Kimi API, kiểm tra số dư, xác nhận model trong GET /v1/models, xóa các biến môi trường và proxy cũ |
429 engine_overloaded_error |
Năng lực của server | Chờ theo Retry-After, backoff, giảm độ đồng thời. Nạp thêm tiền sẽ không giúp ích. |
429 rate_limit_reached_error |
Tổ chức của bạn đã chạm giới hạn đồng thời, RPM, TPM hoặc TPD | Giảm tốc độ hoặc nâng lên tier cao hơn |
429 exceeded_current_quota_error |
Số dư thấp, tài khoản quá hạn hoặc voucher hết hạn | Kiểm tra API số dư và nạp thêm |
finish_reason: "length" |
Đầu ra chạm max_completion_tokens |
Tăng giới hạn hoặc tiếp tục với chế độ partial |
| Cùng một công cụ bị gọi lặp đi lặp lại | Bố cục tin nhắn bị hỏng | Thêm tin nhắn nguyên trạng, khớp mọi tool_call_id, lắp ráp đầy đủ tool_calls được stream, rồi thêm phát hiện lặp ở phía client |
Hãy chú ý đến việc thử lại. SDK OpenAI mặc định thử lại 2 lần với lỗi kết nối, 408, 409, 429 và 5xx, nên một lệnh gọi có thể biến thành ba request đối với RPM của bạn. Ở tier thấp, hãy giảm max_retries của client và tự backoff theo error.type. Các request bị gián đoạn bởi 429 sẽ không bị tính phí.
Nếu một agent của bên thứ ba thất bại, hãy gọi API trực tiếp với cùng key, endpoint và model. Nếu cách đó hoạt động, thì công cụ chính là vấn đề. Xem trang khắc phục sự cố và mã lỗi.
Giới hạn tốc độ Kimi K3.1 Pro theo tier
Tổng số tiền nạp tích lũy của bạn quyết định tier của bạn trên trang giới hạn:
| Tier | Nạp tích lũy | Độ đồng thời | RPM | TPM |
|---|---|---|---|---|
| Tier0 | 1 đô la | 1 | 3 | 500.000 (1,5M mỗi ngày) |
| Tier1 | 10 đô la | 15 | 100 | 2.000.000 |
| Tier2 | 20 đô la | 40 | 100 | 3.000.000 |
| Tier3 | 100 đô la | 50 | 200 | 3.000.000 |
| Tier4 | 1.000 đô la | 60 | 200 | 4.000.000 |
| Tier5 | 3.000 đô la | 100 | 300 | 5.000.000 |
Tier0 cho phép 3 request mỗi phút, và mỗi lượt của một vòng lặp công cụ là một request. Một lần chạy agent gồm năm lượt đã vượt quá một phút ở tier đó, vì vậy hãy dự trù 10 đô la tích lũy trước khi bạn kiểm thử agent một cách nghiêm túc.
Kiểm thử hợp đồng Kimi API với Apidog CLI
Một bài kiểm thử hợp đồng sẽ phát hiện ngày mà vòng lặp công cụ của bạn ngừng nhận lại tool_calls. Hãy để agent lập trình của bạn xây dựng nó với Apidog CLI. Cài đặt và đăng nhập một lần:
npm install -g apidog-cli@latest
apidog login --with-token <YOUR_TOKEN>
apidog skill install
Sau đó gợi ý cho Claude Code, Codex hoặc bất kỳ agent nào bạn dùng:
In Apidog project <projectId>, create an environment for https://api.moonshot.ai/v1
and an endpoint for POST /chat/completions. Add a test case that sends model
kimi-k3.1-pro, reasoning_effort "low", one get_order_status tool and
tool_choice "required". Assert status 200 and that choices[0].message.tool_calls
is non-empty. Run it and report failures.
Agent sẽ đọc schema, xác thực payload của nó và chạy test case:
apidog environment create kimi-prod --project <projectId> --base-url https://api.moonshot.ai/v1
apidog endpoint create --project <projectId> --file ./endpoint.json
apidog cli-schema get test-case-create
apidog cli-schema validate test-case-create --file case.json
apidog test-case create --project <projectId> --file case.json
apidog run --test-case <caseId> --project <projectId> -e <envId> -r cli,json
Các test case cần một category hợp lệ; apidog test-case category --project <projectId> sẽ liệt kê chúng. Khi lần chạy đã đạt, hãy thay -r cli,json bằng -r junit cùng --out-dir và kiểm tra tương tự sẽ gác cổng CI của bạn, như hướng dẫn CI/CD của Apidog CLI của chúng tôi trình bày. Thiết lập agent nằm trong Apidog CLI trong Claude Code. Gói Miễn phí của Apidog hỗ trợ tối đa 4 người dùng.
Câu hỏi thường gặp
Base URL cho API Kimi K3.1 Pro là gì?
https://api.moonshot.ai/v1 cho Chat Completions và Responses API, và https://api.moonshot.ai/anthropic cho Messages API tương thích với Anthropic.
API Kimi K3.1 Pro có hỗ trợ tham số thinking không?
Không. Suy luận luôn được bật. Hãy kiểm soát nó bằng trường reasoning_effort cấp cao nhất ("low", "high" hoặc "max").
Tại sao tôi nhận lỗi 429 ngay sau khi nạp tiền?
Hãy đọc error.type. engine_overloaded_error là năng lực của server và việc nạp tiền sẽ không khắc phục được. rate_limit_reached_error nghĩa là các giới hạn của tier bạn, và Tier0 chỉ cho phép 3 RPM.
Làm sao để biết caching có hoạt động không?
Một trường đọc cache khác không trong usage nghĩa là có trúng cache: prompt_tokens_details.cached_tokens trên Chat Completions hoặc cache_read_input_tokens trên Messages.
Có tier miễn phí cho API Kimi K3.1 Pro không?
Không. API cần nạp tối thiểu 1 đô la. Chat miễn phí trong ứng dụng Kimi là con đường 0 đô la, được đề cập trong cách sử dụng Kimi K3.1 Pro miễn phí. Để biết thông tin nền về model, xem Kimi K3.1 Pro là gì.
