В этой статье рассматриваются новые параметры и особенности использования 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



