GPT-4o API: как подключить модель OpenAI и отправить запрос

В этой статье

Если задача — вызвать GPT-4o из программы, вам нужны три независимые вещи: API-проект, ключ и корректный идентификатор модели. Подписка ChatGPT сама по себе не превращается в баланс OpenAI API: веб-приложение и программный доступ — разные продукты.

Ниже — короткий маршрут через HTTP и Responses API. Он подходит, чтобы проверить саму связку: ключ → endpoint → модель → непустой текстовый ответ.

Какой идентификатор модели выбрать

Для обычного вызова укажите model: "gpt-4o". Это alias модели, а не название тарифа ChatGPT. В карточке GPT-4o также перечислены snapshots, например gpt-4o-2024-08-06 и gpt-4o-2024-11-20; конкретная доступность зависит от вашего API-проекта. Snapshot имеет смысл фиксировать в production, когда вам важна воспроизводимость поведения. Перед развёртыванием сверяйте актуальную карточку GPT-4o в документации OpenAI: старые идентификаторы могут быть deprecated или исчезнуть из проекта.

Карточка модели указывает, что GPT-4o принимает текст и изображения и возвращает текст. Аудио и видео не следует добавлять в этот пример: они не заявлены там как входные модальности этой модели.

API-ключ: подготовить и не потерять

Создайте ключ в API-проекте OpenAI, к которому у вас есть доступ, и передайте его процессу через переменную окружения. Название переменной — стандартное OPENAI_API_KEY.

В macOS или Linux:

export OPENAI_API_KEY='ваш_ключ'

В PowerShell:

$env:OPENAI_API_KEY = 'ваш_ключ'

Не вставляйте секрет в Python-файл, браузерный JavaScript, Docker-образ или Git. Если ключ оказался в логе или репозитории, считайте его скомпрометированным: отзовите его в панели API и создайте новый. Клиентский браузер для такого вызова тоже не подходит — секрет пришлось бы отдать пользователю.

Первый текстовый запрос через Responses API

Минимальный запрос можно отправить обычным curl:

curl https://api.openai.com/v1/responses \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "model": "gpt-4o",
    "input": "Ответь одной короткой фразой: API подключён?"
  }'

Здесь input — текст пользователя, а model — именно выбранный идентификатор. В ответе Responses API не привязывайтесь к случайному месту в сыром JSON, если ваша цель — получить текст: проверьте поле, которое возвращает используемый вами SDK, либо разберите объект ответа по официальной схеме. Для быстрой ручной проверки достаточно увидеть HTTP-успех и непустой результат.

Например, с jq можно отдельно вывести текстовые фрагменты из JSON-ответа:

curl -s https://api.openai.com/v1/responses \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{"model":"gpt-4o","input":"Назови HTTP-метод для чтения ресурса."}' \
  | jq -r '.output[]?.content[]? | select(.type == "output_text") | .text'

Если команда ничего не вывела, это ещё не доказывает, что модель не ответила: сначала сохраните полный JSON и проверьте структуру ответа. При ошибке смотрите HTTP-код и объект error, а не только текст терминала. Типовые границы проходят между четырьмя местами: неверный ключ даёт ошибку аутентификации, недоступная в проекте модель — ошибку доступа к модели, неверное тело — ошибку валидации, а лимит — ошибку квоты или rate limit.

Реальный запрос может тарифицироваться по условиям вашего API-проекта. В этом примере не нужно рассчитывать на бесплатный доступ: проверьте биллинг, лимиты и доступность модели до запуска рабочего кода.

Если входом служит изображение

GPT-4o поддерживает изображение как вход, но в запросе нужно передать его в структуре input-контента, а не положить произвольную строку рядом с текстом. Например, для доступного по URL изображения форма запроса выглядит так:

{
  "model": "gpt-4o",
  "input": [
    {
      "role": "user",
      "content": [
        {"type": "input_text", "text": "Что изображено? Ответь кратко."},
        {"type": "input_image", "image_url": "https://example.com/image.jpg"}
      ]
    }
  ]
}

Это только каркас запроса. Перед отправкой проверьте права на изображение, его URL и формат, а затем разберите фактический JSON-ответ именно вашего проекта. Не подставляйте в рабочий код закрытую ссылку, к которой API не сможет обратиться.

Чем это отличается от Chat Completions

У GPT-4o доступны и Responses API, и Chat Completions. В новом коде выше используется /v1/responses, потому что он даёт единый формат для дальнейшего развития запроса. Если существующее приложение уже построено на /v1/chat/completions, это не означает, что модель нужно менять: там сохраняется привычная форма messages:

{
  "model": "gpt-4o",
  "messages": [
    {"role": "user", "content": "Проверь подключение одним словом."}
  ]
}

Не смешивайте этот маршрут с OpenAI-совместимыми endpoint’ами сторонних провайдеров, Realtime API или аудиомоделями. У них другие адреса, схемы и ограничения. Для справки по базовой настройке Python можно перейти к инструкции о первом запросе к OpenAI API.

Что проверить перед переносом в production

Сначала добейтесь одного воспроизводимого ответа, затем добавляйте обработку ошибок и наблюдаемость:

  • ключ читается из окружения и не выводится в лог;
  • model разрешён в нужном API-проекте;
  • код проверяет HTTP-код, объект ошибки и непустой текст;
  • таймаут, повтор и идемпотентность продуманы отдельно — повтор запроса может быть новой оплачиваемой операцией;
  • лимиты и текущие условия сверены в документации и настройках проекта.

Если вам из России нужна отдельная зарубежная цифровая услуга, а не пополнение OpenAI API, можно посмотреть каталог Amber Market. В каталоге представлены отдельные сервисы, актуальное наличие и условия нужно проверить перед заказом; оплатить заказ можно через СБП. Каталог не следует воспринимать как оплату API-баланса OpenAI, и подписка ChatGPT не взаимозаменяема с этим балансом.

Итого: храните ключ в окружении, используйте gpt-4o, отправьте первый запрос на /v1/responses, проверьте HTTP-результат и непустой текст, а доступность модели и условия проекта перепроверьте перед рабочим запуском.

Источники

Есть следующая задача?Ещё по теме «Работа с API» →