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