← Все гайды AI Release
EN Подписаться на @ai_release1

Как подключить Kimi K3.1 Pro через API: ключи, цены и настройка в OpenAI-совместимых клиентах

Обновлено: 24.10.2026 · AI Release · @ai_release1
Как подключить Kimi K3.1 Pro через API: ключи, цены и настройка в OpenAI-совместимых клиентах

TL;DR

Точных цен и идентификатора модели Kimi K3.1 Pro в исходных материалах канала нет — в гайде они вынесены в плейсхолдеры <id-модели-из-документации> и <цена-за-1M-токенов>: подставьте значения из документации провайдера, прежде чем считать бюджет.

Требования и подготовка

Иллюстрация к разделу «Требования и подготовка»
Иллюстрация к разделу «Требования и подготовка»

Шаг 1. Ключ, базовый URL и ID модели в переменных окружения

Что сделать: создайте ключ в личном кабинете провайдера и сохраните три значения в переменные окружения, чтобы не переписывать их в каждом запросе.

Зачем: один и тот же набор переменных используют и curl, и Python-скрипт, и конфиг клиента — при смене ключа правится одна строка.

export KIMI_API_KEY="<ваш-ключ>"
export KIMI_BASE_URL="https://<api-хоста-провайдера>/v1"
export KIMI_MODEL="<id-модели-из-документации>"

В PowerShell те же значения задаются так (для текущей сессии и постоянно):

$env:KIMI_API_KEY = "<ваш-ключ>"
setx KIMI_API_KEY "<ваш-ключ>"
setx KIMI_BASE_URL "https://<api-хоста-провайдера>/v1"

Чтобы переменные жили после перезапуска терминала, добавьте export-строки в ~/.bashrc или ~/.zshrc и выполните source ~/.bashrc.

Как проверить: выведите длину ключа и адреса — так видно, что переменная не пустая и в неё не попали кавычки.

printf 'key_len=%s\nbase=%s\nmodel=%s\n' "${#KIMI_API_KEY}" "$KIMI_BASE_URL" "$KIMI_MODEL"

Ожидаемый вывод (число будет своим):

key_len=48
base=https://<api-хоста-провайдера>/v1
model=<id-модели-из-документации>

Если key_len=0 — переменная не установлена в этом окне терминала; если длина равна длине строки с кавычками, ключ скопирован вместе с ними.

Пример: запрос списка доступных моделей — он же подтверждает, что ключ и базовый URL верны, и показывает точный ID модели.

curl -s "$KIMI_BASE_URL/models" -H "Authorization: Bearer $KIMI_API_KEY" | python3 -m json.tool

Успех — JSON с массивом data, где у каждой модели есть поля id и object. Скопируйте id нужной модели в KIMI_MODEL. Почему это работает: эндпоинт /models не расходует токены, поэтому его безопасно вызывать для диагностики.

Чек-лист перед следующим шагом:

Шаг 2. Первый запрос и настройка OpenAI-совместимых клиентов

Иллюстрация к разделу «Шаг 2. Первый запрос и настройка OpenAI-совместимых клиентов»
Иллюстрация к разделу «Шаг 2. Первый запрос и настройка OpenAI-совместимых клиентов»

Что сделать: отправьте минимальный запрос к /chat/completions, затем перенесите те же три значения в клиент.

Зачем: формат запроса и ответа совпадает с OpenAI API, поэтому один и тот же код работает и с curl, и с официальным SDK, и с любым клиентом, где есть поля «Base URL» и «API Key».

curl -s "$KIMI_BASE_URL/chat/completions" \
  -H "Authorization: Bearer $KIMI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "'"$KIMI_MODEL"'",
    "messages": [{"role": "user", "content": "Ответь одним словом: работает?"}],
    "max_tokens": 32,
    "temperature": 0
  }'

max_tokens ограничивает длину ответа (32 токена — примерно одно-два предложения), temperature: 0 убирает случайность — так проще сравнивать ответы при проверке.

Тот же вызов через Python SDK:

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["KIMI_API_KEY"],
    base_url=os.environ["KIMI_BASE_URL"],
)

resp = client.chat.completions.create(
    model=os.environ["KIMI_MODEL"],
    messages=[{"role": "user", "content": "Ответь одним словом: работает?"}],
    max_tokens=32,
)
print(resp.choices[0].message.content)
print(resp.usage.prompt_tokens, resp.usage.completion_tokens)

Успешный запуск печатает текст ответа и два числа, например:

работает
18 5

usage — это и есть счётчик расходов: стоимость запроса = prompt_tokens × <цена-за-1M-токенов> / 1 000 000 + completion_tokens × цена выходных токенов / 1 000 000.

Настройка в клиенте. В GUI-клиентах (n8n, Chatbox, Cursor, Claude Code) заполняются те же четыре поля:

Поле в клиентеЗначениеОткуда взять
Provider / API typeOpenAI-compatibleнастройки клиента
Base URL`https://<api-хоста-провайдера>/v1`документация провайдера
API Key`<ваш-ключ>`личный кабинет
Model`<id-модели-из-документации>`ответ `/models`
Max tokens / Contextлимит из документациидокументация провайдера

Конфиг в виде YAML, если клиент читает файл настроек:

provider: openai-compatible
base_url: https://<api-хоста-провайдера>/v1
api_key_env: KIMI_API_KEY
model: <id-модели-из-документации>
max_tokens: 1024

Пример: в интерфейсе n8n узел OpenAI создаётся с «Base URL» = ваш адрес, после чего узел возвращает ответ модели без дополнительного кода. Если нужно переключать несколько провайдеров за одним адресом, схема с роутером разобрана в гайде Как объединить несколько ИИ-провайдеров в один API, а вариант запуска такой модели внутри Claude Code — в материале Как подключить локальную модель к Claude Code.

Как проверить: сохраните скрипт в check_kimi.py и запустите.

python3 check_kimi.py

Признак успеха: напечатан текст ответа и два неотрицательных числа в usage. Если клиент отдаёт пустой ответ — сравните его Base URL с рабочим $KIMI_BASE_URL: лишний или недостающий /v1 в конце адреса — самая частая причина 404.

Шаг 3. Проверка работы и финальный результат

Иллюстрация к разделу «Шаг 3. Проверка работы и финальный результат»
Иллюстрация к разделу «Шаг 3. Проверка работы и финальный результат»

Что сделать: прогоните три проверки — короткий ответ, длинный вход и повторный запрос — и зафиксируйте расход по usage.

Зачем: короткий запрос проверяет авторизацию, длинный — реальный лимит контекста (сколько токенов модель принимает за один раз), повторный — стабильность и корректность тарификации.

import os
from openai import OpenAI

client = OpenAI(api_key=os.environ["KIMI_API_KEY"], base_url=os.environ["KIMI_BASE_URL"])

long_text = "Проверка контекста. " * 200
resp = client.chat.completions.create(
    model=os.environ["KIMI_MODEL"],
    messages=[{"role": "user", "content": long_text + " Сколько слов в предыдущем предложении?"}],
    max_tokens=64,
)
print(resp.choices[0].message.content)
print("prompt_tokens:", resp.usage.prompt_tokens)

Как проверить: prompt_tokens должен быть заметно больше, чем в Шаге 2, а ответ — осмысленным. Если приходит ошибка про длину контекста, уменьшите long_text вдвое: значит, вы упёрлись в лимит модели, а не в ошибку ключа. Итоговый расход сверьте в разделе «Биллинг» личного кабинета — задержка отображения зависит от провайдера, сверьтесь с документацией.

Финальный результат: в терминале воспроизводится ответ модели, в клиенте с теми же тремя настройками — тоже, суммы в биллинге совпадают с расчётом по usage.

Возможные проблемы и решения

Проблема. Запрос возвращает 401 сразу после копирования ключа

Проблема. Ошибка 404 на /chat/completions

Проблема. Ответ приходит, но запросы падают при массовой отправке

Резюме и следующие шаги

Три значения — базовый URL, ключ и ID модели — превращают Kimi K3.1 Pro в обычного OpenAI-совместимого провайдера, поэтому настройка сводится к переменным окружения и одному тестовому запросу. Дальше перенесите эти же поля в свой клиент, добавьте учёт usage и сверьте тарифы в кабинете перед нагрузочными тестами.

FAQ

Какой именно ID модели указывать для Kimi K3.1 Pro?

Точный идентификатор берите из ответа GET /v1/models или из документации провайдера: в наших материалах он не публиковался, а придуманный ID даёт ошибку model_not_found.

Сколько стоит один запрос?

Считайте по формуле: prompt_tokens × цена входных токенов + completion_tokens × цена выходных, делённые на 1 000 000. Цены за 1M токенов в исходных материалах канала не приводились — сверьтесь с документацией и личным кабинетом.

Можно ли использовать ключ в n8n, Cursor или Claude Code?

Да, если в клиенте есть поля «Base URL» и «API Key»: укажите адрес с /v1, ключ и ID модели. Клиенты без поддержки кастомного Base URL работать с этим эндпоинтом не будут.

Почему в curl всё работает, а в Python — 401?

Скрипт запускается из другого окна или из IDE, где переменные окружения не заданы. Проверьте os.environ.get("KIMI_API_KEY") внутри скрипта; если вернулось None, задайте переменную в этом окружении или используйте файл .env с явной загрузкой.

🤖 Кратко для ИИ