Артём ИксановЛонгриды
Технический трек

Доступ к GPT и Claude без VPN: как разработчику подключиться к LLM API

Артём Иксанов — обложка видео

Это текстовая версия видео. Если удобнее смотреть — видео здесь. Если нужны конкретные команды, которые можно сразу скопировать в терминал — они в этой статье.

Прямо сейчас перед тобой обычный curl-запрос к GPT или Claude — без VPN, без зарубежной карты, с оплатой в рублях. Дальше — как именно к этому прийти, шаг за шагом.

Зачем это вообще

Это первое видео серии про AI-автоматизацию на Windmill — дальше мы будем собирать автоматизации, которые обращаются к GPT и Claude десятки, а то и сотни раз в день. Чтобы это работало, на входе обязательно нужен стабильный доступ к API — без VPN и без забот о том, отвалится он завтра или нет.

Я — Артём Иксанов, руковожу агентством заказной разработки MEIJI MEDIA и последнее время плотно занимаюсь внедрением ИИ в реальные проекты. Здесь и дальше в серии показываю то, что реально использую в работе.

Коротко разберём, как устроен запрос к языковой модели, что такое роли system/user/assistant и токены, и почему это не просто чат. Дальше — какие есть варианты доступа для разработчика из России, и в конце — шаг за шагом соберём рабочий запрос руками через Dockhost AI Inference. Если теория не нужна — сразу переходи к разделу «Собираем запрос руками».

Как устроен запрос к языковой модели

Когда ты открываешь чат GPT или Claude в браузере, за веб-интерфейсом происходит ровно то же самое, что мы сейчас соберём руками: браузер отправляет HTTP-запрос на сервер, сервер его обрабатывает и присылает ответ. API — то же самое, только без интерфейса чата: запрос формируешь сам, ответ читаешь сам.

Запрос — это, по сути, JSON-строка со списком сообщений. Важный момент, особенно для новичков: сообщений в одном запросе несколько, и у каждого своя роль.

systemне сообщение от пользователя, а инструкция для модели: кто она, как себя вести, какие есть ограничения. Например: «Ты технический специалист, отвечай кратко на русском языке».
userсам запрос, который обрабатывает модель.
assistantто, что модель уже отвечала раньше.

Отсюда важный вывод: языковая модель сама по себе не помнит диалог. Каждый раз, продолжая переписку, ты отправляешь всю историю сообщений целиком — все user и assistant по порядку. Память — это не свойство модели, а то, что твой код должен собирать и передавать при каждом запросе.

И последнее — токены. Модель не читает текст буквами или словами, она бьёт его на токены — куски текста примерно от одного символа до одного слова. Платишь ты именно за токены, отдельно за то, что отправил (input), и отдельно за то, что получил в ответе (output). Это важно держать в голове при планировании автоматизации: длинный system-промпт на каждый запрос — не бесплатно.

Три способа получить доступ к API из России

1. Напрямую к OpenAI или AnthropicПо API это формально возможно, но на практике упираешься либо в отсутствие способов оплаты (нужна зарубежная карта), либо в региональные ограничения на регистрацию. Даже если один раз получилось — нет гарантии, что это будет стабильно.
2. Агрегаторы и прокси-сервисыОбещают доступ без VPN и в рублях. Их много, часть — рабочие, но проблема в другом: для разработчика важны предсказуемость, понятные форматы ответов, аптайм, лимиты и внятная документация. Далеко не у всех агрегаторов это на уровне, который можно использовать в продакшене.
3. Шлюз, нацеленный на разработчиковА не на конечных пользователей чата. У него нормальная документация, OpenAI-совместимый формат — код, который ты напишешь, будет работать и для GPT, и для Claude, и для любой другой модели через этот же интерфейс. Оплата в рублях, а если важно — ещё и закрывающие документы для юрлица.

Именно третий вариант дальше и разбираем.

Почему Dockhost AI Inference

В этой серии используем Dockhost AI Inference — не потому что это единственный вариант, а потому что это тот же Dockhost, на котором у нас в проде крутится инфраструктура наших и клиентских проектов. Логичнее держать инфраструктуру в одном месте, чем городить зоопарк из разных облаков.

Пошагово — от регистрации до каталога моделей

  1. Регистрируешься на dockhost.ru, попадаешь в панель управления.
  2. Выбираешь или создаёшь проект.
  3. В проекте находишь раздел LLM Inference — там список доступных моделей, у каждой отдельно указана цена за миллион токенов: input и output — ровно то, о чём говорили выше.
  4. Создаёшь API-ключ.
  5. Для работы нужны два значения: Base URL и API-ключ — они пригодятся в любом инструменте, хоть в curl, хоть в запросе на любом языке программирования.

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

export DOCKHOST_AI_KEY="ваш-ключ-из-личного-кабинета"
export DOCKHOST_AI_URL="ваш-base-url-из-личного-кабинета"

Собираем запрос руками

Адрес — это DOCKHOST_AI_URL плюс путь /chat/completions. Это стандартный путь у любого OpenAI-совместимого API — можешь его запомнить, он будет использоваться во всех следующих роликах серии.

Заголовков два: Authorization: Bearer <ключ> и Content-Type: application/json.

Тело запроса — то, что разбирали в теории: поле model с названием модели из каталога, и поле messages — массив с сообщениями по ролям.

curl -X POST "${DOCKHOST_AI_URL}/chat/completions" \
  -H "Authorization: Bearer ${DOCKHOST_AI_KEY}" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "имя-модели-из-каталога",
    "messages": [
      {
        "role": "system",
        "content": "Ты технический специалист. Отвечай кратко, на русском языке."
      },
      {
        "role": "user",
        "content": "Твой вопрос здесь"
      }
    ]
  }'

Обрати внимание: на уровне протокола запроса нигде не указано, что это именно GPT, Claude, Qwen или Gemini — вся разница в одной строке, в значении model. В этом и есть смысл OpenAI-совместимого API: код не меняется, меняется только имя модели.

Разбираем ответ

Выполняем запрос — получаем сырой JSON. Это то, с чем реально работает код, а не интерфейс чата.

{
  "choices": [
    {
      "message": {
        "content": "Текст ответа модели"
      }
    }
  ],
  "usage": {
    "prompt_tokens": 0,
    "completion_tokens": 0
  }
}

choices — массив вариантов ответа, обычно нужен первый: choices[0].message.content — это и есть текст ответа модели. В usage — метрики: сколько токенов ушло на запрос и сколько на ответ. Отсюда считается стоимость каждого вызова.

Меняем модель одной строкой

Теперь меняем одну строку — model, например, на другую модель другого провайдера — и запускаем тот же самый запрос ещё раз. Код не трогали вообще, поменяли только имя. Это и есть практический смысл всего разобранного: рабочий доступ к GPT и Claude без VPN, прямо из терминала, за один curl-запрос.

Что дальше в серии

В следующих роликах обернём это в реальный код на Python и TypeScript, поднимем всё внутри Windmill — чтобы получилась настоящая автоматизация, а не одиночное обращение. Дальше по плану:


Если досмотрел или дочитал до этого места — скорее всего, ты разработчик или около того, и тебе интересно не просто поболтать с нейросетью, а встроить её в рабочие задачи и процессы. Этим я и занимаюсь — в Meiji Media как агентстве заказной разработки и лично, в консультациях и менторстве по внедрению ИИ. Канал — про то же самое, с пошаговым разбором.