0Pricing
Learn AI with Python · Урок

API OpenAI: chat.completions и потоковая передача

Клиент OpenAI, список сообщений, роли system/user/assistant, потоковая передача с stream=True

«API OpenAI: chat.completions и потоковая передача» — бесплатный урок Learn AI with Python на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn AI with Python, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn AI with Python содержит 4 уроков всего.

Знакомство с Python SDK OpenAI

Пакет «ОупенЭйАй» для Python — официальный способ обращаться к моделям OpenAI, таким как GPT-4o. Установите его с помощью pip install openai, и Вы получите единый класс клиента OpenAI, который берёт на себя аутентификацию, повторные попытки и формирование запросов.

Каждый Ваш вызов проходит через этот клиент, поэтому стандартный подход — создать его один раз и использовать повторно.

pip install openai

from openai import OpenAI

Создание клиента

Создайте экземпляр клиента с помощью OpenAI(). По умолчанию он считывает ключ из переменной окружения OPENAI_API_KEY, благодаря чему секреты не попадают в исходный код.

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

from openai import OpenAI

# Reads OPENAI_API_KEY from the environment
client = OpenAI()

# Or pass it explicitly (not recommended)
client = OpenAI(api_key="sk-...")

Список сообщений

Диалоговыми моделями управляет список сообщений. Каждое сообщение — это словарь с полями role и content. Три основные роли — system (инструкции), user (человек) и assistant (модель).

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

messages = [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "What is the capital of France?"}
]

Первая генерация

Вызовите client.chat.completions.create(), передав model и свои messages. Текст ответа находится в response.choices[0].message.content.

API возвращает список вариантов, но при обычном использовании читайте первый из них.

response = client.chat.completions.create(
    model="gpt-4o",
    messages=messages
)

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

Управление выводом с помощью параметров

Ответ определяют два параметра: temperature (0 = детерминированный результат, более высокие значения = больше творческой свободы) и max_tokens (ограничивает длину ответа). Низкие значения температуры подходят для задач, требующих точности; высокие — для генерации идей.

response = client.chat.completions.create(
    model="gpt-4o",
    messages=messages,
    temperature=0.2,
    max_tokens=300
)

Зачем нужен потоковый вывод

Без потоковой передачи Вам приходится ждать весь ответ, прежде чем Вы что-либо увидите. При потоковой передаче токены приходят по мере генерации, поэтому интерфейс может отображать текст в реальном времени, как это делает ChatGPT.

Потоковая передача включается с помощью stream=True, после чего вместо одного объекта возвращается итератор.

Включение потоковой передачи

Передайте stream=True в create(). Теперь вместо готового ответа Вы получаете генератор, выдающий фрагменты по мере того, как модель их создаёт.

stream = client.chat.completions.create(
    model="gpt-4o",
    messages=messages,
    stream=True
)

Перебор фрагментов

Перебирайте элементы stream. Каждый фрагмент содержит часть текста в chunk.choices[0].delta.content. В ранних и последнем фрагментах это поле может содержать None, поэтому перед выводом проверьте его наличие.

for chunk in stream:
    delta = chunk.choices[0].delta.content
    if delta is not None:
        print(delta, end="", flush=True)

Понимание разницы между приращением и сообщением

В обычном ответе Вы читаете message.content (весь ответ). В потоке Вы читаете delta.content (только новую часть). Слово приращение означает «изменение» с момента получения предыдущего фрагмента.

Объединение всех приращений восстанавливает сообщение целиком.

full_text = ""
for chunk in stream:
    piece = chunk.choices[0].delta.content or ""
    full_text += piece
print("\nFinal:", full_text)

Многоходовые разговоры

Чтобы продолжить разговор, с помощью append добавьте ответ ассистента обратно в messages, а затем добавьте следующее сообщение пользователя. Модель не хранит состояние, поэтому историю должны поддерживать YOU.

messages.append({"role": "assistant", "content": response.choices[0].message.content})
messages.append({"role": "user", "content": "And its population?"})

follow_up = client.chat.completions.create(model="gpt-4o", messages=messages)

Проверка использования токенов

Ответы без потоковой передачи содержат объект usage с полями prompt_tokens, completion_tokens и total_tokens. Так Вы отслеживаете расходы на API и планируете бюджет, поскольку оплата взимается за каждый токен.

print(response.usage.prompt_tokens)
print(response.usage.completion_tokens)
print(response.usage.total_tokens)

Быстрая проверка

Проверьте, насколько хорошо Вы поняли потоковую передачу.

Повторение: генерация ответов и потоковая передача

Вы научились создавать клиент OpenAI, формировать список messages с системными, пользовательскими и ассистентскими ролями, а также вызывать chat.completions.create(). Обычные ответы Вы читаете из choices[0].message.content.

С помощью stream=True Вы перебираете фрагменты и читаете delta.content для вывода в реальном времени, поддерживаете историю, добавляя ответы, и отслеживаете стоимость через объект usage.

Часто задаваемые вопросы

Урок «API OpenAI: chat.completions и потоковая передача» бесплатный?

Да — полный текст урока «API OpenAI: chat.completions и потоковая передача» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn AI with Python, подпишись на CoddyKit PRO. Курс Learn AI with Python содержит 4 уроков всего.

Чему я научусь в уроке «API OpenAI: chat.completions и потоковая передача»?

Клиент OpenAI, список сообщений, роли system/user/assistant, потоковая передача с stream=True Ты практикуешь Learn AI with Python с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Learn AI with Python?

Предыдущий опыт не требуется. Learn AI with Python на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «API OpenAI: chat.completions и потоковая передача»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Learn AI with Python?

Да. Каждый урок Learn AI with Python включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. API OpenAI: chat.completions и потоковая передача
  2. API Anthropic Claude в Python
  3. Вызов функций и использование инструментов с LLM
  4. Проектирование промптов для продуктивных приложений с LLM
← Назад к Learn AI with Python