Bài viết này đề cập đến các tham số mới và ghi chú sử dụng cho Kimi K3. Trên AIHubMix, K3 có sẵn thông qua các API Chat Completions, Responses và Messages tương thích với Claude. Xem thêm: tài liệu chính thức của nền tảng Moonshot.
Các kết luận và phản hồi mẫu "Đã xác minh" trong mỗi phần đến từ các cuộc gọi thực tế được thực hiện vào ngày 2026-07-17 thông qua các API AIHubMix (Chat Completions / Responses / Messages).
1. Thông Số Mô Hình Tóm Tắt
| Mục | Giá trị |
|---|---|
| Cửa sổ ngữ cảnh | 1 triệu token |
| Đầu ra tối đa | max_completion_tokens mặc định là 131,072, tối đa là 1,048,576 |
| Các phương thức đầu vào | Văn bản, hình ảnh (để đầu vào video xem tài liệu chính thức của Moonshot) |
| Chế độ suy nghĩ | Bật mặc định; reasoning_effort chỉ hỗ trợ "max" |
| Chuỗi dừng | stop cho phép tối đa 5 mục, mỗi mục không dài hơn 32 byte |
Đã xác minh: cả hai giới hạnstopđều được xác thực, và việc vượt quá bất kỳ giới hạn nào sẽ trả về 400; API Messages áp dụng cùng một xác thực chostop_sequences.
❗ Khi một chuỗi dừng được kích hoạt, API Messages không tuân theo ngữ nghĩa của Anthropic: trong thử nghiệm,stop_reasonlà"end_turn"(thay vì"stop_sequence"),stop_sequencelànull, và văn bản hiển thị trước từ dừng có thể trống. Các khách hàng dựa vào hai trường này để phát hiện cắt ngắn nên lưu ý.
# dừng với 6 mục / một mục 33 byte -> HTTP 400
"Yêu cầu không hợp lệ: mảng dừng quá dài. Mong đợi một mảng có độ dài tối đa 5, nhưng nhận được một mảng có độ dài 6"
"Yêu cầu không hợp lệ: chuỗi dừng không được dài hơn 32, nhưng nhận được 33"
2. Chế Độ Suy Nghĩ: reasoning_effort Chỉ Hỗ Trợ max
Suy nghĩ của K3 được bật mặc định, và reasoning_effort chỉ hỗ trợ một cấp độ duy nhất: "max".
Các cuộc trò chuyện nhiều lượt phải truyền lại lịch sử suy nghĩ nguyên vẹn: theo tài liệu chính thức của Moonshot, K3 được đào tạo với suy nghĩ được bảo tồn, vì vậy trong các cuộc trò chuyện nhiều lượt, tin nhắn trợ lý trước đó phải được truyền lại đầy đủ và không thay đổi (bao gồm cả nội dung suy nghĩ). Thiếu lịch sử suy nghĩ dẫn đến chất lượng đầu ra không ổn định. Nếu bạn sử dụng một khung quản lý phiên hoặc một lớp proxy, hãy xác nhận rằng nội dung suy nghĩ được truyền lại không bị cắt ngắn.
Chat Completions
Nội dung suy nghĩ được trả về trong trường reasoning_content của phản hồi; trong các cuộc trò chuyện nhiều lượt, hãy truyền lại tin nhắn trợ lý trước đó (bao gồm reasoning_content) nguyên vẹn.
from openai import OpenAI
client = OpenAI(
base_url="https://aihubmix.com/v1",
api_key="<AIHUBMIX_API_KEY>",
)
completion = client.chat.completions.create(
model="kimi-k3",
reasoning_effort="max",
messages=[
{"role": "user", "content": "Một con ốc sên ở đáy một cái giếng 10 mét. Mỗi ngày nó leo lên 3 mét, nhưng mỗi đêm nó trượt xuống 2 mét. Nó mất bao nhiêu ngày để lên đến đỉnh?"}
],
)
print(completion.choices[0].message.reasoning_content)
print(completion.choices[0].message.content)
# Nhiều lượt: truyền lại tin nhắn trợ lý trước đó nguyên vẹn
messages = [
{"role": "user", "content": "Thủ đô của Pháp là gì?"},
{"role": "assistant", "content": "Paris.", "reasoning_content": "<nội dung suy nghĩ từ phản hồi trước>"},
{"role": "user", "content": "Và dân số của nó?"}
]
Đã xác minh: phản hồi trả vềreasoning_content; sau khi truyền lại tin nhắn trợ lý trước đó (bao gồmreasoning_content) nguyên vẹn, các lượt tiếp theo trả lời bình thường.
Phản hồi
Nội dung suy nghĩ được trả về dưới dạng một mục đầu ra reasoning; trong các cuộc trò chuyện nhiều lượt, hãy thêm các mục đầu ra của lượt trước (reasoning + message) vào input nguyên vẹn.
from openai import OpenAI
client = OpenAI(
base_url="https://aihubmix.com/v1",
api_key="<AIHUBMIX_API_KEY>",
)
response = client.responses.create(
model="kimi-k3",
input="Trả lời bằng một từ: thủ đô của Pháp",
)
# Các loại mục phản hồi.output quan sát được: ["reasoning", "message"]; văn bản: "Paris"
# Nhiều lượt: input = [tin nhắn người dùng đầu tiên] + phản hồi.output + [tin nhắn người dùng tiếp theo]
# Phản hồi của lượt thứ hai với các mục đầu ra được truyền lại: "Berlin"
Messages
Nội dung suy nghĩ được trả về dưới dạng các khối nội dung thinking gốc; trong các cuộc trò chuyện nhiều lượt, hãy truyền lại các khối nội dung trợ lý trước đó (bao gồm cả các khối suy nghĩ) nguyên vẹn.
from anthropic import Anthropic
client = Anthropic(
api_key="<AIHUBMIX_API_KEY>",
base_url="https://aihubmix.com"
)
response = client.messages.create(
model="kimi-k3",
max_tokens=4096,
messages=[
{"role": "user", "content": "Trả lời bằng một từ: thủ đô của Pháp"}
],
)
# Các loại khối phản hồi.content quan sát được: ["thinking", "text"]; văn bản: "Paris"
# Nhiều lượt: truyền lại phản hồi.content nguyên vẹn như tin nhắn trợ lý
3. Các Tham Số Lấy Mẫu Là Cố Định
Các tham số lấy mẫu của K3 được nhà cung cấp mô hình cố định: temperature 1.0, top_p 0.95, n 1, và presence_penalty / frequency_penalty 0. Khuyến nghị chính thức là bỏ qua các tham số này trong các yêu cầu.
Lưu ý: các giá trị lấy mẫu cố định là một phần của thông số kỹ thuật chính thức và không thể được xác thực từ các tín hiệu phản hồi; hãy tuân theo khuyến nghị chính thức và bỏ qua các tham số này.
4. Gọi Công Cụ và Tải Công Cụ Động
tools hỗ trợ tối đa 128 công cụ; tool_choice hỗ trợ việc buộc và vô hiệu hóa các cuộc gọi công cụ. K3 cũng hỗ trợ tải công cụ động: tiêm các công cụ mới giữa cuộc trò chuyện thông qua trường tools của một tin nhắn hệ thống (một hình dạng tin nhắn cụ thể cho API Chat).
Chat Completions
tool_choice hỗ trợ auto / none / required; required buộc mô hình phải gọi một công cụ. Tải công cụ động: tin nhắn hệ thống tiêm công cụ không mang theo content, các công cụ được tiêm có hiệu lực cho các lượt tiếp theo, và tin nhắn phải được bao gồm lại trong mỗi yêu cầu.
messages = [
{"role": "system", "content": "Bạn là một trợ lý hữu ích."},
{"role": "user", "content": "Xin chào."},
{"role": "assistant", "content": "Chào, tôi có thể giúp gì cho bạn?"},
# Tiêm một công cụ mới giữa cuộc trò chuyện: chỉ trường tools, không có nội dung
{
"role": "system",
"tools": [
{
"type": "function",
"function": {
"name": "get_time",
"description": "Lấy thời gian hiện tại",
"parameters": {"type": "object", "properties": {}},
},
}
],
},
{"role": "user", "content": "Bây giờ là mấy giờ?"}
]
# tool_choice="required" với lời nhắc "Xin chào" -> mô hình bị buộc phải gọi công cụ
"finish_reason": "tool_calls",
"tool_calls": [{"function": {"name": "get_weather", "arguments": "{\"city\":\"New York\"}"}}]
Đã xác minh:tool_choice: "required"buộc một cuộc gọi công cụ ngay cả với các lời nhắc không liên quan;"none"ngăn chặn các cuộc gọi công cụ; các công cụ được tiêm giữa cuộc trò chuyện thông qua một tin nhắn hệ thống mà không cócontentcó thể được gọi bình thường.
Phản hồi
Các định nghĩa công cụ sử dụng cấu trúc phẳng (name ở cấp độ trên cùng); việc buộc một cuộc gọi cũng sử dụng tool_choice: "required", và các cuộc gọi được trả về dưới dạng các mục đầu ra function_call. Hỗ trợ tải công cụ động đang được tiến hành; hiện tại, hãy khai báo tất cả các công cụ trong tham số tools ở cấp độ trên cùng.
response = client.responses.create(
model="kimi-k3",
input="Xin chào",
tools=[{
"type": "function",
"name": "get_weather",
"description": "Lấy thời tiết cho một thành phố",
"parameters": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
}],
tool_choice="required",
)
# Đầu ra quan sát được chứa: {"type": "function_call", "name": "get_weather", "arguments": "{\"city\":\"London\"}"}
Messages
Các công cụ sử dụng định dạng Anthropic (input_schema); buộc một cuộc gọi với tool_choice: {"type": "any"} và vô hiệu hóa các cuộc gọi với {"type": "none"}. ❗ Điểm cuối Messages chính thức của Kimi K3 (tương thích với Anthropic) không hỗ trợ tải công cụ động: trong thử nghiệm, tin nhắn tiêm trả về 200, nhưng công cụ được tiêm không có tác dụng (mô hình không thể gọi nó). Khai báo tất cả các công cụ trong tham số tools ở cấp độ trên cùng.
response = client.messages.create(
model="kimi-k3",
max_tokens=4096,
tools=[{
"name": "get_weather",
"description": "Lấy thời tiết cho một thành phố",
"input_schema": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
}],
tool_choice={"type": "any"},
messages=[{"role": "user", "content": "Xin chào"}],
)
# Quan sát: stop_reason "tool_use"; nội dung chứa một khối tool_use gọi get_weather
5. Đầu Ra Có Cấu Trúc
Đầu ra có cấu trúc khiến mô hình trả về nội dung tuân thủ nghiêm ngặt một JSON Schema nhất định.
Chat Completions
response_format hỗ trợ json_schema với chế độ strict.
completion = client.chat.completions.create(
model="kimi-k3",
messages=[
{"role": "user", "content": "Paris là thủ đô của Pháp. Trích xuất tên thành phố."}
],
response_format={
"type": "json_schema",
"json_schema": {
"name": "extract",
"strict": True,
"schema": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"],
},
},
},
)
# Nội dung phản hồi quan sát được: {"city":"Paris"}
Đã xác minh: đầu ra là JSON hợp lệ tuân theo schema.
Phản hồi
Đầu ra có cấu trúc được khai báo thông qua text.format.
response = client.responses.create(
model="kimi-k3",
input="Paris là thủ đô của Pháp. Trích xuất tên thành phố.",
text={
"format": {
"type": "json_schema",
"name": "extract",
"strict": True,
"schema": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
}
},
)
# Văn bản đầu ra quan sát được: {"city":"Paris"}
Messages
❗ Điểm cuối Messages chính thức của Kimi K3 (tương thích với Anthropic) không hỗ trợ đầu ra có cấu trúc: các trường đầu ra có cấu trúc bị bỏ qua một cách im lặng: yêu cầu trả về HTTP 200 với văn bản tự do, không có thông báo lỗi hoặc dự phòng, và việc phân tích JSON phía hạ nguồn sẽ thất bại. Khi bạn cần đầu ra có cấu trúc, hãy sử dụng API Chat Completions hoặc Responses.
6. Lưu Bộ Nhớ Ngữ Cảnh Là Tự Động
Việc lưu bộ nhớ ngữ cảnh của K3 được bật tự động, không cần tham số. Khi một tiền tố dài lặp lại trúng bộ nhớ cache, số lượng trúng được báo cáo trong việc sử dụng (tên trường thay đổi theo API). Giá cả bộ nhớ cache được ghi trên trang mô hình.
Chat Completions
# việc sử dụng của cuộc gọi thứ hai với một tiền tố dài giống hệt
"prompt_tokens_details": {"cached_tokens": 1536}
Đã xác minh: yêu cầu thứ hai với một tiền tố dài giống hệt báo cáo số lần trúng trongusage.prompt_tokens_details.cached_tokens.
Phản hồi
# việc sử dụng của cuộc gọi Responses thứ hai với các hướng dẫn dài giống hệt
"input_tokens_details": {"cached_tokens": 1536}
Messages
# việc sử dụng của cuộc gọi Messages thứ hai với một lời nhắc hệ thống dài giống hệt
"cache_read_input_tokens": 1536
7. Hoàn Thành Tiền Tố partial
Hoàn thành tiền tố khiến mô hình tiếp tục tạo ra từ một tiền tố nhất định, rất phù hợp cho việc hoàn thành mã và đầu ra có kiểm soát định dạng.
Chat Completions
Truyền "partial": true trong tin nhắn trợ lý cuối cùng.
messages = [
{"role": "user", "content": "Viết một bài haiku về biển."},
{"role": "assistant", "content": "Sóng gập vào bọt,", "partial": True},
]
# Tiền tố: "Sóng gập vào bọt," -> phần tiếp theo được trả về bởi mô hình
# muối treo trong không khí—
# mặt trăng kéo thủy triều về nhà.
Đã xác minh: việc tạo ra tiếp tục từ tiền tố đã cho mà không lặp lại nó.
Phản hồi
Truyền tiền tố như một tin nhắn trợ lý ở cuối mảng input; không cần tham số partial.
response = client.responses.create(
model="kimi-k3",
input=[
{"role": "user", "content": "Viết một bài haiku về biển."},
{"role": "assistant", "content": "Sóng gập vào bọt,"},
],
)
# Phần tiếp theo quan sát được: "muối treo trong không khí— / mặt trăng kéo thủy triều về nhà."
Messages
Cùng một khả năng được đạt được với việc điền trước trợ lý gốc của giao thức, không cần tham số partial: truyền tiền tố như tin nhắn trợ lý cuối cùng.
response = client.messages.create(
model="kimi-k3",
max_tokens=4096,
messages=[
{"role": "user", "content": "Viết một bài haiku về biển."},
{"role": "assistant", "content": "Sóng gập vào bọt,"},
],
)
# Phần tiếp theo quan sát được: "gió muối mang theo tiếng kêu của chim mòng biển— / thủy triều kéo ..."
8. Đầu Vào Hình Ảnh
Các hình ảnh được truyền dưới dạng base64; định dạng khối nội dung thay đổi theo API.
Chat Completions
messages = [
{
"role": "user",
"content": [
{"type": "text", "text": "Màu sắc chiếm ưu thế của hình ảnh này là gì? Một từ."},
{"type": "image_url", "image_url": {"url": "data:image/png;base64,<BASE64>"}},
],
}
]
# Nội dung phản hồi quan sát được: "Đỏ" (đầu vào: một PNG đỏ đặc 64x64)
Đã xác minh: đầu vào hình ảnh base64 hoạt động, và mô hình mô tả chính xác hình ảnh thử nghiệm.
Phản hồi
input = [
{
"role": "user",
"content": [
{"type": "input_text", "text": "Màu sắc chiếm ưu thế của hình ảnh này là gì? Một từ."},
{"type": "input_image", "image_url": "data:image/png;base64,<BASE64>"},
],
}
]
# Văn bản đầu ra quan sát được: "Đỏ"
Messages
messages = [
{
"role": "user",
"content": [
{"type": "text", "text": "Màu sắc chiếm ưu thế của hình ảnh này là gì? Một từ."},
{"type": "image", "source": {"type": "base64", "media_type": "image/png", "data": "<BASE64>"}},
],
}
]
# Văn bản phản hồi quan sát được: "Đỏ"
9. Tham Chiếu Đã Xác Minh: Độ Trễ và Sử Dụng của Một Nhiệm Vụ Gọi Đơn Dài
Suy nghĩ của K3 được cố định ở mức tối đa, vì vậy các yêu cầu đơn lẻ cho các nhiệm vụ phức tạp mất nhiều thời gian hơn đáng kể so với các mô hình thông thường. Dữ liệu đo được từ một nhiệm vụ tạo trò chơi HTML một tệp (một lời nhắc với một hình ảnh tham chiếu, được tạo ra trong một lần mà không có vòng lặp): yêu cầu đơn lẻ mất 2,541 giây (khoảng 42 phút), với 74,994 token hoàn thành, trong đó 54,486 (73%) là token suy nghĩ; đầu ra cuối cùng là 1,275 dòng mã có thể chạy trực tiếp, với finish_reason stop.
Các khuyến nghị phía khách hàng:
- Đặt thời gian chờ của khách hàng thành phút hoặc lâu hơn, và ưu tiên phát trực tiếp cho các nhiệm vụ dài;
- Để lại khoảng trống rộng rãi trong
max_completion_tokens: trong trường hợp này, chỉ riêng suy nghĩ đã tiêu tốn 54,486 token.
10. Ma Trận Hỗ Trợ API × Khả Năng
Mỗi ô trong bảng dưới đây đã được xác minh vào ngày 2026-07-17 thông qua các cuộc gọi thực tế đến các API sản xuất của AIHubMix; mỗi ô hiển thị cú pháp tham số / trường cho API tương ứng.
| Khả năng | Chat Completions | Responses | Messages |
|---|---|---|---|
| Nội dung suy nghĩ trong phản hồi | ✅ reasoning_content field |
✅ reasoning output item |
✅ thinking content block |
| Truyền lại lịch sử suy nghĩ | ✅ tin nhắn trợ lý được truyền lại nguyên vẹn | ✅ các mục đầu ra được truyền lại nguyên vẹn | ✅ các khối nội dung được truyền lại nguyên vẹn |
| Buộc / vô hiệu hóa các cuộc gọi công cụ | ✅ tool_choice: "required" / "none" |
✅ tool_choice: "required" |
✅ {"type": "any"} / {"type": "none"} |
| Tải công cụ động | ✅ tin nhắn hệ thống với tools (không có content) |
➖ Hỗ trợ đang được tiến hành | ❗ Không được hỗ trợ trên điểm cuối Messages chính thức (tương thích với Anthropic) |
| Đầu ra có cấu trúc | ✅ response_format (json_schema + strict) |
✅ text.format (json_schema) |
❗ Không được hỗ trợ trên điểm cuối chính thức; các trường bị bỏ qua một cách im lặng (200 + văn bản tự do); sử dụng Chat / Responses thay vào đó |
| Đo lường tự động số lần trúng bộ nhớ cache | ✅ usage.prompt_tokens_details.cached_tokens |
✅ usage.input_tokens_details.cached_tokens |
✅ usage.cache_read_input_tokens |
| Hoàn thành tiền tố | ✅ "partial": true |
✅ điền trước trợ lý | ✅ điền trước trợ lý (gốc của giao thức) |
| Đầu vào hình ảnh | ✅ image_url (base64) |
✅ input_image (base64) |
✅ image content block (base64) |
| Chuỗi dừng | ✅ stop (các giới hạn được xác thực) |
➖ Hỗ trợ đang được tiến hành | ❗ stop_sequences giới hạn được xác thực giống nhau, nhưng khi trúng, cả stop_reason: "stop_sequence" và giá trị stop_sequence đều không được trả về |
Câu Hỏi Thường Gặp
K3 hỗ trợ những API nào trên AIHubMix?
Chat Completions (/v1/chat/completions), Responses (/v1/responses), và API Messages tương thích với Claude (/v1/messages).
Có thể tắt hoặc giảm suy nghĩ không?
Không. Suy nghĩ của K3 được bật mặc định, và reasoning_effort chỉ hỗ trợ cấp độ "max" duy nhất.
Tại sao reasoning_content phải được truyền lại trong các cuộc trò chuyện nhiều lượt?
K3 được đào tạo với suy nghĩ được bảo tồn; Moonshot yêu cầu tin nhắn trợ lý trước đó phải được truyền lại đầy đủ và không thay đổi. Thiếu lịch sử suy nghĩ dẫn đến chất lượng đầu ra không ổn định.
Các giới hạn trên tham số stop là gì?
Tối đa 5 chuỗi dừng, mỗi chuỗi không dài hơn 32 byte; vượt quá bất kỳ giới hạn nào sẽ trả về lỗi 400.
API Messages có hỗ trợ đầu ra có cấu trúc không?
❗ Không. Điểm cuối Messages chính thức của Kimi K3 (tương thích với Anthropic) im lặng bỏ qua các trường đầu ra có cấu trúc (trả về 200 với văn bản tự do và không có lỗi). Để có đầu ra có cấu trúc, hãy sử dụng response_format trên Chat Completions hoặc text.format trên Responses.
Tại sao các yêu cầu đơn lẻ của K3 lại mất nhiều thời gian như vậy?
Suy nghĩ của K3 được cố định ở mức tối đa, và các token suy nghĩ chiếm một phần lớn trong các nhiệm vụ phức tạp (73% token hoàn thành trong trường hợp đo được). Đặt thời gian chờ của khách hàng thành phút hoặc lâu hơn và sử dụng phát trực tiếp.
Để biết giá cả và trạng thái thời gian thực, xem trang mô hình Kimi K3; để biết thêm các mô hình khác, hãy truy cập thư viện mô hình.
Cập nhật lần cuối: 2026-07-17



