глава 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 в ответе показывает, сколько ушло. Что такое токен и как прикинуть стоимость - в главе про токены.