Ця стаття охоплює нові параметри та примітки щодо використання Kimi K3. На AIHubMix K3 доступний через API Chat Completions, Responses та Messages, сумісні з Claude. Дивіться також: офіційна документація платформи 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 навчено з збереженим мисленням, тому в багатоповторних розмовах попереднє повідомлення асистента повинно бути передано повністю та без змін (включаючи вміст мислення). Відсутність історії мислення призводить до нестабільної якості виходу. Якщо ви використовуєте фреймворк управління сесіями або проксі-слой, підтверджуйте, що вміст мислення передається без обрізки.
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": "У равлика на дні 10-метрового колодязя. Щодня він піднімається на 3 метри, але щоночі сповзає назад на 2 метри. Скільки днів потрібно, щоб дістатися до верху?"}
],
)
print(completion.choices[0].message.reasoning_content)
print(completion.choices[0].message.content)
# Багатоповторні: передайте попереднє повідомлення асистента без змін
messages = [
{"role": "user", "content": "Яка столиця Франції?"},
{"role": "assistant", "content": "Париж.", "reasoning_content": "<reasoning_content з попередньої відповіді>"},
{"role": "user", "content": "А яке населення?"},
]
Перевірено: відповідь повертаєreasoning_content; після передачі попереднього повідомлення асистента (включаючиreasoning_content) без змін, наступні повороти відповідають нормально.
Відповіді
Вміст мислення повертається як елемент виходу 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="Відповідайте одним словом: столиця Франції",
)
# Спостережувані типи елементів response.output: ["reasoning", "message"]; текст: "Париж"
# Багатоповторні: input = [перше повідомлення користувача] + response.output + [наступне повідомлення користувача]
# Спостережувана відповідь другого повороту з переданими вихідними елементами: "Берлін"
Повідомлення
Вміст мислення повертається як рідний блок вмісту 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": "Відповідайте одним словом: столиця Франції"}
],
)
# Спостережувані типи блоків 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).
Chat Completions
tool_choice підтримує auto / none / required; required примушує модель викликати інструмент. Динамічне завантаження інструментів: системне повідомлення, що впроваджує інструмент, не містить content, впроваджені інструменти діють для наступних поворотів, і повідомлення повинно бути включено знову в кожен запит.
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": "Скільки зараз часу?"},
]
# 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 верхнього рівня.
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"}. ❗ Офіційна точка доступу Kimi K3 Messages (сумісна з Anthropic) не підтримує динамічне завантаження інструментів: під час тестування впроваджене повідомлення повертає 200, але впроваджений інструмент не має ефекту (модель не може його викликати). Оголосіть усі інструменти в параметрі tools верхнього рівня.
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-схемі.
Chat Completions
response_format підтримує json_schema з strict режимом.
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.
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":"Париж"}
Повідомлення
❗ Офіційна точка доступу Kimi K3 Messages (сумісна з Anthropic) не підтримує структурований вихід: поля структурованого виходу ігноруються без жодних попереджень: запит повертає HTTP 200 з текстом вільної форми, без помилки або повідомлення про резервування, і подальший JSON-аналіз зазнає невдачі. Коли вам потрібен структурований вихід, використовуйте API Chat Completions або Responses.
6. Автоматичне кешування контексту
Кешування контексту K3 увімкнено автоматично, без необхідності в параметрах. Коли повторюваний довгий префікс потрапляє в кеш, кількість попадань звітується у використанні (ім'я поля варіюється в залежності від API). Ціни на кешування вказані на сторінці моделі.
Chat Completions
# використання другого виклику з ідентичним довгим префіксом
"prompt_tokens_details": {"cached_tokens": 1536}
Перевірено: другий запит з ідентичним довгим префіксом звітує про попадання вusage.prompt_tokens_details.cached_tokens.
Відповіді
# використання другого виклику Responses з ідентичними довгими інструкціями
"input_tokens_details": {"cached_tokens": 1536}
Повідомлення
# використання другого виклику Messages з ідентичним довгим системним запитом
"cache_read_input_tokens": 1536
7. Завершення partial префікса
Завершення префікса змушує модель продовжувати генерувати з даного префікса, що добре підходить для завершення коду та виходу з контрольованим форматом.
Chat Completions
Передайте "partial": true в останньому повідомленні асистента.
messages = [
{"role": "user", "content": "Напишіть хайку про море."},
{"role": "assistant", "content": "Хвилі складаються в піну,", "partial": True},
]
# Префікс: "Хвилі складаються в піну," -> продовження, повернуте моделлю
# сіль висить у повітрі—
# місяць тягне приплив додому.
Перевірено: генерація продовжується з даного префікса без повторення його.
Відповіді
Передайте префікс як повідомлення асистента в кінці масиву input; параметр partial не потрібен.
response = client.responses.create(
model="kimi-k3",
input=[
{"role": "user", "content": "Напишіть хайку про море."},
{"role": "assistant", "content": "Хвилі складаються в піну,"},
],
)
# Спостережуване продовження: "сіль висить у повітрі— / місяць тягне приплив додому."
Повідомлення
Ту ж можливість можна досягти за допомогою рідного заповнення асистента протоколу, без параметра partial: передайте префікс як останнє повідомлення асистента.
response = client.messages.create(
model="kimi-k3",
max_tokens=4096,
messages=[
{"role": "user", "content": "Напишіть хайку про море."},
{"role": "assistant", "content": "Хвилі складаються в піну,"},
],
)
# Спостережуване продовження: "сільний вітер несе крик мартинів— / приплив тягне ..."
8. Вхідні дані з зору
Зображення передаються у форматі base64; формат блоку вмісту варіюється в залежності від API.
Chat Completions
messages = [
{
"role": "user",
"content": [
{"type": "text", "text": "Який домінуючий колір цього зображення? Одне слово."},
{"type": "image_url", "image_url": {"url": "data:image/png;base64,<BASE64>"}},
],
}
]
# Спостережуваний вміст відповіді: "Червоний" (вхід: 64x64 суцільний червоний PNG)
Перевірено: вхід зображення base64 працює, і модель правильно описує тестове зображення.
Відповіді
input = [
{
"role": "user",
"content": [
{"type": "input_text", "text": "Який домінуючий колір цього зображення? Одне слово."},
{"type": "input_image", "image_url": "data:image/png;base64,<BASE64>"},
],
}
]
# Спостережуваний текст виходу: "Червоний"
Повідомлення
messages = [
{
"role": "user",
"content": [
{"type": "text", "text": "Який домінуючий колір цього зображення? Одне слово."},
{"type": "image", "source": {"type": "base64", "media_type": "image/png", "data": "<BASE64>"}},
],
}
]
# Спостережуваний текст відповіді: "Червоний"
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 Messages, сумісний з Claude (/v1/messages).
Чи можна вимкнути або зменшити мислення?
Ні. Мислення K3 увімкнено за замовчуванням, і reasoning_effort підтримує лише один рівень "max".
Чому reasoning_content потрібно передавати назад у багатоповторних розмовах?
K3 навчено з збереженим мисленням; Moonshot вимагає, щоб попереднє повідомлення асистента було передано повністю та без змін. Відсутність історії мислення призводить до нестабільної якості виходу.
Які обмеження на параметр stop?
Максимум 5 секвенцій зупинки, кожна не довша за 32 байти; перевищення будь-якого з обмежень повертає помилку 400.
Чи підтримує API Messages структурований вихід?
❗ Ні. Офіційна точка доступу Kimi K3 Messages (сумісна з Anthropic) тихо ігнорує поля структурованого виходу (повертаючи 200 з текстом вільної форми та без помилки). Для структурованого виходу використовуйте response_format на Chat Completions або text.format на Responses.
Чому одноразові запити K3 займають так багато часу?
Мислення K3 зафіксовано на максимальному рівні, і токени мислення складають велику частку складних завдань (73% токенів завершення у виміряній справі). Встановіть тайм-аути клієнта на хвилини або більше та використовуйте потокову передачу.
Для цін та реального статусу дивіться сторінку моделі Kimi K3; для інших моделей відвідайте галерею моделей.
Останнє оновлення: 2026-07-17



