Ця стаття описує нові параметри та примітки щодо використання Kimi K3. На AIHubMix K3 доступна через Chat Completions, Responses та Messages API, сумісний із Claude. Також див.: офіційну документацію платформи Moonshot.
Висновки «Verified» і зразки відповідей у кожному розділі отримано з реальних викликів, виконаних 17.07.2026 через 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; 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 навчена зі збереженням міркувань, тому в багатоходових розмовах попереднє повідомлення асистента має передаватися назад повністю і без змін (включно з вмістом міркувань). Відсутня історія міркувань призводить до нестабільної якості виводу. Якщо ви використовуєте фреймворк керування сесіями або проксі-шар, переконайтеся, що вміст міркувань передається назад без обрізання.
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?"},
]
Перевірено: відповідь містить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\"}"}}]
Перевірено: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"}
Перевірено: вивід є валідним 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}
Перевірено: другий запит з ідентичним довгим префіксом повідомляє про попадання в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.
Перевірено: генерація продовжується із заданого префікса без його повторення.
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)
Перевірено: вхід зображення у форматі 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
Кожну клітинку таблиці нижче перевірено 17.07.2026 реальними викликами до робочих 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 |
Часті запитання
Які 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 (сумісна з Anthropic) Kimi K3 мовчки ігнорує поля структурованого виводу (повертає 200 з вільним текстом і без помилки). Для структурованого виводу використовуйте response_format у Chat Completions або text.format у Responses.
Чому одиничні запити до K3 виконуються так довго?
Мислення K3 встановлено на максимальному рівні, а токени мислення займають значну частку у складних завданнях (73% токенів завершення у виміряному випадку). Встановлюйте тайм-аути клієнта на хвилини або більше і використовуйте потокову передачу.
Ціни та актуальний статус див. на сторінці моделі Kimi K3; більше моделей — у галереї моделей.
Останнє оновлення: 2026-07-17



