Kimi K3 — практическо ръководство: нови параметри и матрица за поддръжка на API

Ръководство за Kimi K3, юли 2026: reasoning_effort max, история на мисленето, динамично зареждане на инструменти, структуриран изход, автоматично кеширане, частичен префикс и входни изображения.

AIHubMix8 мин четене
Kimi K3 — практическо ръководство: нови параметри и матрица за поддръжка на API

Тази статия разглежда новите параметри и бележки за употреба на Kimi K3. В AIHubMix K3 е достъпен чрез Chat Completions, Responses и съвместимото с Claude Messages API. Вижте също: официалната документация на платформата Moonshot.

Заключенията „Verified“ и примерните отговори в всеки раздел идват от реални заявки, направени на 2026-07-17 през API интерфейсите на AIHubMix (Chat Completions / Responses / Messages).

1. Основни характеристики на модела

Параметър Стойност
Контекстен прозорец 1M токена
Максимален изход max_completion_tokens по подразбиране е 131,072, до 1,048,576
Входни модалности Текст, изображения (за видео вход вижте официалната документация на Moonshot)
Режим на мислене Включен по подразбиране; reasoning_effort поддържа само "max"
Стоп последователности stop допуска най-много 5 елемента, всеки с дължина до 32 байта
Verified: и двете ограничения на stop се валидират, а при превишаване се връща 400; Messages API прилага същата валидация към stop_sequences.

❗ При достигане на стоп последователност Messages API не следва семантиката на Anthropic: при тестване stop_reason е "end_turn" (а не "stop_sequence"), stop_sequence е null, а видимият текст преди стоп думата може да е празен. Клиенти, които разчитат на тези две полета за откриване на прекъсване, трябва да имат това предвид.
# 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. Режим на мислене: reasoning_effort поддържа само max

Мисленето на K3 е включено по подразбиране, а reasoning_effort поддържа само едно ниво: "max".

При многоходови разговори историята на мисленето трябва да се връща непроменена: според официалната документация на Moonshot K3 е обучен със запазено мислене, затова в многоходови разговори предишното съобщение на асистента трябва да се връща пълно и непроменено (включително съдържанието на мисленето). Липсата на история на мисленето води до нестабилно качество на отговорите. Ако използвате рамка за управление на сесии или проксi слой, проверете дали съдържанието на мисленето се връща без съкращения.
Chat Completions

Съдържанието на мисленето се връща в полето reasoning_content на отговора; в многоходови разговори върнете предишното съобщение на асистента (включително 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: отговорът връща reasoning_content; след като предишното съобщение на асистента (включително reasoning_content) се върне непроменено, следващите реплики се отговарят нормално.
Responses

Съдържанието на мисленето се връща като елемент от изхода reasoning; в многоходови разговори добавете изходните елементи от предишния ход (reasoning + message) непроменено обратно в input.

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

Съдържанието на мисленето се връща като собствени блокове със съдържание thinking; в многоходови разговори върнете предишните блокове на асистента (включително блоковете 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. Параметрите за семплиране са фиксирани

Параметрите за семплиране на K3 са фиксирани от доставчика на модела: temperature 1.0, top_p 0.95, n 1, а presence_penalty / frequency_penalty са 0. Официалната препоръка е тези параметри да се пропускат в заявките.

Бележка: фиксираните стойности за семплиране са част от официалната спецификация и не могат да се проверят по сигнали в отговора; следвайте официалната препоръка и пропуснете тези параметри.

4. Извикване на инструменти и динамично зареждане на инструменти

tools поддържа до 128 инструмента; tool_choice поддържа принудително и забранено извикване на инструменти. K3 поддържа и динамично зареждане на инструменти: добавяне на нови инструменти по време на разговора чрез полето tools на системно съобщение (форма на съобщение, specifична за Chat API).
Chat Completions

tool_choice поддържа auto / none / required; required принуждава модела да извика инструмент. Динамично зареждане на инструменти: системното съобщение, което добавя инструментите, няма content, добавените инструменти важат за следващите реплики, а съобщението трябва да се включва отново във всяка заявка.

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" принуждава извикване на инструмент дори при несвързани запитвания; "none" потиска извикванията на инструменти; инструменти, добавени по време на разговора чрез системно съобщение без content, могат да се извикват нормално.
Responses

Дефинициите на инструментите използват плоска структура (name на най-горно ниво); принудителното извикване също се задава с tool_choice: "required", а извикванията се връщат като изходни елементи function_call. Поддръжката на динамично зареждане на инструменти е в процес на разработка; засега декларирайте всички инструменти в параметъра tools на най-горно ниво.

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

Инструментите използват форма на Anthropic (input_schema); принудително извикване се задава с tool_choice: {"type": "any"}, а извикванията се забраняват с {"type": "none"}. ❗ Официалната крайна точка Messages (съвместима с Anthropic) на Kimi K3 не поддържа динамично зареждане на инструменти: при тестване съобщението, което добавя инструмента, връща 200, но добавеният инструмент няма ефект (моделът не може да го извика). Декларирайте всички инструменти в параметъра tools на най-горно ниво.

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. Структуриран изход

Структурираният изход принуждава модела да връща съдържание, което строго съответства на дадена JSON Schema.
Chat Completions

response_format поддържа json_schema с режим 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: изходът е валиден JSON, който съответства на схемата.
Responses

Структурираният изход се декларира чрез 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

❗ Официалната крайна точка Messages (съвместима с Anthropic) на Kimi K3 не поддържа структуриран изход: полетата за структуриран изход се игнорират без предупреждение: заявката връща HTTP 200 със свободен текст, без грешка или резервен сигнал, а последващият JSON парсинг ще се провали. Когато ви е нужен структуриран изход, използвайте Chat Completions или Responses API.

6. Кеширането на контекста е автоматично

Кеширането на контекста при K3 е включено автоматично, без нужда от параметри. Когато повтарящ се дълъг префикс попадне в кеша, размерът на попадението се отчита в usage (името на полето варира според API). Цените за кеширане са на страницата на модела.
Chat Completions

# usage of the second call with an identical long prefix
"prompt_tokens_details": {"cached_tokens": 1536}
Verified: втората заявка с идентичен дълъг префикс отчита попадението в 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. Допълване на префикс с partial

Допълването на префикс кара модела да продължи генерирането от даден префикс, подходящо за допълване на код и изход с контролиран формат.
Chat Completions

Задайте "partial": true в последното съобщение на асистента.

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: генерирането продължава от зададения префикс, без да го повтаря.
Responses

Подайте префикса като съобщение на асистента в края на масива input; параметър 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

Същата възможност се постига с нативния за протокола assistant prefill, без параметър partial: подайте префикса като последно съобщение на асистента.

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. Входни изображения

Изображенията се подават като base64; форматът на блоковете със съдържание варира според 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: входът с изображение в base64 работи и моделът правилно описва тестовото изображение.
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. Проверени данни: латентност и използване при дълга единична задача

Мисленето на K3 е фиксирано на максимално ниво, затова единичните заявки за сложни задачи отнемат значително повече време, отколкото при типичните модели. Измерени данни от задача за генериране на HTML игра в един файл (един промпт с референтно изображение, генериран наведнъж без итерации): единичната заявка отне 2,541 секунди (около 42 минути), с 74,994 токена на завършването, от които 54,486 (73%) са токени на мислене; крайният изход е 1,275 реда директно изпълним код, с finish_reason stop.

Препоръки за клиентската страна:

  • Задавайте таймаути на клиента от минути или повече и предпочитайте стрийминг за дълги задачи;
  • Оставяйте достатъчен запас в max_completion_tokens: в този случай само мисленето консумира 54,486 токена.

10. Матрица за поддръжка на възможности по API

Всяка клетка в таблицата по-долу е проверена на 2026-07-17 чрез реални заявки към производствените API на AIHubMix; всяка клетка показва синтаксиса на параметъра / полето за съответния API.

Възможност Chat Completions Responses Messages
Съдържание на мисленето в отговора ✅ поле reasoning_content ✅ елемент от изхода reasoning ✅ блок със съдържание thinking
Връщане на историята на мисленето ✅ съобщението на асистента се връща непроменено ✅ изходните елементи се връщат непроменени ✅ блоковете със съдържание се връщат непроменени
Принудително / забранено извикване на инструменти ✅ tool_choice: "required" / "none" ✅ tool_choice: "required" ✅ {"type": "any"} / {"type": "none"}
Динамично зареждане на инструменти ✅ системно съобщение с tools (без content) ➖ Поддръжката е в процес на разработка ❗ Не се поддържа в официалната крайна точка Messages (съвместима с Anthropic)
Структуриран изход ✅ response_format (json_schema + strict) ✅ text.format (json_schema) ❗ Не се поддържа в официалната крайна точка; полетата се игнорират без предупреждение (200 + свободен текст); използвайте Chat / Responses
Автоматично отчитане на попадения в кеша ✅ usage.prompt_tokens_details.cached_tokens ✅ usage.input_tokens_details.cached_tokens ✅ usage.cache_read_input_tokens
Допълване на префикс ✅ "partial": true ✅ assistant prefill ✅ assistant prefill (нативен за протокола)
Входни изображения ✅ image_url (base64) ✅ input_image (base64) ✅ блок със съдържание image (base64)
Стоп последователности ✅ stop (ограниченията се валидират) ➖ Поддръжката е в процес на разработка ❗ Ограниченията на stop_sequences се валидират по същия начин, но при попадение не се връща нито stop_reason: "stop_sequence", нито стойността stop_sequence

Често задавани въпроси

Кои API интерфейси поддържа K3 в AIHubMix?
Chat Completions (/v1/chat/completions), Responses (/v1/responses) и съвместимото с Claude Messages API (/v1/messages).

Може ли мисленето да се изключи или намали?
Не. Мисленето на K3 е включено по подразбиране, а reasoning_effort поддържа само единственото ниво "max".

Защо reasoning_content трябва да се предава обратно в многоходови разговори?
K3 е обучен със запазено мислене; Moonshot изисква предишното съобщение на асистента да се предаде обратно цялото и непроменено. Липсата на история на мисленето води до нестабилно качество на изхода.

Какви са ограниченията за параметъра stop?
Най-много 5 стоп последователности, като всяка не може да е по-дълга от 32 байта; при превишаване на някое от ограниченията се връща грешка 400.

Поддържа ли Messages API структуриран изход?
❗ Не. Официалната Messages крайна точка на Kimi K3 (съвместима с Anthropic) тихо игнорира полетата за структуриран изход (връща 200 със свободен текст и без грешка). За структуриран изход използвайте response_format в Chat Completions или text.format в Responses.

Защо единичните заявки към K3 отнемат толкова време?
Мисленето на K3 е фиксирано на максимално ниво, а токените на мисленето съставляват голям дял при сложни задачи (73% от токените за завършване в измерения случай). Задайте клиентските таймаути на минути или повече и използвайте стрийминг.


За цените и статуса в реално време вижте страницата на модела Kimi K3; за повече модели посетете галерията с модели.

Последна актуализация: 2026-07-17

Един шлюз към множество AI доставчици. Създаден за продукционна среда.

Посетете AIHubMix