0Pricing
AI Agents · Урок

Потоковая передача ответов (SSE)

Передавайте вывод LLM по одному токену через Server-Sent Events, чтобы интерфейс быстро реагировал и показывал ход выполнения.

«Потоковая передача ответов (SSE)» — бесплатный урок AI Agents на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Agents, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Agents содержит 4 уроков всего.

Зачем использовать потоковую передачу?

Без потоковой передачи приходится ждать полного ответа, прежде чем показать хоть что-нибудь. Если ответ из 50 токенов формируется 5 секунд, пользователь ничего не видит все эти 5 секунд.

Потоковая передача показывает токены по мере их поступления: общее время то же, но интерфейс воспринимается как мгновенный.

События, отправляемые сервером (SSE)

OpenAI и Anthropic передают данные через SSE — однонаправленный протокол HTTP, в котором сервер отправляет события в формате data: {...}\n\n.

Большинство SDK скрывают SSE за интерфейсом итератора.

Потоковая передача с OpenAI

Установите stream=True и перебирайте ответ:

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

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

Сбор полного ответа

Накапливайте части, чтобы получить итоговую строку:

buf = []
for chunk in stream:
    delta = chunk.choices[0].delta.content or ''
    buf.append(delta)
    print(delta, end='', flush=True)

full_text = ''.join(buf)
messages.append({'role': 'assistant', 'content': full_text})

Потоковая передача с Anthropic

Тот же принцип, но API немного отличается:

with client.messages.stream(
    model='claude-sonnet-4-5',
    max_tokens=1024,
    messages=messages,
) as stream:
    for text in stream.text_stream:
        print(text, end='', flush=True)

    final = stream.get_final_message()
    print('\ndone, tokens:', final.usage.output_tokens)

Потоковая передача вызовов инструментов

Вызовы инструментов также передаются потоком. В OpenAI имя функции и аргументы поступают частями:

for chunk in stream:
    delta = chunk.choices[0].delta
    if delta.tool_calls:
        for tc in delta.tool_calls:
            # tc.function.name and tc.function.arguments arrive as partial strings
            pass

Обратное давление и отмена

Если пользователь закрывает страницу, прервите поток, чтобы не тратить токены:

try:
    for chunk in stream:
        if request_was_cancelled():
            stream.close()
            break
finally:
    stream.close()

Потоковая передача через веб-сервер

В FastAPI используйте StreamingResponse:

from fastapi.responses import StreamingResponse

def token_generator():
    for chunk in stream:
        delta = chunk.choices[0].delta.content or ''
        yield f'data: {delta}\n\n'

return StreamingResponse(token_generator(), media_type='text/event-stream')

Буферизация предложений

Для преобразования текста в речь или отображения частями накапливайте текст до конца предложения:

buf = ''
for chunk in stream:
    buf += chunk.choices[0].delta.content or ''
    while '. ' in buf:
        sentence, buf = buf.split('. ', 1)
        speak(sentence + '.')

Разбор JSON в потоке

Для вывода в формате JSON нельзя выполнять разбор в середине потока. Возможны такие варианты:

  • Буферизовать весь вывод, а затем выполнить разбор один раз
  • Использовать потоковый анализатор JSON (ijson), который выдаёт поля по мере их завершения

Метрики задержки: TTFT и TPS

  • TTFT — время до получения первого токена (воспринимаемая отзывчивость)
  • TPS — токены в секунду (пропускная способность)

Потоковая передача оптимизирует TTFT, а не общее время. Для удобного чата стремитесь к TTFT < 500 мс.

Зачем использовать потоковую передачу?

Каково главное преимущество потоковой передачи?

Итоги

Потоковая передача улучшает взаимодействие с пользователем, но не ускоряет работу. Реализуйте её в любом агенте, который взаимодействует с человеком в реальном времени.

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

Урок «Потоковая передача ответов (SSE)» бесплатный?

Да — полный текст урока «Потоковая передача ответов (SSE)» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Agents, подпишись на CoddyKit PRO. Курс AI Agents содержит 4 уроков всего.

Чему я научусь в уроке «Потоковая передача ответов (SSE)»?

Передавайте вывод LLM по одному токену через Server-Sent Events, чтобы интерфейс быстро реагировал и показывал ход выполнения. Ты практикуешь AI Agents с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

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

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

Сколько времени занимает урок «Потоковая передача ответов (SSE)»?

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

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

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

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

  1. Вызов OpenAI API: chat.completions
  2. Вызов Anthropic API: messages
  3. Потоковая передача ответов (SSE)
  4. Контроль расходов: подсчёт токенов и бюджеты
← Назад к AI Agents