глава 02

ChatGPT по API (OpenAI)

Разберём первый запрос к модели OpenAI. Что нужно знать: куда отправлять, как авторизоваться и как устроено тело запроса.

Из чего состоит запрос

  • Базовый URL: https://api.openai.com/v1
  • Эндпоинт: /chat/completions (классический; у OpenAI есть и более новый /responses, но начать проще с этого)
  • Заголовок авторизации: Authorization: Bearer <ваш ключ>
  • Тело: модель (gpt-...) и массив messages

Массив messages - это и есть диалог. Каждый элемент - объект с полями role и content. Роли: system задаёт поведение модели, user - сообщение пользователя, assistant - предыдущие ответы модели (нужны, когда продолжаете диалог).

Запрос через curl

Самый прямой способ - HTTP-запрос. Ключ берётся из переменной окружения, чтобы не светить его в команде.

curl https://api.openai.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "model": "gpt-4o-mini",
    "messages": [
      {"role": "system", "content": "Ты помощник. Отвечай кратко."},
      {"role": "user", "content": "Столица Франции?"}
    ]
  }'

В ответ придёт JSON. Сам текст лежит в choices[0].message.content:

{
  "choices": [
    {
      "message": { "role": "assistant", "content": "Париж." }
    }
  ],
  "usage": {
    "prompt_tokens": 24,
    "completion_tokens": 2,
    "total_tokens": 26
  }
}

Запрос через Python (SDK openai)

В коде удобнее официальный SDK - пакет openai. Он сам собирает HTTP-запрос и разбирает ответ.

import os
from openai import OpenAI

client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])

response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[
        {"role": "system", "content": "Ты помощник. Отвечай кратко."},
        {"role": "user", "content": "Столица Франции?"},
    ],
)

print(response.choices[0].message.content)

Ключ читается из окружения через os.environ - его там не видно, он лежит в .env. Если переменная OPENAI_API_KEY уже задана в окружении, SDK подхватит её и сам, без api_key=.

Тот же SDK есть и для JavaScript - пакет openai, логика та же: создаёте клиент, вызываете chat.completions.create.

Сколько это стоит

Оплата идёт по токенам: считаются и ваш запрос (prompt_tokens), и ответ модели (completion_tokens). Поле usage в ответе показывает, сколько ушло. Что такое токен и как прикинуть стоимость - в главе про токены.