- Python 3.11+ и pip
- curl и jq
- виртуальное окружение (python -m venv)
- API-ключ Cerebras с доступом к Kimi K3
- пакеты openai, python-dotenv
- ~500 МБ свободного места
Cerebras — облачный провайдер инференса: он выполняет запросы к модели на своих ускорителях, а вы обращаетесь к нему по HTTP. Точные идентификаторы моделей, лимиты и цены в этом гайде не фиксируются — они меняются, сверьтесь с документацией Cerebras и Moonshot в момент настройки.

python3 --version.Проверка инструментов одной командой:
python3 --version && curl --version | head -n1 && jq --version
Пример: ожидаемый вывод — три строки, например Python 3.11.9, curl 8.5.0, jq-1.7.1. Если jq не найден: sudo apt install jq (Debian/Ubuntu) или brew install jq (macOS).
Зачем: без jq вы будете читать сырой JSON глазами, а без Python 3.11 не встанет актуальная версия SDK. Проверка на этом этапе отсекает половину будущих ошибок.
Что сделать: создать API-ключ в консоли Cerebras, положить его в переменную окружения и запросить список доступных моделей.
Зачем: пока вы не увидели идентификатор Kimi K3 в ответе GET /models, нет смысла писать код — все запросы упадут на 401 (неверный ключ) или 404 (неверный model).
Как проверить: команда ниже возвращает JSON со списком моделей; в нём должна быть строка с Kimi K3.
export CEREBRAS_API_KEY="csk-..." # значение из консоли провайдера
export CEREBRAS_BASE_URL="https://<эндпоинт-из-документации>/v1"
curl -s "$CEREBRAS_BASE_URL/models" \
-H "Authorization: Bearer $CEREBRAS_API_KEY" | jq -r '.data[].id'
Пример: вывод вида
<model-id-1>
<model-id-2>
Скопируйте строку с Kimi K3 целиком (без кавычек и пробелов) и сохраните её:
export MODEL_ID="<идентификатор-из-вывода-выше>"
Почему это работает: /models — стандартный эндпоинт OpenAI-совместимого API, он отдаёт список id, которые аккаунт имеет право вызывать. Если список пуст или запрос вернул 401 — проблема в ключе, а не в модели.
Сразу зафиксируйте ключ в файле .env (см. Шаг 2) и не коммитьте его в git.

Что сделать: развернуть рабочий каталог, поставить SDK и отправить первый диалоговый запрос к модели.
Зачем: openai — универсальный Python-клиент; он работает с любым OpenAI-совместимым эндпоинтом, если правильно указать base_url. Это избавляет от ручной сборки HTTP-запросов.
Как проверить: скрипт печатает ответ модели и строку с расходом токенов.
mkdir -p ~/kimi-cerebras && cd ~/kimi-cerebras
python3 -m venv .venv
source .venv/bin/activate # Windows/WSL: source .venv/bin/activate
pip install --upgrade pip
pip install openai python-dotenv
Создайте .env в каталоге проекта:
CEREBRAS_API_KEY=csk-...
CEREBRAS_BASE_URL=https://<эндпоинт-из-документации>/v1
MODEL_ID=<идентификатор-из-шага-1>
И .gitignore, чтобы ключ не утёк в репозиторий:
.env
.venv/
Файл chat.py:
import os
from dotenv import load_dotenv
from openai import OpenAI
load_dotenv()
client = OpenAI(
base_url=os.environ["CEREBRAS_BASE_URL"],
api_key=os.environ["CEREBRAS_API_KEY"],
)
resp = client.chat.completions.create(
model=os.environ["MODEL_ID"],
messages=[
{"role": "system", "content": "Отвечай кратко, только по делу."},
{"role": "user", "content": "Перечисли три шага проверки API-подключения."},
],
temperature=0.2,
max_tokens=256,
)
print(resp.choices[0].message.content)
print("tokens:", resp.usage.prompt_tokens, "+", resp.usage.completion_tokens)
Запуск и проверка:
python chat.py
Пример: на экране — нумерованный список из трёх пунктов и строка tokens: 42 + 118 (числа будут другими). Если видите текст ответа и строку tokens: — связка «ключ → эндпоинт → модель» собрана верно.
Тот же запрос без Python, для быстрой диагностики:
curl -s "$CEREBRAS_BASE_URL/chat/completions" \
-H "Authorization: Bearer $CEREBRAS_API_KEY" \
-H "Content-Type: application/json" \
-d "{\"model\":\"$MODEL_ID\",\"messages\":[{\"role\":\"user\",\"content\":\"ping\"}],\"max_tokens\":32}"
Ожидаемый результат — JSON с полем "choices" и непустым "message": {"content": ...}, а также блок "usage".
Почему это работает: путь /chat/completions и схема сообщений role/content совпадают со спецификацией OpenAI, поэтому один и тот же код подходит для разных провайдеров — меняется только base_url и model. Если вы позже захотите работать с Kimi напрямую, порядок получения ключей и разбор цен описан в гайде Как подключить Kimi K3.1 Pro через API: ключи, цены и настройка в OpenAI-совместимых клиентах.

Что сделать: прогнать приёмочный чек-лист, замерить время ответа и сравнить облачный вариант с локальным запуском той же модели.
Зачем: «ответ пришёл» и «сервис готов к работе» — разные вещи. Чек-лист фиксирует, что проверены авторизация, выбор модели и обработка ошибок.
Как проверить: все пункты ниже должны быть отмечены.
GET /models возвращает 200 и содержит нужный idpython chat.py печатает ответ и строку tokens: N + M.env, а .env — в .gitignoreЗамер времени делайте сами, на своём канале:
time python chat.py
Пример: real 0m2.431s. Готовых цифр по задержкам в этом гайде нет — они зависят от региона, размера промпта и текущей загрузки провайдера; сравнивайте только свои замеры между двумя запусками.
Локальный запуск — это когда модель крутится на вашем железе, а не у провайдера. Минимальная проверка локального рантайма (пример на Ollama — локальный сервер моделей с OpenAI-совместимым эндпоинтом на порту 11434):
curl -s http://localhost:11434/v1/models | jq -r '.data[].id'
Если команда вернула список — рантайм жив. Есть ли в нём веса Kimi K3 и хватает ли вам VRAM (видеопамяти) — сверьтесь с карточкой модели и документацией рантайма: требования к памяти там указаны для конкретной квантизации.
| Параметр | Cerebras (облако) | Локальный запуск (Ollama / llama.cpp) |
|---|---|---|
| Железо | не нужно, считает провайдер | GPU/CPU с достаточной памятью — сверьтесь с карточкой модели |
| Что нужно для старта | API-ключ и сеть | файлы весов на диске |
| Протокол | HTTP, OpenAI-совместимый | HTTP, OpenAI-совместимый (локальный порт) |
| Стоимость | по тарифу провайдера — сверьтесь с прайсом | железо и электричество |
| Данные | уходят провайдеру | не покидают машину |
| Масштабирование | ограничено лимитами аккаунта — сверьтесь с документацией | ограничено вашим железом |
Правило выбора: облако — когда нужен результат сегодня и нет GPU; локально — когда данные нельзя выпускать за периметр. Пошаговая настройка приватной автоматизации на локальной модели разобрана в гайде Как подключить n8n к локальной языковой модели: пошаговая настройка приватной автоматизации через Ollama.
Проблема. Запрос падает сразу после запуска, ответа модели нет
openai.AuthenticationError: Error code: 401 - Unauthorized.env лежит не в каталоге запуска, в значении остались кавычки или пробел, ключ отозван, либо export сделан в другом терминале.cd ~/kimi-cerebras && source .venv/bin/activate
python -c "import os; from dotenv import load_dotenv; load_dotenv(); print(os.environ['CEREBRAS_API_KEY'][:6])"
Если команда падает с KeyError — файла .env нет или в нём опечатка в имени переменной. Если печатает не те символы — пересоздайте ключ в консоли и обновите .env.
Проблема. Ключ верный, но модель не находится
openai.NotFoundError: Error code: 404 - model not foundMODEL_ID попало неполное имя, имя другой модели или лишние пробелы при копировании из списка.curl -s "$CEREBRAS_BASE_URL/models" -H "Authorization: Bearer $CEREBRAS_API_KEY" | jq -r '.data[].id'
MODEL_ID="$(curl -s "$CEREBRAS_BASE_URL/models" -H "Authorization: Bearer $CEREBRAS_API_KEY" | jq -r '.data[].id' | grep -i kimi | head -n1)"
echo "$MODEL_ID"
Затем пропишите это значение в .env и перезапустите python chat.py.
Проблема. Скрипт работает, но под нагрузкой начинает падать
openai.RateLimitError: Error code: 429 - rate limit exceededimport time
from openai import RateLimitError
for attempt in range(5):
try:
resp = client.chat.completions.create(
model=os.environ["MODEL_ID"],
messages=[{"role": "user", "content": "ping"}],
max_tokens=32,
)
break
except RateLimitError:
time.sleep(2 ** attempt) # 1s, 2s, 4s, 8s
Вы получили рабочий канал «ваш код → OpenAI-совместимый эндпоинт Cerebras → Kimi K3» и чек-лист, который подтверждает его работоспособность. Дальше перенесите chat.py в свой сервис, вынесите ключ в секрет-хранилище и сравните свои замеры с локальным запуском по таблице из Шага 3.
Нужна ли видеокарта, чтобы работать с Kimi K3 через Cerebras?
Нет. Вычисления идут на стороне провайдера, у вас достаточно Python и сетевого доступа. Видеокарта нужна только для локального варианта запуска.
Чем облачный запуск отличается от локального на практике?
Облако — это API-ключ и HTTP-запросы, локально — файлы весов и ваш собственный рантайм. Данные в облачном варианте уходят провайдеру, в локальном остаются на машине.
Подойдёт ли этот код для других OpenAI-совместимых клиентов и библиотек?
Да, если клиент умеет задавать base_url. Меняются только адрес эндпоинта и идентификатор модели, схема сообщений остаётся той же.
Сколько стоят запросы и какие у аккаунта лимиты?
Тарифы и лимиты задаёт провайдер и меняет их без предупреждения — сверьтесь с прайсом и разделом ограничений в документации Cerebras. Сравнить модели по возможностям и стоимости можно в обзоре ChatGPT, Claude, Gemini, DeepSeek: сравнение ИИ-ассистентов.