Ръководство за Kimi K3: Нови параметри и матрица на поддръжка на API

AIHubMix8 мин четене
Ръководство за Kimi K3: Нови параметри и матрица на поддръжка на API

Тази статия обхваща новите параметри и бележки за употреба на Kimi K3. На AIHubMix, K3 е наличен чрез API за завършване на чат, отговори и съвместими с Claude съобщения. Вижте също: официалната документация на платформата Moonshot.

„Потвърдените“ заключения и примерни отговори в секциите идват от реални повиквания, направени на 2026-07-17 чрез API на AIHubMix (Завършвания на чат / Отговори / Съобщения).

1. Спецификации на модела в обобщение

Артикул Стойност
Контекстен прозорец 1M токена
Максимален изход max_completion_tokens по подразбиране е 131,072, до 1,048,576
Входни модалности Текст, изображения (за видео вход вижте официалната документация на Moonshot)
Режим на мислене Включен по подразбиране; reasoning_effort поддържа само "max"
Последователности за спиране stop позволява максимум 5 записа, всеки не по-дълъг от 32 байта
Потвърдено: и двете ограничения на stop са валидирани, а надвишаването на което и да е от тях връща 400; API за съобщения прилага същата валидация към stop_sequences.

Когато се достигне последователност за спиране, API за съобщения не следва семантиката на 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) обратно дословно.

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="Отговорете с една дума: столица на Франция",
)

# Наблюдаван отговор.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": "Отговорете с една дума: столица на Франция"}
    ],
)

# Наблюдаван отговор.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 за чат).
Завършвания на чат

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 за съобщения (съвместима с 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 схема.
Завършвания на чат

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 за съобщения (съвместима с Anthropic) не поддържа структуриран изход: полетата за структурирани изходи се игнорират безшумно: заявката връща HTTP 200 с текст с произволна форма, без грешка или уведомление за резервно решение, а последващото JSON парсване ще се провали. Когато имате нужда от структуриран изход, използвайте API за Завършвания на чат или Отговори.

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

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

# употреба на второто повикване с идентичен дълъг префикс
"prompt_tokens_details": {"cached_tokens": 1536}
Потвърдено: второто искане с идентичен дълъг префикс отчита удара в usage.prompt_tokens_details.cached_tokens.
Отговори
# употреба на второто повикване на Отговори с идентични дълги инструкции
"input_tokens_details": {"cached_tokens": 1536}

Съобщения

# употреба на второто повикване на Съобщения с идентичен дълъг системен подкан
"cache_read_input_tokens": 1536

7. partial Завършване на префикс

Завършването на префикс кара модела да продължи генерирането от даден префикс, което е подходящо за завършване на код и изход с контрол на формата.
Завършвания на чат

Предайте "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.
Завършвания на чат

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.

Способност Завършвания на чат Отговори Съобщения
Съдържание на мисленето в отговора reasoning_content поле reasoning изходен елемент thinking блок съдържание
Предаване на историята на мисленето ✅ съобщението на асистента предадено обратно дословно ✅ изходните елементи предадени обратно дословно ✅ блоковете на съдържанието предадени обратно дословно
Принуждаване / деактивиране на извиквания на инструменти tool_choice: "required" / "none" tool_choice: "required" {"type": "any"} / {"type": "none"}
Динамично зареждане на инструменти ✅ системно съобщение с tools (без content) ➖ Поддръжка в процес на работа ❗ Неподдържано на официалната крайна точка за съобщения (съвместима с 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?
Завършвания на чат (/v1/chat/completions), Отговори (/v1/responses) и съвместимото с Claude API за съобщения (/v1/messages).

Може ли мисленето да бъде деактивирано или намалено?
Не. Мисленето на K3 е включено по подразбиране, а reasoning_effort поддържа само единственото ниво "max".

Защо reasoning_content трябва да бъде предадено обратно в многообратни разговори?
K3 е обучен с запазено мислене; Moonshot изисква предишното съобщение на асистента да бъде предадено обратно пълно и неизменено. Липсващата история на мисленето води до нестабилно качество на изхода.

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

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

Защо единичните заявки на K3 отнемат толкова много време?
Мисленето на K3 е фиксирано на максимално ниво, а токените за мислене съставляват голям дял при сложни задачи (73% от токените за завършване в измерения случай). Настройте времевите ограничения на клиента на минути или по-дълго и използвайте стрийминг.


За цени и статус в реално време, вижте страницата на модела Kimi K3; за повече модели, посетете галерията на модели.

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