При ошибке Kimi API сначала смотрите на три вещи: HTTP-код состояния, error.type и request_id. Один и тот же 429 может означать перегрузку сервера, ограничение организации или недостаток средств; один и тот же 401 — неверный ключ или смешивание китайского и международного сайтов. Сначала классифицируйте, потом меняйте код.
Ниже разобраны четыре класса — 401, 404, 429 и тайм-ауты: причины, порядок диагностики и готовый код задержек. Модели и цены — на странице тарифов.
Примечание: Moonshot и Kimi — товарные знаки соответствующих правообладателей. Типы ошибок, правила ограничения и поведение интерфейсов могут меняться; примеры отражают распространённую ситуацию на октябрь 2026 года, окончательно действует официальная документация.
1. Быстрая таблица кодов
| Код | Тип ошибки | Частый смысл | Что делать |
|---|---|---|---|
| 400 | invalid_request_error |
Неверный параметр, слишком длинный контекст, превышен лимит вывода | Исправить запрос |
| 400 | content_filter |
Вход или выход нарушил контентную политику | Скорректировать промпт |
| 401 | invalid_authentication_error |
Недействительный ключ, несовпадение региона | Исправить учётные данные |
| 401 | incorrect_api_key_error |
Ключ отсутствует или неверен | Исправить учётные данные |
| 403 | permission_denied_error |
Интерфейс закрыт, IP-белый список, права или баланс | Проверить права и баланс |
| 404 | resource_not_found_error |
Неверное имя модели или путь | Свериться со списком моделей |
| 429 | engine_overloaded_error |
Перегрузка сервера | Задержка и повтор |
| 429 | rate_limit_reached_error |
Превышены параллелизм, RPM, TPM или TPD | Снизить скорость или поднять квоту |
| 429 | exceeded_current_quota_error |
Задолженность, недостаток средств, истёк ваучер | Пополнить баланс |
| 499 | client_closed_request |
Клиент или прокси закрыл соединение раньше | Проверить тайм-ауты и поток |
| 500 | server_error |
Внутренняя ошибка сервера | Задержка и повтор |
| 503 | server_unavailable |
Сервис временно недоступен | Задержка и повтор |
| 504 | Gateway Time-out |
Долгое ожидание длинного запроса | Перейти на потоковый режим |
Недостаток средств на разных входах может проявляться как 403 или 429, поэтому ориентируйтесь не только на код, но и на error.type. В журнале фиксируйте время, код, тип ошибки, имя модели и request_id; не записывайте полный ключ и чувствительное содержимое.
2. 401: сначала регион, потом ключ
- Не указан ли ключ китайского сайта на международном адресе или наоборот. Аккаунты, балансы и ключи двух сайтов полностью независимы.
- Не смешаны ли ключи разных продуктов: открытая платформа, Kimi Code и подписки.
- Нет ли в ключе пробелов, переводов строки или лишних кавычек.
- Действительно ли загружены переменные окружения — можно вывести только префикс ключа.
- Не удалён ли ключ, не ротирован ли он и есть ли у него права на текущий проект.
- Правильный ли заголовок
Authorization: Bearer <key>и путь/v1/chat/completions.
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-k2.6",
"max_completion_tokens": 64,
"messages": [{"role": "user", "content": "Ответь только OK"}]
}'
Если команда возвращает 200, ключ, регион и имя модели верны. Если 401 сохраняется, проверьте другой заведомо рабочий ключ, чтобы отделить проблему ключа от конфигурации шлюза.
3. 404: чаще всего ошибаются в имени модели и base_url
404 не обязательно означает, что модель снята с поддержки. Четыре частые причины:
- При использовании OpenAI SDK не задан
base_url, запрос ушёл на стандартный адрес OpenAI и вернул отсутствие модели. - Опечатка в имени модели или использование версии, к которой у аккаунта нет доступа.
- Лишний или пропущенный
/v1, либо чат-интерфейс указан по другому пути. - Разные имена моделей и права на китайском и международном сайтах.
Сначала получите список моделей тем же ключом и проверьте, что доступно аккаунту:
curl "https://api.moonshot.cn/v1/models" \
-H "Authorization: Bearer $MOONSHOT_API_KEY"
Если модели нет в списке, не угадывайте. Доступность модели определяется фактическим ответом аккаунта и страницей тарифов. Если список возвращается, а чат-интерфейс всё равно даёт 404, проверьте, не пропущен ли /v1 и не склеивает ли клиент base_url с полным путём повторно.
4. 429: три типа и разная обработка
error.type |
Смысл | Можно ли повторять | Действие |
|---|---|---|---|
engine_overloaded_error |
Перегрузка сервера | Да | Задержка по Retry-After, снизить параллелизм |
rate_limit_reached_error |
Превышены параллелизм, RPM, TPM или TPD организации | Частично | Снизить скорость, разделить ключи, повысить уровень |
exceeded_current_quota_error |
Задолженность, недостаток средств, истёкший ваучер | Нет | Пополнить баланс или проверить счета |
При превышении TPD обычно остаётся ждать следующего дня или повышать квоту; повторять бессмысленно. Прерванные запросом 429 обычно не тарифицируются, но успешный повтор тарифицируется как обычный; не повторяйте бесконечно из страха расходов и не считайте, что 429 уже списал средства. OpenAI SDK по умолчанию повторяет автоматически и может превратить один 429 в несколько запросов; в продакшене явно задайте max_retries=0 и используйте собственную логику задержки.
import random
import time
from openai import OpenAI, RateLimitError
client = OpenAI(
api_key="ваш ключ",
base_url="https://api.moonshot.cn/v1",
max_retries=0,
)
def ask(prompt: str, retries: int = 4) -> str:
for attempt in range(retries):
try:
resp = client.chat.completions.create(
model="kimi-k2.6",
messages=[{"role": "user", "content": prompt}],
max_completion_tokens=1024,
)
return resp.choices[0].message.content
except RateLimitError as exc:
body = exc.body or {}
etype = (body.get("error") or {}).get("type", "")
if etype == "exceeded_current_quota_error":
raise RuntimeError("Недостаточно средств или квоты, пополните баланс")
wait = min(2 ** attempt, 20) + random.random()
print(etype, "ожидание", round(wait, 1), "с")
time.sleep(wait)
raise RuntimeError("Попытки исчерпаны")
Повторы подходят только для временных ошибок. Если операция уже могла дать побочный эффект, проверьте состояние по идемпотентному ключу или запросу статуса, прежде чем отправлять повторно.
5. Тайм-ауты и 504
Длинная генерация, анализ больших документов и кодовые агенты чаще всего сталкиваются с тайм-аутами. Порядок действий:
- Переведите непотоковый режим в
stream=True, чтобы соединение постоянно получало данные. - Задайте разумные тайм-ауты соединения и чтения, не полагайтесь на значения SDK по умолчанию.
- Проверьте, не обрывают ли соединение корпоративный прокси, шлюз и локальные маршрутизаторы; это может проявляться как 499.
- Ограничивайте длину одного вывода через
max_completion_tokens, сверхдлинные задачи делите на части. - Записывайте request ID и длительность каждого тайм-аута, чтобы отличить медленную модель, сеть и шлюз.
stream = client.chat.completions.create(
model="kimi-k2.6",
messages=[{"role": "user", "content": "Составь чек-лист развёртывания"}],
max_completion_tokens=2048,
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="")
Потоковый режим не снижает цену токена, но заметно сокращает потери от «ожидания тайм-аута и повтора». Тайм-аут соединения можно сделать короче, тайм-аут чтения — по максимальному времени генерации; для потока не используйте тайм-аут чтения непотокового режима, иначе клиент оборвёт нормальную генерацию.
6. Таблица порядка диагностики
- Зафиксируйте код состояния,
error.type,request_id, имя модели и время. - Для 401 и 403 проверьте регион, ключ, продукт, права и баланс.
- Для 404 проверьте
base_url, имя модели и права аккаунта, сверьтесь со списком моделей. - Для 400 проверьте длину контекста, лимит вывода, формат файла и контентную безопасность.
- Для 429 разделите по
error.typeна перегрузку, ограничение и задолженность. - Для 499 и 504 проверьте поток, тайм-ауты, прокси и поддержание соединения.
- Для 500 и 503 используйте задержку и повтор; при постоянном повторении передайте поставщику
request_id. - После каждого сбоя дополняйте мониторинг и оповещения, не ждите отзывов пользователей.
Частые вопросы
Чем 429 отличается от 503?
429 может означать как перегрузку сервера, так и исчерпание квоты или баланса аккаунта; сначала смотрите error.type. 503 означает временную недоступность сервиса и обычно решается задержкой и повтором. Общее правило — не повторять с фиксированным интервалом.
Что делать, если после пополнения всё равно 401?
Убедитесь, что пополнение и ключ относятся к одному региону и одному продукту. Проверьте новый созданный ключ, чтобы исключить удаление старого ключа или кэш переменных окружения.
Какая ошибка будет при слишком длинном контексте?
Обычно 400 invalid_request_error с сообщением о слишком длинном входном токене. Сократите вход, обрежьте историю или перейдите на модель с большим контекстом.
Стоит ли включать автоматические повторы SDK?
Можно, но с верхним пределом. Автоматические повторы могут усилить 429; в продакшене лучше отключить их и реализовать экспоненциальную задержку и оповещения по типам ошибок самостоятельно.
Как отличить ошибку шлюза от ошибки официального API?
Отправьте один и тот же запрос напрямую и через шлюз, сравните код состояния, error.type и request_id. Так быстрее понять, где проблема: upstream, сеть, ключ или конфигурация шлюза.
Что дальше
Создайте тестовый ключ в ZSQH AI Gateway, отработайте по одному разу 401, 404, 429 и тайм-аут, затем подключите производственный мониторинг. Доступность моделей и цены — на странице тарифов.
Читайте также:
