В этой статье
Если задача — вызвать 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-результат и непустой текст, а доступность модели и условия проекта перепроверьте перед рабочим запуском.
Источники
- GPT-4o Model | OpenAI APIOpenAI
- Models | OpenAI APIOpenAI
- Developer quickstartOpenAI
- Create a model responseOpenAI
- Amber Market catalogAmber Market