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

Руководство по Kimi K3, июль 2026: reasoning_effort max, история мышления, динамическая загрузка инструментов, структурированный вывод, автоматическое кэширование, частичный префикс и визуальные входные данные.

AIHubMix8 мин чтения
Kimi K3: практическое руководство по новым параметрам и матрице поддержки API

В этой статье рассматриваются новые параметры и особенности использования Kimi K3. На AIHubMix K3 доступна через Chat Completions, Responses и совместимый с Claude API Messages. См. также: официальную документацию платформы 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 обучена с сохранением мышления (preserved thinking), поэтому в многоходовых диалогах предыдущее сообщение ассистента должно передаваться обратно полностью и без изменений (включая содержимое мышления). Отсутствие истории мышления приводит к нестабильному качеству вывода. Если вы используете фреймворк управления сессиями или прокси-слой, убедитесь, что содержимое мышления передаётся обратно без обрезки.
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 системного сообщения (форма сообщения, специфичная для 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.

Рекомендации для клиента:

  • Задавайте таймауты клиента в минутах или больше и для долгих задач предпочитайте потоковую передачу (streaming);
  • Оставляйте достаточный запас в 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) ✅ предзаполнение ассистента (нативное для протокола)
Визуальный вход ✅ image_url (base64) ✅ input_image (base64) ✅ блок содержимого image (base64)
Стоп-последовательности ✅ stop (ограничения проверяются) ➖ Поддержка в разработке ❗ Ограничения stop_sequences проверяются так же, но при срабатывании не возвращаются ни stop_reason: "stop_sequence", ни значение stop_sequence

FAQ

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

Можно ли отключить мышление или снизить его уровень?
Нет. Мышление K3 включено по умолчанию, а reasoning_effort поддерживает только единственный уровень "max".

Зачем нужно передавать reasoning_content в многоходовых диалогах?
K3 обучена с сохранением процесса рассуждения (preserved thinking), поэтому Moonshot требует, чтобы предыдущее сообщение ассистента передавалось целиком и без изменений. Если история рассуждений отсутствует, качество ответов становится нестабильным.

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

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

Почему одиночные запросы к K3 выполняются так долго?
Процесс рассуждения K3 зафиксирован на максимальном уровне, а токены рассуждений составляют большую долю в сложных задачах (73% токенов завершения в измеренном случае). Установите таймауты клиента в минуты или больше и используйте потоковую передачу.


Цены и актуальный статус см. на странице модели Kimi K3; другие модели доступны в галерее моделей.

Последнее обновление: 2026-07-17

Один шлюз ко многим провайдерам ИИ. Создан для продакшена.

Перейти на AIHubMix