API Kimi K2 отключают: как перейти на K3.1 Pro

Переведите запросы K2.6 и K2.7 Code на K3.1 Pro до запланированного отключения в декабре 2026 года. Проверьте условия доступа, замените параметры K2, сохраните полные сообщения ассистента, обновите модели в OpenCode и Claude Code и учтите оплату записи в кэш. В статье есть исполняемый пример API и список проверок перед переключением рабочего трафика.

Содержание
API Kimi K2 отключают: как перейти на K3.1 Pro

Переведите запросы с kimi-k2.6 и kimi-k2.7-code на kimi-k3.1-pro до запланированного отключения K2 в конце декабря 2026 года. Перед переключением рабочего трафика явно задайте уровень рассуждений и лимит генерации, затем проверьте историю вызовов инструментов и расходы на кэш. По состоянию на 2026-11-05 ограничения для новых аккаунтов уже действуют.

Когда отключат Kimi K2?

Старые аккаунты, которым доступна K2, пока могут продолжать работу. Точной даты и времени отключения в этих уведомлениях нет.

В уведомлении на странице тарифов указано, что с 31 октября 2026 года модели K2 недоступны новым пользователям. Все модели серии планируют отключить к концу декабря 2026 года.

В текущем списке моделей формулировка немного отличается. Пользователи, зарегистрированные до 1 ноября, могут продолжать вызывать kimi-k2.6, kimi-k2.7-code и kimi-k2.7-code-highspeed. Их отключение ожидается в конце декабря 2026 года.

Если вы зарегистрировались на границе этих дат, проверьте доступ своего аккаунта напрямую. По формулировкам нельзя однозначно определить точный момент ограничения доступа. Новые интеграции сразу настраивайте на K3.1 Pro.

Код ошибки при недоступности K2 нужно проверять отдельно. Августовский журнал изменений подтверждает 404 «model not found» для уже отключённых kimi-k2.5 и моделей moonshot-v1. Это сообщение не устанавливает, какой ответ вернёт API после отключения K2.6 или K2.7 Code.

Какие параметры изменить перед переходом

Перед сменой модели обновите формат запросов и способ хранения истории диалога. В сравнении параметров Kimi описаны различия, которые легко пропустить при простой замене имени модели.

Настройкаkimi-k2.6kimi-k2.7-codekimi-k3.1-pro
Режим рассужденийВключён по умолчанию; можно отключитьВсегда включёнВсегда включён; удалите объект thinking от K2
reasoning_effortНе поддерживаетсяНе поддерживаетсяПоле верхнего уровня: low, high или max; по умолчанию max
temperatureФиксированное 1.0 с рассуждениями; 0.6 без нихФиксированное 1.0Фиксированное 1.0; не передавайте поле
Лимит генерации по умолчаниюmax_tokens: 32768max_tokens: 32768max_completion_tokens: 131072

В K2.7 Code режим рассуждений уже был обязательным, а рассуждения сохранялись между ходами диалога. Сильнее эти требования меняют работу приложений, которые использовали K2.6 без рассуждений.

В руководстве K3.1 Pro также зафиксированы top_p=0.95, n=1, presence_penalty=0 и frequency_penalty=0. Не передавайте эти поля и temperature. Проверьте настройки клиентской библиотеки: она может добавлять параметры сэмплирования, которые ваше приложение явно не задавало.

Для новых запросов Chat Completions используйте max_completion_tokens. В справочнике API поле max_tokens помечено как устаревшее, но не как удалённое. Максимальное значение для K3.1 Pro — 1048576; фактическую генерацию ограничивает оставшееся место в контекстном окне.

Лимит задаёт верхнюю границу генерации. Он не означает, что каждый запрос обязательно израсходует столько токенов. Подберите значение под задачу, чтобы не наследовать увеличенный лимит по умолчанию.

Для уровня рассуждений начните с low при проверке подключения и простых запросах на поиск конкретных сведений. Для обычных задач программирования попробуйте high. Используйте max, если ваши регрессионные тесты оправдывают дополнительный объём рассуждений. Значение low снижает уровень рассуждений, но не отключает их.

Как проверить API и вызов инструмента

Сначала проверьте API напрямую, затем разбирайтесь с настройками агента.

Создайте API-ключ в Global Kimi Open Platform. По состоянию на 2026-11-05 условия доступа требуют успешного пополнения на сумму не менее $1. Ключ должен принадлежать платформе, которая обслуживает https://api.moonshot.ai. Ошибки аккаунта Kimi Code разбираются отдельно в руководстве по лимитам Kimi Code.

В Bash введите ключ без отображения на экране:

read -rs MOONSHOT_API_KEY && export MOONSHOT_API_KEY

Следующая команда Bash использует стандартную библиотеку Python 3. Скрипт отправляет два оплачиваемых запроса и выполняет умножение локально. Лимит генерации 4096 выбран для этой арифметической проверки, а не для произвольных задач программирования.

python3 - <<'PY'
import json
import os
import urllib.error
import urllib.request

tools = [{
    "type": "function",
    "function": {
        "name": "multiply",
        "description": "Multiply two integers.",
        "parameters": {
            "type": "object",
            "properties": {
                "a": {"type": "integer"},
                "b": {"type": "integer"}
            },
            "required": ["a", "b"],
            "additionalProperties": False
        }
    }
}]

def chat(messages, choice):
    payload = {
        "model": "kimi-k3.1-pro",
        "messages": messages,
        "reasoning_effort": "low",
        "max_completion_tokens": 4096,
        "tools": tools,
        "tool_choice": choice
    }
    request = urllib.request.Request(
        "https://api.moonshot.ai/v1/chat/completions",
        data=json.dumps(payload).encode("utf-8"),
        headers={
            "Authorization": "Bearer " + os.environ["MOONSHOT_API_KEY"],
            "Content-Type": "application/json"
        },
        method="POST"
    )
    try:
        with urllib.request.urlopen(request, timeout=120) as response:
            data = json.load(response)
    except urllib.error.HTTPError as error:
        raise SystemExit(f"HTTP {error.code}: check access and request parameters.")
    if data.get("model") != "kimi-k3.1-pro":
        raise RuntimeError("Unexpected response model.")
    if data["choices"][0]["finish_reason"] == "length":
        raise RuntimeError("Generation limit reached; do not accept this result.")
    return data

messages = [{
    "role": "user",
    "content": "Use multiply to calculate 6 times 7, then report the result."
}]
first = chat(messages, "required")
assistant = first["choices"][0]["message"]
calls = assistant.get("tool_calls") or []
if not calls:
    raise RuntimeError("Expected a tool call.")
messages.append(assistant)

for call in calls:
    function = call["function"]
    arguments = json.loads(function["arguments"])
    if function["name"] != "multiply":
        raise RuntimeError("Unexpected tool.")
    if not isinstance(arguments, dict) or set(arguments) != {"a", "b"}:
        raise RuntimeError("Unexpected arguments.")
    if any(type(arguments[key]) is not int for key in ("a", "b")):
        raise RuntimeError("Expected integer arguments.")
    result = arguments["a"] * arguments["b"]
    messages.append({
        "role": "tool",
        "tool_call_id": call["id"],
        "content": json.dumps({"result": result})
    })

final = chat(messages, "none")
choice = final["choices"][0]
answer = choice["message"].get("content") or ""
if choice["finish_reason"] != "stop" or not answer.strip():
    raise RuntimeError("Expected a completed final answer.")
print(answer)
print(json.dumps({"first": first["usage"], "final": final["usage"]}))
PY

Ожидаемый результат — итоговый ответ с числом 42, затем объекты расхода токенов для обоих запросов. Проверка отклоняет результат, если нет вызова инструмента, модель отличается, аргументы неверны, генерация обрезана или итоговый ответ не завершён.

Операция messages.append(assistant) сохраняет полное сообщение ассистента, включая reasoning_content и tool_calls. Затем каждый результат инструмента получает соответствующий tool_call_id. Соблюдайте это правило сохранения истории и в хранилище диалогов своего приложения.

Пример намеренно использует обязательный вызов инструмента и запрет вызовов, чтобы проверить оба этапа. В обычном цикле работы агента можно выбрать auto, если решение о следующем вызове должна принимать модель.

При сбое выберите следующую проверку по справочнику ошибок:

  • При 401 проверьте, на какой платформе выпущен ключ и к какому адресу отправлен запрос. Затем повторите тот же пример.
  • При 400 в существующем приложении проверьте исходящий JSON: не остались ли настройки K2 thinking или переопределения фиксированных параметров сэмплирования.
  • При 404 проверьте и идентификатор модели, и доступ аккаунта. Сам по себе этот код не доказывает опечатку.
  • При finish_reason="length" считайте ответ незавершённым. Скорректируйте задачу, уровень рассуждений или лимит генерации, прежде чем принимать результат.

По состоянию на 2026-11-05 kimi-k3.1-pro есть и в каталоге BetterToken. Его OpenAI-совместимый API использует https://www.bettertoken.ai/v1 и ваш собственный ключ BetterToken. Актуальные цены и правила запросов проверяйте отдельно: условия кэширования Moonshot не определяют поведение этого шлюза.

Для пользователей из России документация BetterToken указывает оплату в рублях и подключение к API без VPN. Доступ без VPN относится к API BetterToken. Для сторонних сайтов, скачивания инструментов, входа в аккаунты, обновлений и подписок действуют отдельные условия. Способы оплаты, комиссии и доступность конкретной карты проверяйте в кабинете при пополнении.

Как обновить OpenCode и Claude Code

Замените модель во всех маршрутах, которые ещё могут выбрать K2, включая фоновые задачи и вспомогательных агентов — субагентов. Успешный основной диалог не подтверждает работу этих маршрутов.

OpenCode: выберите провайдера Moonshot

Используйте встроенного провайдера Moonshot AI и обновите каталог моделей. Его идентификатор — moonshotai; ключ он читает из MOONSHOT_API_KEY.

Следующие команды соответствуют интерфейсу CLI OpenCode v1.19.5. Запустите их в той же сессии Bash:

opencode models moonshotai --refresh
opencode run --model moonshotai/kimi-k3.1-pro --variant high \
  "Inspect the current project and identify the test command. Do not edit files."

В обновлённом списке должна появиться moonshotai/kimi-k3.1-pro. Второй вызов должен вернуть ответ о вашем проекте с выбранными провайдером и моделью. Если модели нет, проверьте установленную версию клиента и обновление каталога, прежде чем продолжать.

Оба флага описаны в справочнике CLI. Чтобы сохранить выбор, задайте "model": "moonshotai/kimi-k3.1-pro" в проектном opencode.json или глобальном ~/.config/opencode/opencode.json. Если существуют оба файла, учитывайте приоритет настроек.

Команда задаёт high только для этого запуска. В интерактивной сессии выберите уровень через /variants до отправки первого запроса. Если одновременно обновляете клиент, изучите изменения разрешений в OpenCode 2 перед тем, как разрешать правки репозитория.

Claude Code: обновите все привязки моделей

При переходе Claude Code на K3.1 Pro обновите все привязки моделей. Moonshot описывает совместимый маршрут подключения Claude Code. При этом документация Anthropic по шлюзам исключает поддержку маршрутизации Claude Code к моделям других производителей.

Это путь подключения через адаптер Moonshot. Проверьте его работу с установленной версией клиента.

Сначала откройте ~/.claude/settings.json и настройки проекта. Проверьте старые адреса, учётные данные, модели и уровень рассуждений в блоках env. Moonshot предупреждает: значения переменных из файла настроек могут переопределять переменные, экспортированные в терминале.

В текущем примере Moonshot уровень Haiku всё ещё направлен на kimi-k2.7-code. Ниже предложена конфигурация Bash, которая переводит все перечисленные уровни на целевую модель:

unset ANTHROPIC_API_KEY
export ANTHROPIC_BASE_URL="https://api.moonshot.ai/anthropic"
export ANTHROPIC_AUTH_TOKEN="$MOONSHOT_API_KEY"
export ANTHROPIC_MODEL="kimi-k3.1-pro"
export ANTHROPIC_DEFAULT_OPUS_MODEL="$ANTHROPIC_MODEL"
export ANTHROPIC_DEFAULT_SONNET_MODEL="$ANTHROPIC_MODEL"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="$ANTHROPIC_MODEL"
export ANTHROPIC_DEFAULT_FABLE_MODEL="$ANTHROPIC_MODEL"
export CLAUDE_CODE_SUBAGENT_MODEL="$ANTHROPIC_MODEL"
export CLAUDE_CODE_EFFORT_LEVEL="high"

claude --model kimi-k3.1-pro

Здесь используется ключ, экспортированный для проверки API. Найдите оставшиеся старые настройки K2, включая ANTHROPIC_SMALL_FAST_MODEL.

Выполните /status и проверьте базовый URL и модель. Затем отправьте простой запрос и задачу, которая требует прочитать локальный файл. Проверьте действующий уровень рассуждений через средства настройки модели.

Claude Code использует протокол Messages. Учитывайте различия между полями Kimi Messages и Chat Completions:

НазначениеChat CompletionsKimi Messages
Уровень рассужденийreasoning_effortoutput_config.effort
Лимит генерацииmax_completion_tokensОбязательное поле max_tokens
Срок хранения кэшаprompt_cache_options.ttlcache_control.ttl в объекте верхнего уровня

Не переименовывайте поле max_tokens в Messages только потому, что оно устарело в Chat Completions.

Как проверить расходы на кэш без двойного учёта

Разделите входные токены на чтение из кэша, запись в кэш и токены вне кэша. K3.1 Pro тарифицирует запись в кэш отдельно. Учитывайте эту плату при расчёте расходов.

Для Chat Completions используйте следующие поля:

  • Все входные токены: usage.prompt_tokens.
  • Чтение из кэша: usage.prompt_tokens_details.cached_tokens.
  • Запись в кэш: usage.prompt_tokens_details.cache_write_tokens.
  • Все выходные токены: usage.completion_tokens.

Согласно правилам учёта в API, три категории входных токенов не пересекаются. Выходные токены уже включают и рассуждения, и итоговый ответ.

Подставляйте ставки в одной валюте за 1,000,000 токенов:

uncached = prompt_tokens - cached_tokens - cache_write_tokens

token_cost = (
    uncached * miss_rate
    + cached_tokens * hit_rate
    + write_5m * write_5m_rate
    + write_1h * write_1h_rate
    + completion_tokens * output_rate
) / 1_000_000

Сумма write_5m + write_1h должна совпадать с cache_write_tokens. Ставки берите из текущих тарифов провайдера. Формула даёт оценку стоимости токенов; сверяйте её с фактическими списаниями.

Если параметры кэша не переданы, Kimi автоматически использует срок хранения 5m. Для запросов с более длинными паузами рассмотрите "prompt_cache_options": {"mode": "implicit", "ttl": "1h"}.

В руководстве по кэшированию указано, что существующая запись сохраняет первоначальный срок хранения, или TTL. Передача 1h не продлевает действующую запись с 5m. Сохраняйте заголовки ответа Msh-Usage-Cache-Write-Tokens-5m и Msh-Usage-Cache-Write-Tokens-1h, чтобы видеть фактический объём записи для каждого срока.

Проверьте повторные запросы с типичным для вашего приложения неизменным префиксом — общей начальной частью запроса. Арифметический пример может оказаться слишком коротким для заметного эффекта: неполные блоки не записываются в кэш. Не меняйте уровень рассуждений внутри этой проверки, поскольку его смена делает попадания в кэш префикса недействительными.

В приложении с потоковыми ответами также задайте stream_options.include_usage=true. По руководству по потоковой выдаче собирайте фрагменты рассуждений, ответа и вызовов инструментов. Обработайте последний фрагмент со статистикой расхода, даже если его массив choices пуст.

Что проверить перед переключением рабочего трафика

Переводите небольшую долю трафика только после того, как новый маршрут пройдёт ваши существующие приёмочные тесты.

Для каждого сравнения используйте одну ревизию репозитория, одинаковые запросы, определения инструментов и команды тестирования. Проверяйте low, high и max в отдельных сессиях. Записывайте качество выполненной задачи, полное время ответа, категории входных токенов, общий выход, повторные запросы и фактическую стоимость.

Включите следующие сценарии в регрессионные проверки:

  • Диалог из нескольких ходов, где результат зависит от предыдущего ответа ассистента.
  • Вызов инструмента, после которого модель должна сформировать следующий ответ.
  • Потоковый вызов инструмента с JSON-аргументами, разбитыми на фрагменты.
  • Задачу, близкую к установленному лимиту генерации.
  • Фоновую задачу или работу субагента, где могла сохраниться привязка к K2.

Выберите самый низкий уровень рассуждений, который отвечает вашим требованиям к качеству и времени ответа. Если high не справляется с важной задачей, а max устойчиво проходит ваши проверки, оставьте max для этого класса задач.

Сохраняйте возможность возврата на K2 только пока аккаунту доступна эта модель. До периода отключения проверьте резервный маршрут, который не зависит от K2. Удалите старые идентификаторы K2 из запланированных заданий, маршрутов повторных запросов и настроек агентов.

Готовы оптимизировать LLM workflow?

Подключите единый API, управляйте ключами и контролируйте расходы на AI-модели в BetterToken.

Начать бесплатно