Strumieniowanie odpowiedzi (SSE)
Strumieniuj dane wyjściowe LLM token po tokenie za pośrednictwem Server-Sent Events, aby uzyskać responsywne interfejsy i informować o postępie.
Strumieniowanie odpowiedzi (SSE) to bezpłatna lekcja AI Agents na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej AI Agents, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs AI Agents zawiera 4 lekcji w sumie.
Dlaczego używać strumieniowania?
Bez strumieniowania trzeba czekać na pełną odpowiedź, zanim cokolwiek zostanie wyświetlone. Jeśli odpowiedź zawierająca 50 tokenów powstaje przez 5 sekund, użytkownik przez 5 sekund nie widzi nic.
Strumieniowanie pokazuje tokeny w miarę ich napływania — całkowity czas pozostaje taki sam, ale interfejs sprawia wrażenie natychmiastowego.
Server-Sent Events (SSE)
OpenAI i Anthropic przesyłają dane strumieniowo przez SSE — jednokierunkowy protokół HTTP, w którym serwer wysyła zdarzenia w formacie data: {...}\n\n.
Większość SDK ukrywa SSE za interfejsem iteratora.
Strumieniowanie z OpenAI
Należy ustawić stream=True i iterować po odpowiedzi:
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)Zbieranie pełnej odpowiedzi
Skumuluj fragmenty, aby uzyskać końcowy ciąg znaków:
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})Strumieniowanie z Anthropic
Ten sam schemat, z nieco innym 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)Strumieniowe wywołania narzędzi
Wywołania narzędzi również są przesyłane strumieniowo. W przypadku OpenAI nazwa funkcji i argumenty docierają we fragmentach:
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
passKontrola przepływu i anulowanie
Jeśli użytkownik zamknie stronę, należy przerwać strumień, aby nie zużywać niepotrzebnie tokenów:
try:
for chunk in stream:
if request_was_cancelled():
stream.close()
break
finally:
stream.close()Strumieniowanie przez serwer WWW
W FastAPI należy użyć 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')Buforowanie zdań
W przypadku syntezy mowy lub wyświetlania fragmentami należy buforować tekst do końca zdania:
buf = ''
for chunk in stream:
buf += chunk.choices[0].delta.content or ''
while '. ' in buf:
sentence, buf = buf.split('. ', 1)
speak(sentence + '.')Analizowanie strumieniowego JSON-a
W przypadku danych wyjściowych w formacie JSON nie można przeprowadzić analizy w połowie strumienia. Dostępne opcje:
- Buforowanie całych danych wyjściowych, a następnie jednorazowa analiza
- Użycie strumieniowego parsera JSON (
ijson) do wysyłania pól w miarę ich kompletowania
Metryki opóźnienia: TTFT i TPS
- TTFT — czas do otrzymania pierwszego tokena (postrzegana responsywność)
- TPS — liczba tokenów na sekundę (przepustowość)
Strumieniowanie optymalizuje TTFT, a nie całkowity czas. W interfejsie czatu należy dążyć do TTFT < 500 ms.
Dlaczego używać strumieniowania?
Jaka jest główna korzyść ze strumieniowania?
Podsumowanie
Strumieniowanie poprawia komfort użytkownika, ale nie zwiększa szybkości. Należy je wdrożyć w każdym agencie, który komunikuje się z człowiekiem w czasie rzeczywistym.
Często zadawane pytania
Czy lekcja „Strumieniowanie odpowiedzi (SSE)” jest bezpłatna?
Tak — pełny tekst „Strumieniowanie odpowiedzi (SSE)” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu AI Agents, przejdź na CoddyKit PRO. Kurs AI Agents zawiera 4 lekcji w sumie.
Co nauczysz się w „Strumieniowanie odpowiedzi (SSE)”?
Strumieniuj dane wyjściowe LLM token po tokenie za pośrednictwem Server-Sent Events, aby uzyskać responsywne interfejsy i informować o postępie. Ćwiczysz AI Agents z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć AI Agents?
Nie wymagamy żadnego doświadczenia. AI Agents w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Strumieniowanie odpowiedzi (SSE)”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji AI Agents?
Tak. Każda lekcja AI Agents zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Wywoływanie OpenAI API: chat.completions
- Wywoływanie Anthropic API: messages
- Strumieniowanie odpowiedzi (SSE)
- Świadomość kosztów: liczenie tokenów i budżety