Hướng dẫn thực hành Kimi K3: tham số mới và ma trận hỗ trợ API

Hướng dẫn Kimi K3 tháng 7/2026: reasoning_effort max, lịch sử thinking, tải công cụ động, structured output, caching tự động, partial prefix và đầu vào hình ảnh.

AIHubMixĐọc 8 phút
Hướng dẫn thực hành Kimi K3: tham số mới và ma trận hỗ trợ API

Bài viết này trình bày các tham số mới và lưu ý sử dụng cho Kimi K3. Trên AIHubMix, K3 có sẵn qua các API Chat Completions, Responses và Messages tương thích 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 "Verified" và phản hồi mẫu trong mỗi phần đến từ các lệnh gọi thực tế được thực hiện vào ngày 17/07/2026 qua các API của AIHubMix (Chat Completions / Responses / Messages).

1. Thông số mô hình tổng quan

Mục Giá trị
Cửa sổ ngữ cảnh 1M token
Đầu ra tối đa max_completion_tokens mặc định là 131,072, tối đa 1,048,576
Loại đầu vào Văn bản, hình ảnh (về đầu vào video, xem tài liệu chính thức của Moonshot)
Chế độ thinking 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 quá 32 byte
Verified: cả hai giới hạn của stop đều được kiểm tra, và vượt quá một trong hai sẽ trả về 400; API Messages áp dụng cùng cơ chế kiểm tra cho stop_sequences.

❗ Khi gặp chuỗi dừng, API Messages không tuân theo ngữ nghĩa của Anthropic: trong quá trình thử nghiệm, stop_reason là "end_turn" (thay vì "stop_sequence"), stop_sequence là null, và phần văn bản hiển thị trước từ dừng có thể rỗng. Các client dựa vào hai trường này để phát hiện cắt cụt cần lưu ý điều này.
# stop with 6 entries / a 33-byte entry -> HTTP 400
"Invalid request: stop array too long. Expected an array with maximum length 5, but got an array with length 6 instead"
"Invalid request: stop sequence must not be longer than 32, but got 33 instead"

2. Chế độ Thinking: reasoning_effort chỉ hỗ trợ max

Thinking của K3 được bật mặc định, và reasoning_effort chỉ hỗ trợ một mức duy nhất: "max".

Các cuộc hội thoại nhiều lượt phải truyền lại nguyên văn lịch sử thinking: theo tài liệu chính thức của Moonshot, K3 được huấn luyện với cơ chế giữ lại thinking, vì vậy trong hội thoại nhiều lượt, tin nhắn assistant trước đó phải được truyền lại đầy đủ và không chỉnh sửa (bao gồm nội dung thinking). Thiếu lịch sử thinking sẽ dẫn đến chất lượng đầu ra không ổn định. Nếu bạn dùng framework quản lý phiên hoặc lớp proxy, hãy xác nhận nội dung thinking được truyền lại nguyên vẹn.
Chat Completions

Nội dung thinking được trả về trong trường reasoning_content của phản hồi; trong hội thoại nhiều lượt, hãy truyền lại nguyên văn tin nhắn assistant trước đó (bao gồm reasoning_content).

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": "A snail is at the bottom of a 10-meter well. Each day it climbs 3 meters, but each night it slides back 2 meters. How many days does it take to reach the top?"}
    ],
)

print(completion.choices[0].message.reasoning_content)
print(completion.choices[0].message.content)
# Multi-turn: pass the previous assistant message back verbatim
messages = [
    {"role": "user", "content": "What is the capital of France?"},
    {"role": "assistant", "content": "Paris.", "reasoning_content": "<reasoning_content from the previous response>"},
    {"role": "user", "content": "And its population?"},
]
Verified: phản hồi trả về reasoning_content; sau khi truyền lại nguyên văn tin nhắn assistant trước đó (bao gồm reasoning_content), các lượt tiếp theo trả lời bình thường.
Responses

Nội dung thinking được trả về dưới dạng mục đầu ra reasoning; trong hội thoại nhiều lượt, hãy nối các mục đầu ra của lượt trước (reasoning + message) trở lại 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="Answer in one word: capital of France",
)

# Observed response.output item types: ["reasoning", "message"]; text: "Paris"
# Multi-turn: input = [first user message] + response.output + [next user message]
# Observed second-turn answer with output items passed back: "Berlin"

Messages

Nội dung thinking được trả về dưới dạng các khối nội dung thinking gốc; trong hội thoại nhiều lượt, hãy truyền lại nguyên văn các khối nội dung assistant trước đó (bao gồm các khối thinking).

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": "Answer in one word: capital of France"}
    ],
)

# Observed response.content block types: ["thinking", "text"]; text: "Paris"
# Multi-turn: pass response.content back verbatim as the assistant message

3. Tham số lấy mẫu được cố định

Các tham số lấy mẫu của K3 do 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à không đưa các tham số này vào 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ố chính thức và không thể xác minh qua tín hiệu phản hồi; hãy làm 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ợ buộc gọi và vô hiệu hóa gọi công cụ. K3 cũng hỗ trợ tải công cụ động: chèn công cụ mới giữa hội thoại thông qua trường tools của tin nhắn system (một cấu trúc tin nhắn riêng của Chat API).
Chat Completions

tool_choice hỗ trợ auto / none / required; required buộc mô hình gọi một công cụ. Tải công cụ động: tin nhắn system dùng để chèn công cụ không có content, các công cụ được chèn sẽ có hiệu lực từ các lượt tiếp theo, và tin nhắn này phải được đưa vào lại trong mọi yêu cầu.

messages = [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "Hello."},
    {"role": "assistant", "content": "Hi, how can I help you?"},
    # Inject a new tool mid-conversation: tools field only, no content
    {
        "role": "system",
        "tools": [
            {
                "type": "function",
                "function": {
                    "name": "get_time",
                    "description": "Get the current time",
                    "parameters": {"type": "object", "properties": {}},
                },
            }
        ],
    },
    {"role": "user", "content": "What time is it now?"},
]
# tool_choice="required" with prompt "Hello" -> the model is forced to call the tool
"finish_reason": "tool_calls",
"tool_calls": [{"function": {"name": "get_weather", "arguments": "{\"city\":\"New York\"}"}}]
Verified: tool_choice: "required" buộc gọi công cụ ngay cả với các prompt không liên quan; "none" ngăn gọi công cụ; các công cụ được chèn giữa hội thoại qua tin nhắn system không có content có thể được gọi bình thường.
Responses

Định nghĩa công cụ dùng cấu trúc phẳng (name ở cấp cao nhất); buộc gọi cũng dùng tool_choice: "required", và các lệnh gọi được trả về dưới dạng mục đầu ra function_call. Hỗ trợ tải công cụ động đang được phát triển; hiện tại, hãy khai báo tất cả công cụ trong tham số tools ở cấp cao nhất.

response = client.responses.create(
    model="kimi-k3",
    input="Hello",
    tools=[{
        "type": "function",
        "name": "get_weather",
        "description": "Get weather for a city",
        "parameters": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
    }],
    tool_choice="required",
)

# Observed output contains: {"type": "function_call", "name": "get_weather", "arguments": "{\"city\":\"London\"}"}

Messages

Công cụ dùng định dạng của Anthropic (input_schema); buộc gọi bằng tool_choice: {"type": "any"} và vô hiệu hóa gọi bằng {"type": "none"}. ❗ Endpoint Messages (tương thích Anthropic) chính thức của Kimi K3 không hỗ trợ tải công cụ động: trong quá trình thử nghiệm, tin nhắn chèn công cụ trả về 200, nhưng công cụ được chèn không có tác dụng (mô hình không thể gọi nó). Hãy khai báo tất cả công cụ trong tham số tools ở cấp cao nhất.

response = client.messages.create(
    model="kimi-k3",
    max_tokens=4096,
    tools=[{
        "name": "get_weather",
        "description": "Get weather for a city",
        "input_schema": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
    }],
    tool_choice={"type": "any"},
    messages=[{"role": "user", "content": "Hello"}],
)

# Observed: stop_reason "tool_use"; content contains a tool_use block calling 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 đã cho.
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 is the capital of France. Extract the city name."}
    ],
    response_format={
        "type": "json_schema",
        "json_schema": {
            "name": "extract",
            "strict": True,
            "schema": {
                "type": "object",
                "properties": {"city": {"type": "string"}},
                "required": ["city"],
            },
        },
    },
)

# Observed response content: {"city":"Paris"}
Verified: đầu ra là JSON hợp lệ và tuân thủ schema.
Responses

Đầu ra có cấu trúc được khai báo qua text.format.

response = client.responses.create(
    model="kimi-k3",
    input="Paris is the capital of France. Extract the city name.",
    text={
        "format": {
            "type": "json_schema",
            "name": "extract",
            "strict": True,
            "schema": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
        }
    },
)

# Observed output text: {"city":"Paris"}

Messages

❗ Endpoint Messages (tương thích Anthropic) chính thức của Kimi K3 không hỗ trợ đầu ra có cấu trúc: các trường structured output 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ó lỗi hay thông báo dự phòng, và việc phân tích JSON ở phía sau sẽ thất bại. Khi cần đầu ra có cấu trúc, hãy dùng API Chat Completions hoặc Responses.

6. Caching ngữ cảnh là tự động

Context caching 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 cache, lượng trúng cache được báo cáo trong usage (tên trường khác nhau tùy API). Giá cache được hiển thị ở trang mô hình.
Chat Completions

# usage of the second call with an identical long prefix
"prompt_tokens_details": {"cached_tokens": 1536}
Verified: yêu cầu thứ hai với cùng tiền tố dài báo cáo lượt trúng cache trong usage.prompt_tokens_details.cached_tokens.
Responses
# usage of the second Responses call with identical long instructions
"input_tokens_details": {"cached_tokens": 1536}

Messages

# usage of the second Messages call with an identical long system prompt
"cache_read_input_tokens": 1536

7. Hoàn thành tiền tố với partial

Hoàn thành tiền tố khiến mô hình tiếp tục sinh nội dung từ một tiền tố đã cho, phù hợp với việc hoàn thành code và đầu ra có kiểm soát định dạng.
Chat Completions

Truyền "partial": true trong tin nhắn assistant cuối cùng.

messages = [
    {"role": "user", "content": "Write a haiku about the sea."},
    {"role": "assistant", "content": "Waves fold into foam,", "partial": True},
]

# Prefix: "Waves fold into foam,"  ->  continuation returned by the model
# salt hangs in the air—
# moon pulls the tide home.
Verified: quá trình sinh tiếp tục từ tiền tố đã cho mà không lặp lại tiền tố.
Responses

Truyền tiền tố như một tin nhắn assistant ở cuối mảng input; không cần tham số partial.

response = client.responses.create(
    model="kimi-k3",
    input=[
        {"role": "user", "content": "Write a haiku about the sea."},
        {"role": "assistant", "content": "Waves fold into foam,"},
    ],
)

# Observed continuation: "salt hangs in the air— / moon pulls the tide home."

Messages

Cùng khả năng này đạt được bằng cơ chế assistant prefill gốc của giao thức, không cần tham số partial: truyền tiền tố như tin nhắn assistant cuối cùng.

response = client.messages.create(
    model="kimi-k3",
    max_tokens=4096,
    messages=[
        {"role": "user", "content": "Write a haiku about the sea."},
        {"role": "assistant", "content": "Waves fold into foam,"},
    ],
)

# Observed continuation: "salt wind carries the gull's cry— / tide pulls ..."

8. Đầu vào hình ảnh

Hình ảnh được truyền dưới dạng base64; định dạng khối nội dung khác nhau tùy API.
Chat Completions

messages = [
    {
        "role": "user",
        "content": [
            {"type": "text", "text": "What is the dominant color of this image? One word."},
            {"type": "image_url", "image_url": {"url": "data:image/png;base64,<BASE64>"}},
        ],
    }
]

# Observed response content: "Red"  (input: a 64x64 solid red PNG)
Verified: đầu vào hình ảnh base64 hoạt động, và mô hình mô tả đúng hình ảnh thử nghiệm.
Responses
input = [
    {
        "role": "user",
        "content": [
            {"type": "input_text", "text": "What is the dominant color of this image? One word."},
            {"type": "input_image", "image_url": "data:image/png;base64,<BASE64>"},
        ],
    }
]

# Observed output text: "Red"

Messages

messages = [
    {
        "role": "user",
        "content": [
            {"type": "text", "text": "What is the dominant color of this image? One word."},
            {"type": "image", "source": {"type": "base64", "media_type": "image/png", "data": "<BASE64>"}},
        ],
    }
]

# Observed response text: "Red"

9. Tham chiếu đã xác minh: độ trễ và mức sử dụng của một tác vụ dài trong một lệnh gọi

Thinking của K3 được cố định ở mức max, nên các yêu cầu đơn lẻ cho tác vụ phức tạp mất thời gian đáng kể hơn so với các mô hình thông thường. Dữ liệu đo được từ tác vụ tạo một game HTML trong một tệp duy nhất (một prompt kèm hình ảnh tham chiếu, tạo một lần duy nhất không lặp lại): yêu cầu đơn lẻ mất 2,541 giây (khoảng 42 phút), với 74,994 completion token, trong đó 54,486 (73%) là thinking token; đầu ra cuối cùng là 1,275 dòng code chạy được ngay, với finish_reason là stop.

Khuyến nghị phía client:

  • Đặt timeout của client ở mức vài phút hoặc lâu hơn, và ưu tiên streaming cho các tác vụ dài;
  • Dành đủ dư địa trong max_completion_tokens: trong trường hợp này, riêng phần thinking đã tiêu tốn 54,486 token.

10. Ma trận hỗ trợ khả năng × API

Mọi ô trong bảng dưới đây được xác minh vào ngày 17/07/2026 qua các lệnh gọi thực tế tới API production của AIHubMix; mỗi ô hiển thị cú pháp tham số / trường tương ứng cho API đó.

Khả năng Chat Completions Responses Messages
Nội dung thinking trong phản hồi ✅ trường reasoning_content ✅ mục đầu ra reasoning ✅ khối nội dung thinking
Truyền lại lịch sử thinking ✅ tin nhắn assistant truyền lại nguyên văn ✅ mục đầu ra truyền lại nguyên văn ✅ khối nội dung truyền lại nguyên văn
Buộc / vô hiệu hóa 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 system với tools (không có content) ➖ Đang phát triển hỗ trợ ❗ Không hỗ trợ trên endpoint Messages (tương thích Anthropic) chính thức
Đầu ra có cấu trúc ✅ response_format (json_schema + strict) ✅ text.format (json_schema) ❗ Không hỗ trợ trên endpoint 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); hãy dùng Chat / Responses thay thế
Đo lường cache-hit tự động ✅ 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 ✅ assistant prefill ✅ assistant prefill (gốc của giao thức)
Đầu vào hình ảnh ✅ image_url (base64) ✅ input_image (base64) ✅ khối nội dung image (base64)
Chuỗi dừng ✅ stop (giới hạn đã được kiểm tra) ➖ Đang phát triển hỗ trợ ❗ Giới hạn stop_sequences được kiểm tra giống hệt, nhưng khi gặp chuỗi dừng, không trả về stop_reason: "stop_sequence" cũng như giá trị stop_sequence

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 Claude (/v1/messages).

Có thể tắt hoặc giảm thinking không?
Không. Thinking của K3 được bật mặc định, và reasoning_effort chỉ hỗ trợ duy nhất mức "max".

Vì sao reasoning_content phải được truyền lại trong các cuộc hội thoại nhiều lượt?
K3 được huấn luyện với cơ chế giữ lại quá trình suy luận (preserved thinking); Moonshot yêu cầu tin nhắn assistant trước đó phải được truyền lại đầy đủ và không bị sửa đổi. Nếu thiếu lịch sử suy luận, chất lượng đầu ra sẽ không ổn định.

Giới hạn của tham số stop là gì?
Tối đa 5 chuỗi stop, mỗi chuỗi không dài quá 32 byte; vượt quá một trong hai giới hạn này sẽ trả về lỗi 400.

Messages API có hỗ trợ đầu ra có cấu trúc (structured output) không?
❗ Không. Endpoint Messages chính thức của Kimi K3 (tương thích Anthropic) âm thầm bỏ qua các trường structured output (trả về 200 với văn bản tự do và không có lỗi). Để có structured output, hãy dùng response_format trên Chat Completions hoặc text.format trên Responses.

Vì sao các yêu cầu K3 đơn lẻ mất nhiều thời gian như vậy?
Mức suy luận (thinking) của K3 được cố định ở mức tối đa, và các token suy luận chiếm tỷ lệ lớn trong các tác vụ phức tạp (73% số token completion trong trường hợp đo được). Hãy đặt thời gian chờ (timeout) của client thành vài phút hoặc lâu hơn và sử dụng streaming.


Để xem giá và trạng thái thời gian thực, hãy truy cập trang mô hình Kimi K3; để xem 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

Một cổng duy nhất tới nhiều nhà cung cấp AI. Sẵn sàng cho môi trường production.

Truy cập AIHubMix