curl 8.x; Python 3.10+ и пакет openai 1.x; текстовый редактор для файла .env
curl 8.x: curl --version должен вывести строку вида curl 8.5.0.python3 --version → Python 3.11.9 (версия может отличаться, главное — не ниже 3.10)..venv и зависимости.Что сделать: создать рабочую папку и изолированное окружение Python, затем поставить SDK.
mkdir -p ~/gpt6-astra && cd ~/gpt6-astra
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install --upgrade openai
python -c "import openai; print(openai.__version__)"
Зачем: виртуальное окружение (venv — отдельная папка с пакетами) не даёт SDK конфликтовать с системным Python; команда python -c сразу показывает, что пакет виден интерпретатору.
Как проверить: последняя строка печатает номер версии, например 1.55.3. Если вы видите ModuleNotFoundError: No module named 'openai' — окружение не активировано, повторите source .venv/bin/activate.
Пример: после активации приглашение терминала меняется на (.venv) user@host:~/gpt6-astra$ — это признак, что pip ставит пакеты внутрь проекта, а не в систему.
Перед покупкой тарифа определитесь с моделью: у Astra и Sol разные сценарии, разбор — в гайде GPT-6 Astra или GPT-6.1 Sol: что выбрать для работы, чата и API.
Что сделать: в личном кабинете открыть раздел с API-ключами (обычно API Keys или Developer → Keys), создать новый ключ с именем проекта, например gpt6-astra-test, и сразу скопировать значение в менеджер паролей.
Зачем: ключ — единственный credential (учётные данные), которым клиент подтверждает право на запросы. Полное значение показывается один раз: закрыли окно — придётся генерировать новый ключ.
Пример: в списке ключей появляется строка gpt6-astra-test · sk-...Cr9A · создан сегодня. Копируйте целиком, включая префикс sk-, — обрезанный ключ даст ошибку 401.
Перед оплатой выпишите по своему тарифу пять параметров — их достаточно, чтобы считать стоимость запроса:
Конкретные суммы в этом гайде не приводятся как факт — их смотрите в прайсе кабинета; ориентиры по тарифам и оплате собраны в гайде Сколько стоит GPT-6.1 Sol и как получить доступ: тарифы и способы оплаты.
Что сделать: положить ключ и адрес шлюза в переменные окружения и запросить список доступных моделей.
export OPENAI_API_KEY="sk-ваш-ключ"
export OPENAI_BASE_URL="<base-url-из-кабинета>"
curl -s "$OPENAI_BASE_URL/models" -H "Authorization: Bearer $OPENAI_API_KEY"
Зачем: endpoint /models — самый дешёвый способ проверить связку «ключ + адрес» до того, как вы потратите токены на генерацию. Плейсхолдер <base-url-из-кабинета> заменяйте на адрес вида https://api.<провайдер>.com/v1 — точный путь указан в документации, без него запрос уйдёт «в никуда».
Как проверить: ответ — JSON с массивом data, внутри объекты с полем "id". Найдите там идентификатор Astra; если списка нет или пришёл 401, см. раздел проблем.

Что сделать: зафиксировать три параметра подключения в одном файле .env, чтобы не переписывать их в каждом клиенте.
cd ~/gpt6-astra
cat > .env <<'EOF'
OPENAI_API_KEY=sk-ваш-ключ
OPENAI_BASE_URL=<base-url-из-кабинета>
MODEL_ID=gpt-6-astra
EOF
Зачем: .env — обычный текстовый файл с переменными вида КЛЮЧ=значение; из него читают и скрипты, и многие GUI-клиенты. Идентификатор модели в примере — gpt-6-astra; точное значение скопируйте из поля "id" в ответе шага 1, иначе получите ошибку «модель не найдена».
| Переменная | Пример значения | Зачем нужна |
|---|---|---|
| `OPENAI_API_KEY` | `sk-...Cr9A` | авторизация каждого запроса |
| `OPENAI_BASE_URL` | `<base-url-из-кабинета>` | адрес API-шлюза вместо адреса по умолчанию |
| `MODEL_ID` | `gpt-6-astra` | какая модель обрабатывает запрос |
Что сделать: подключиться через curl — это базовая проверка, что API отвечает, без прослоек SDK.
curl -s "$OPENAI_BASE_URL/chat/completions" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"'"$MODEL_ID"'","messages":[{"role":"user","content":"Ответь одним словом: столица Франции"}],"max_tokens":16}'
Зачем: запрос идёт на /chat/completions — стандартный OpenAI-совместимый путь; если он отвечает, проблема в клиенте, а не в ключе. max_tokens ограничивает длину ответа, чтобы тест стоил копейки.
Как проверить: в ответе есть "choices" с полем "content", например "Париж", и блок "usage" с числами prompt_tokens / completion_tokens — это и есть списанные токены.
Что сделать: тот же вызов из Python — так вы подключаете модель в своих скриптах.
import os
from dotenv import load_dotenv
from openai import OpenAI
load_dotenv()
client = OpenAI(
api_key=os.environ["OPENAI_API_KEY"],
base_url=os.environ["OPENAI_BASE_URL"],
)
resp = client.chat.completions.create(
model=os.environ["MODEL_ID"],
messages=[{"role": "user", "content": "Объясни в одном предложении, что такое API"}],
)
print(resp.choices[0].message.content)
print(resp.usage)
Установите зависимости: pip install python-dotenv. Параметр base_url перенаправляет SDK с адреса OpenAI на шлюз провайдера — поэтому один и тот же код работает с Astra без правок.
Как проверить: python check.py печатает одну строку текста и объект usage вида CompletionUsage(prompt_tokens=..., completion_tokens=..., total_tokens=...).
Что сделать: в GUI-клиенте (чат, IDE-плагин, обёртка вроде Open WebUI) найти настройки провайдера и выбрать тип «OpenAI-совместимый API», затем заполнить три поля.
Base URL / API Host → <base-url-из-кабинета>API Key → ваш sk-...Model → gpt-6-astra (из списка /models)Зачем: такие клиенты не знают про конкретного провайдера, но умеют говорить на стандартном протоколе OpenAI; подстановка Base URL — единственное, что их перенастраивает. Схема ровно та же, что при подключении локальной модели к Claude Code через OpenAI-совместимый API — см. разбор с llama-server.
Как проверить: отправьте в чате клиента «привет» — ответ должен прийти без красной плашки об ошибке, а в логах клиента виден POST /chat/completions со статусом 200.

Что сделать: прогнать три теста — обычный ответ, стриминг и обработку ошибки — и сверить usage с прайсом.
curl -sN "$OPENAI_BASE_URL/chat/completions" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"'"$MODEL_ID"'","stream":true,"messages":[{"role":"user","content":"Перечисли 3 факта о Луне"}]}'
Зачем: флаг -N отключает буферизацию вывода, а "stream":true включает потоковую отдачу — так вы видите, что клиент получает текст по частям, а не одним куском после паузы.
Как проверить: в терминале побежали строки data: {"choices":[{"delta":{"content":"1"}}]}, поток закрывается строкой data: [DONE]. Если [DONE] нет и соединение висит — проверьте таймауты прокси.
Финальный чек-лист успешной настройки:
/models отдаёт 200 и содержит идентификатор Astracurl на /chat/completions возвращает choices[0].message.contentusage.total_tokens > 0200Пример: в разделе Usage кабинета появляется запись за сегодня с числом запросов и токенов. Умножьте токены на цену из вашего тарифа (шаг 1) — получите стоимость теста; так вы заранее оцениваете бюджет боевой нагрузки.
Проблема. Запрос отклонён, хотя ключ скопирован
{"error":{"message":"Incorrect API key provided: sk-...","type":"invalid_request_error","code":"invalid_api_key"}}.env, затем проверьте, что читается ровно одно значение:python -c "import os,dotenv;dotenv.load_dotenv();print(repr(os.environ['OPENAI_API_KEY'][:6]), len(os.environ['OPENAI_API_KEY']))"
Ожидаемо: 'sk-...' и длина больше 20. Если видите 'sk-ва' — в файле лишние кавычки.
Проблема. Модель не находится
{"error":{"message":"The model 'gpt-6-astra' does not exist or you do not have access to it.","type":"invalid_request_error","code":"model_not_found"}}MODEL_ID не совпадает с тем, что отдаёт /models, либо модель не входит в ваш тариф./models и подставьте его:curl -s "$OPENAI_BASE_URL/models" -H "Authorization: Bearer $OPENAI_API_KEY" | grep -o '"id":"[^"]*"'
Если нужного id в списке нет — вопрос к тарифу, а не к коду.
Проблема. Скрипт падает после серии успешных запросов
openai.RateLimitError: Error code: 429 - {'error': {'message': 'Rate limit reached for requests', 'type': 'requests', 'code': 'rate_limit_exceeded'}}import time, openai
for attempt in range(5):
try:
resp = client.chat.completions.create(model=os.environ["MODEL_ID"],
messages=[{"role": "user", "content": "тест"}])
break
except openai.RateLimitError:
time.sleep(2 ** attempt)
Если 429 повторяется и при одиночных запросах — поднимайте план или снижайте параллельность.
Вы получили ключ, зафиксировали OPENAI_API_KEY, OPENAI_BASE_URL, MODEL_ID в .env и подтвердили работу модели тремя проверками: /models, curl-запрос и ответ в GUI-клиенте. Дальше перенесите ключ в секреты CI/сервера, добавьте лимит max_tokens и логирование usage, а при выборе между моделями сверьтесь со сравнительным гайдом.
Как получить API-ключ GPT-6 Astra?
Создать в личном кабинете в разделе API Keys, назвать проект и сразу скопировать значение sk-... в менеджер паролей: повторно полный ключ не показывается, только перевыпуск.
Какой Base URL указывать для GPT-6 Astra?
Тот, что указан в кабинете или документации провайдера, обычно с суффиксом /v1. В гайде он обозначен как <base-url-из-кабинета> — подставьте своё значение в OPENAI_BASE_URL.
Можно ли подключить GPT-6 Astra к обычному чат-клиенту?
Да, если клиент поддерживает OpenAI-совместимый API: в настройках провайдера укажите Base URL, API Key и идентификатор модели из /models.
Почему приходит ошибка 401, хотя ключ новый?
Ключ обрезан или отозван, либо в переменную окружения попали кавычки и пробелы — перевыпустите ключ, перезапишите .env и проверьте длину значения командой python -c "..." из раздела проблем.