Потоковая передача ответов (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 — локальная установка не требуется.
Все уроки этого курса
- Вызов OpenAI API: chat.completions
- Вызов Anthropic API: messages
- Потоковая передача ответов (SSE)
- Контроль расходов: подсчёт токенов и бюджеты