Moonshot API по-прежнему совместим с интерфейсом OpenAI, но в 2026 году изменились две вещи: вход в консоль переехал на открытую платформу Kimi API, а вся линейка moonshot-v1 была отключена 31 августа. Старые проекты, копирующие прежнюю конфигурацию, обычно получают не 401, а 404 model_not_found. Статья идёт по порядку «выбрать сайт — выбрать модель — прогнать вызов — выполнить миграцию»; модели и цены — по странице цены на модели.

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

1. Вход изменился, домен API — нет

platform.moonshot.cn теперь перенаправляет на platform.kimi.com, международный platform.moonshot.ai — на platform.kimi.ai. Консоль, аккаунт, баланс и ключи управляются на открытой платформе Kimi API.

Домены API-запросов остались прежними: китайский сайт https://api.moonshot.cn, международный https://api.moonshot.ai. Ключ китайского сайта работает только с китайским доменом, международный — аналогично. Если base_url в коде не задан, запрос может уйти в OpenAI или другого поставщика, и типичная ошибка — model_not_found. Запоминайте отдельно «адрес консоли» и «адрес API» — так миграция не запутается.

2. Три совместимых протокола и Base URL

  • OpenAI Chat Completions: Base URL https://api.moonshot.cn/v1, путь /chat/completions.
  • OpenAI Responses: тот же Base URL, путь /responses.
  • Anthropic Messages: Base URL https://api.moonshot.cn/anthropic, путь /v1/messages.
  • Список моделей: GET https://api.moonshot.cn/v1/models.

На международном сайте домен меняется на api.moonshot.ai, пути остаются. В OpenAI SDK base_url указывается до /v1, SDK сам добавляет путь; в curl нужно писать полный путь. Вход Anthropic не имеет суффикса /v1, в отличие от входа OpenAI. Документация требует OpenAI SDK версии 1.0.0 и выше, Python 3.8+ или Node.js 18+.

3. Как выбрать актуальное семейство моделей

Модель Контекст Подходящие задачи Примечание
kimi-k3 1M Сложные рассуждения, длинные документы, агенты, работа со знаниями reasoning_effort по умолчанию max
kimi-k2.7-code 256K Генерация кода, вопросы по репозиторию, кодовые агенты Рассуждение всегда включено, reasoning_effort не поддерживается
kimi-k2.7-code-highspeed 256K Дополнение с низкой задержкой, интерактивное кодирование Ускоренная версия той же модели, вывод быстрее
kimi-k2.6 256K Общий диалог, извлечение, мультимодальность Поддерживает режимы с рассуждением и без

Если сомневаетесь, начните с kimi-k3; для простой классификации и извлечения в фиксированном формате часто лучше kimi-k2.6; кодовые задачи — уже K2.7 Code.

Самый частый источник ошибок — параметры сэмплирования. Температура текущих моделей фиксирована: K3 и K2.7 Code — 1.0, K2.6 — 1.0 в режиме рассуждения и 0.6 без него. Не передавайте temperature явно: нефиксированное значение вызовет ошибку. top_p также фиксирован на 0.95 и не настраивается.

4. Первый вызов через curl

export MOONSHOT_API_KEY="ваш ключ"

curl "https://api.moonshot.cn/v1/chat/completions" \
  -H "Authorization: Bearer $MOONSHOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "kimi-k3",
    "messages": [
      {"role": "user", "content": "Ответьте только: подключение успешно"}
    ],
    "max_completion_tokens": 64
  }'

Если вернулся 200 и ожидаемое содержимое, значит ключ, сайт, имя модели и путь совпали. При 401 сначала проверьте совместимость сайта и ключа; при 404 — имя модели, /v1 и не отключена ли модель; при 400 — упоминание контекста или лимита вывода в тексте ошибки. Некоторые интеграции предъявляют особые требования к имени модели, например Claude Code может ожидать kimi-k3[1m]; ориентируйтесь на документацию интеграции.

5. Python SDK и стриминг

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["MOONSHOT_API_KEY"],
    base_url="https://api.moonshot.cn/v1",
)

stream = client.chat.completions.create(
    model="kimi-k3",
    messages=[{"role": "user", "content": "Назовите три причины выбрать API-шлюз"}],
    max_completion_tokens=512,
    stream=True,
    stream_options={"include_usage": True},
)

for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")
    if chunk.usage:
        print("\nРасход: ", chunk.usage)

Стриминговый ответ — SSE, каждая строка начинается с data: и завершается data: [DONE]. После включения include_usage перед завершением приходит дополнительный блок с пустым choices и только usage; при обрыве соединения этот блок может не дойти, поэтому в продакшене учёт нужно вести на сервере.

В многораундовом диалоге и вызове инструментов учитывайте содержимое рассуждений. У K3 результат рассуждения находится в reasoning_content, у K2.x есть аналогичное поле; при возврате сообщения assistant его нужно передавать как есть. K3 управляет интенсивностью через верхнеуровневый reasoning_effort; у K2.x параметр thinking передаётся через extra_body. Не отправляйте оба одновременно.

6. Миграция с moonshot-v1

Старые модели отключены, их вызов возвращает model_not_found. Текущие замены приведены ниже; точный список — в официальной документации.

Старая модель Рекомендуемая замена Что учесть
moonshot-v1-8k/32k/128k/auto kimi-k2.6 или kimi-k3 Больше нет деления по 8K/32K/128K в имени
moonshot-v1-*-vision-preview kimi-k3 или kimi-k2.6 Изображения передаются блоком image_url
Семейство kimi-k2 kimi-k3 Отключено 25.05.2026
kimi-k2.5 kimi-k3 Отключено 31.08.2026
kimi-latest kimi-k3 Отключено 28.01.2026

Шаги миграции:

  1. Найдите по всему коду и конфигурациям старые имена моделей и base_url, составьте таблицу замен.
  2. Измените base_url, определите китайский или международный сайт; при смене сайта замените и ключ.
  3. Замените имена моделей: по умолчанию kimi-k3, для коротких задач с чувствительной стоимостью оцените kimi-k2.6.
  4. Замените max_tokens на max_completion_tokens. У K3 по умолчанию 131072, предел вывода — 1048576 минус длина входа; у K2 предел около 256K минус длина входа.
  5. Удалите пользовательские temperature и top_p, используйте фиксированные значения модели.
  6. Замените старую настройку thinking на reasoning_effort у K3; у K2.x передавайте thinking через extra_body.
  7. Переведите мультимодальный контент на блоки text, image_url, video_url.
  8. Добавьте в стриминговые запросы stream_options={"include_usage": True}.
  9. Прогоните регрессию на той же партии реальных задач, фиксируя качество, задержку, finish_reason и расход; выпускайте канареечно с переключателем отката.

Не переключайте всё сразу. Сначала тестовая среда, затем низкорисковые сервисы, в конце — ключевые цепочки. Каждый шаг должен позволять откат.

Each step must allow rollback.

7. Чек-лист перед запуском

  • Вызовите GET /v1/models тем же ключом и убедитесь, что целевая модель в списке.
  • Отправьте минимальный нестриминговый запрос и проверьте 200 и корректное содержимое.
  • Отправьте стриминговый запрос и убедитесь, что приходят инкрементальные фрагменты и финальный usage.
  • Проверьте finish_reason: нормальное завершение — stop, достижение лимита вывода — length.
  • Сравните качество, задержку и расход токенов до и после миграции на фиксированном наборе.
  • Проверьте задержку при 429, тайм-ауты и предел повторов, чтобы автоматические повторы SDK не усиливали параллелизм.
  • Записывайте в журнал время запроса, имя модели, код состояния и расход — для диагностики и сверки.

8. Справочник ошибок

  • 401 invalid_authentication_error: ключ недействителен, удалён или смешаны ключи китайского и международного сайтов. Ключи открытой платформы и Kimi Code также несовместимы.
  • 403 permission_denied_error: текущий выходной IP не входит в белый список или у проекта недостаточно прав.
  • 404 model_not_found: base_url не указывает на Moonshot, неверное имя модели, вызов отключённой модели или пропущен /v1.
  • 400 invalid_request_error: вход плюс лимит вывода превышают контекст или передан неподдерживаемый параметр, например пользовательская температура.
  • 400 content_filter: вход или вывод нарушил политику безопасности контента; скорректируйте промпт или материалы.
  • 429: engine_overloaded_error — сервер перегружен; rate_limit_reached_error — лимит организации; exceeded_current_quota_error — чаще недостаток баланса.
  • 504 или тайм-аут соединения: нестриминговый длинный запрос ждал слишком долго; для длинных текстов и агентов используйте стриминг.

OpenAI SDK по умолчанию повторяет неудачные запросы дважды, поэтому один вызов может превратиться в три запроса. Аккаунтам с низкой квотой при 429 следует сначала снизить число повторов и параллелизм, затем разбираться с квотой.

Часто задаваемые вопросы

Можно ли ещё использовать moonshot-v1?

Нет. Вся линейка moonshot-v1 отключена 31 августа 2026 года, вызов возвращает model_not_found. Переходите на kimi-k3 или kimi-k2.6.

До какого уровня указывать Base URL?

В OpenAI SDK — https://api.moonshot.cn/v1, без /chat/completions; в curl — полный /v1/chat/completions; в Anthropic SDK — https://api.moonshot.cn/anthropic.

Почему передача temperature вызывает ошибку?

Температура текущих моделей фиксирована: у K3 и K2.7 Code — 1.0, у K2.6 зависит от режима рассуждения. Не передавайте своё значение; top_p также фиксирован на 0.95.

Может ли ключ китайского сайта вызывать международный?

Нет. Аккаунты, балансы и ключи двух сайтов изолированы по регионам, смешивание обычно даёт 401. При смене сайта меняйте ключ, Base URL и имя модели вместе.

Почему после стриминга нет usage?

Нужно явно задать stream_options={"include_usage": True}. Даже с этой настройкой при обрыве соединения последний блок может не дойти; в продакшене расход считайте на сервере.

Что дальше

Создайте тестовый ключ в ZSQH AI Gateway, прогоните по одной реальной задаче на kimi-k3 и kimi-k2.6, убедитесь в работоспособности цепочки и подключайте продакшен. Доступные модели и биллинг — на странице цены на модели.

Похожие материалы: