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

29 июл. 2026 г. · AIHubMix · 9 min read

Практическое руководство по Kimi K3: новые параметры и матрица поддержки API
Индекс документации
Получите полный индекс документации по адресу: https://docs.aihubmix.com/llms.txt
Используйте этот файл, чтобы узнать обо всех доступных страницах перед дальнейшим изучением.

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

Практическое руководство по Kimi K3: режим мышления, динамическая загрузка инструментов и кэширование контекста
В этой статье рассматриваются новые параметры и примечания по использованию Kimi K3. На AIHubMix K3 доступен через API Chat Completions, Responses и Claude-compatible Messages. См. также: официальная документация платформы Moonshot.

«Проверенные» выводы и примеры ответов в каждом разделе получены из фактических вызовов, сделанных 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 байт
Проверено: оба ограничения stop проверены, и превышение любого из них возвращает 400; API Messages применяет ту же проверку к stop_sequences.

Когда последовательность остановки достигнута, API Messages не следует семантике Anthropic: в тестировании stop_reason равен "end_turn" (вместо "stop_sequence"), stop_sequence равен null, а видимый текст перед словом остановки может быть пустым. Клиенты, которые полагаются на эти два поля для обнаружения усечения, должны это учитывать.
# остановка с 6 записями / запись 33 байта -> HTTP 400
"Неверный запрос: массив остановки слишком длинный. Ожидался массив максимальной длины 5, но получен массив длиной 6"
"Неверный запрос: последовательность остановки не должна превышать 32, но получена 33"

2. Режим мышления: reasoning_effort поддерживает только max

Мышление K3 включено по умолчанию, и reasoning_effort поддерживает только один уровень: "max".

Многоходовые разговоры должны передавать историю мышления дословно: согласно официальной документации Moonshot, K3 обучен с сохранением мышления, поэтому в многоходовых разговорах предыдущее сообщение помощника должно передаваться полностью и без изменений (включая содержание мышления). Отсутствие истории мышления приводит к нестабильному качеству вывода. Если вы используете фреймворк управления сессиями или прокси-слой, убедитесь, что содержание мышления передается без обрезки.

Содержание мышления возвращается в поле `reasoning_content` ответа; в многоходовых разговорах передавайте предыдущее сообщение помощника (включая `reasoning_content`) дословно.

```text theme={null}
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": "У улитки на дне 10-метрового колодца. Каждый день она поднимается на 3 метра, но каждую ночь скользит назад на 2 метра. Сколько дней потребуется, чтобы добраться до верха?"}
    ],
)

print(completion.choices[0].message.reasoning_content)
print(completion.choices[0].message.content)
```

```text theme={null}
# Многоходовой: передайте предыдущее сообщение помощника дословно
messages = [
    {"role": "user", "content": "Какова столица Франции?"},
    {"role": "assistant", "content": "Париж.", "reasoning_content": "<reasoning_content из предыдущего ответа>"},
    {"role": "user", "content": "А его население?"}
]
```

> **Проверено**: ответ возвращает `reasoning_content`; после передачи предыдущего сообщения помощника (включая `reasoning_content`) дословно, последующие ходы отвечают нормально.

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

```text theme={null}
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="Ответьте одним словом: столица Франции",
)

# Наблюдаемые типы элементов response.output: ["reasoning", "message"]; текст: "Париж"
# Многоходовой: input = [первое сообщение пользователя] + response.output + [следующее сообщение пользователя]
# Наблюдаемый ответ второго хода с переданными выводами: "Берлин"
```

Содержание мышления возвращается как родные блоки содержания `thinking`; в многоходовых разговорах передавайте предыдущие блоки содержания помощника (включая блоки мышления) дословно.

```text theme={null}
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": "Ответьте одним словом: столица Франции"}
    ],
)

# Наблюдаемые типы блоков response.content: ["thinking", "text"]; текст: "Париж"
# Многоходовой: передайте response.content обратно дословно как сообщение помощника
```

3. Параметры выборки фиксированы

Параметры выборки K3 фиксированы поставщиком: temperature 1.0, top_p 0.95, n 1 и presence_penalty / frequency_penalty 0. Официальная рекомендация — не указывать эти параметры в запросах.

Примечание: фиксированные значения выборки являются частью официальной спецификации и не могут быть проверены по сигналам ответа; следуйте официальной рекомендации и не указывайте эти параметры.

4. Вызов инструментов и динамическая загрузка инструментов

tools поддерживает до 128 инструментов; tool_choice поддерживает принудительные и отключенные вызовы инструментов. K3 также поддерживает динамическую загрузку инструментов: внедрение новых инструментов в процессе разговора через поле tools системного сообщения (формат сообщения, специфичный для API Chat).

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

```text theme={null}
messages = [
    {"role": "system", "content": "Вы полезный помощник."},
    {"role": "user", "content": "Здравствуйте."},
    {"role": "assistant", "content": "Привет, чем я могу вам помочь?"},
    # Внедрить новый инструмент в процессе разговора: только поле tools, без содержания
    {
        "role": "system",
        "tools": [
            {
                "type": "function",
                "function": {
                    "name": "get_time",
                    "description": "Получить текущее время",
                    "parameters": {"type": "object", "properties": {}},
                },
            }
        ],
    },
    {"role": "user", "content": "Сколько сейчас времени?"}
]
```

```text theme={null}
# tool_choice="required" с подсказкой "Здравствуйте" -> модель принуждена вызвать инструмент
"finish_reason": "tool_calls",
"tool_calls": [{"function": {"name": "get_weather", "arguments": "{\"city\":\"New York\"}"}}]
```

> **Проверено**: `tool_choice: "required"` принуждает вызов инструмента даже для несвязанных подсказок; `"none"` подавляет вызовы инструментов; инструменты, внедренные в процессе разговора через системное сообщение без `content`, могут вызываться нормально.

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

```text theme={null}
response = client.responses.create(
    model="kimi-k3",
    input="Здравствуйте",
    tools=[{
        "type": "function",
        "name": "get_weather",
        "description": "Получить погоду для города",
        "parameters": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
    }],
    tool_choice="required",
)

# Наблюдаемый вывод содержит: {"type": "function_call", "name": "get_weather", "arguments": "{\"city\":\"London\"}"}
```

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

```text theme={null}
response = client.messages.create(
    model="kimi-k3",
    max_tokens=4096,
    tools=[{
        "name": "get_weather",
        "description": "Получить погоду для города",
        "input_schema": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
    }],
    tool_choice={"type": "any"},
    messages=[{"role": "user", "content": "Здравствуйте"}],
)

# Наблюдаемый: stop_reason "tool_use"; содержание содержит блок tool_use, вызывающий get_weather
```

5. Структурированный вывод

Структурированный вывод заставляет модель возвращать содержимое, строго соответствующее заданной JSON-схеме.

`response_format` поддерживает `json_schema` с режимом `strict`.

```text theme={null}
completion = client.chat.completions.create(
    model="kimi-k3",
    messages=[
        {"role": "user", "content": "Париж — столица Франции. Извлеките название города."}
    ],
    response_format={
        "type": "json_schema",
        "json_schema": {
            "name": "extract",
            "strict": True,
            "schema": {
                "type": "object",
                "properties": {"city": {"type": "string"}},
                "required": ["city"],
            },
        },
    },
)

# Наблюдаемое содержание ответа: {"city":"Париж"}
```

> **Проверено**: вывод является действительным JSON, соответствующим схеме.

Структурированный вывод объявляется через `text.format`.

```text theme={null}
response = client.responses.create(
    model="kimi-k3",
    input="Париж — столица Франции. Извлеките название города.",
    text={
        "format": {
            "type": "json_schema",
            "name": "extract",
            "strict": True,
            "schema": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
        }
    },
)

# Наблюдаемый текст вывода: {"city":"Париж"}
```

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

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

Кэширование контекста K3 включено автоматически, без необходимости в параметрах. Когда повторяющийся длинный префикс попадает в кэш, количество попаданий отображается в использовании (имя поля варьируется в зависимости от API). Цены на кэширование указаны на странице модели.

```text theme={null} # использование второго вызова с идентичным длинным префиксом "prompt_tokens_details": {"cached_tokens": 1536} ```

> **Проверено**: второй запрос с идентичным длинным префиксом сообщает о попадании в `usage.prompt_tokens_details.cached_tokens`.

```text theme={null} # использование второго вызова Responses с идентичными длинными инструкциями "input_tokens_details": {"cached_tokens": 1536} ``` ```text theme={null} # использование второго вызова Messages с идентичным длинным системным запросом "cache_read_input_tokens": 1536 ```

7. Завершение с частичным префиксом partial

Завершение префикса позволяет модели продолжать генерацию с заданного префикса, что хорошо подходит для завершения кода и вывода с контролируемым форматом.

Передайте `"partial": true` в последнем сообщении помощника.

```text theme={null}
messages = [
    {"role": "user", "content": "Напишите хокку о море."},
    {"role": "assistant", "content": "Волны складываются в пену,", "partial": True},
]

# Префикс: "Волны складываются в пену,"  ->  продолжение, возвращаемое моделью
# соль висит в воздухе—
# луна тянет прилив домой.
```

> **Проверено**: генерация продолжается с заданного префикса без его повторения.

Передайте префикс как сообщение помощника в конце массива `input`; параметр `partial` не нужен.

```text theme={null}
response = client.responses.create(
    model="kimi-k3",
    input=[
        {"role": "user", "content": "Напишите хокку о море."},
        {"role": "assistant", "content": "Волны складываются в пену,"},
    ],
)

# Наблюдаемое продолжение: "соль висит в воздухе— / луна тянет прилив домой."
```

Та же возможность достигается с помощью родного заполнения помощника протокола, без параметра `partial` — передайте префикс как последнее сообщение помощника.

```text theme={null}
response = client.messages.create(
    model="kimi-k3",
    max_tokens=4096,
    messages=[
        {"role": "user", "content": "Напишите хокку о море."},
        {"role": "assistant", "content": "Волны складываются в пену,"},
    ],
)

# Наблюдаемое продолжение: "соль тянет криком чайки— / прилив тянет ..."
```

8. Визуальный ввод

Изображения передаются в формате base64; формат блока содержимого варьируется в зависимости от API.

```text theme={null} messages = [ { "role": "user", "content": [ {"type": "text", "text": "Какой доминирующий цвет на этом изображении? Одно слово."}, {"type": "image_url", "image_url": {"url": "data:image/png;base64,"}}, ], } ]

# Наблюдаемое содержание ответа: "Красный"  (ввод: 64x64 сплошной красный PNG)
```

> **Проверено**: ввод изображения в формате base64 работает, и модель правильно описывает тестовое изображение.

```text theme={null} input = [ { "role": "user", "content": [ {"type": "input_text", "text": "Какой доминирующий цвет на этом изображении? Одно слово."}, {"type": "input_image", "image_url": "data:image/png;base64,"}, ], } ]

# Наблюдаемый текст вывода: "Красный"
```

```text theme={null} messages = [ { "role": "user", "content": [ {"type": "text", "text": "Какой доминирующий цвет на этом изображении? Одно слово."}, {"type": "image", "source": {"type": "base64", "media_type": "image/png", "data": ""}}, ], } ]

# Наблюдаемый текст ответа: "Красный"
```

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 ✅ предварительное заполнение помощника ✅ предварительное заполнение помощника (родное для протокола)
Визуальный ввод 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) и API сообщений, совместимый с Claude (/v1/messages).

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

Почему reasoning_content должно передаваться обратно в многоходовых разговорах?
K3 обучен с сохранением мышления; Moonshot требует, чтобы предыдущее сообщение помощника передавалось полностью и без изменений. Отсутствие истории мышления приводит к нестабильному качеству вывода.

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

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

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


Для получения информации о ценах и статусе в реальном времени смотрите страницу модели Kimi K3; для получения информации о других моделях посетите галерею моделей.

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

More from the blog