0Pricing
AI Agents · Lekcja

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
            pass

Kontrola 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

  1. Wywoływanie OpenAI API: chat.completions
  2. Wywoływanie Anthropic API: messages
  3. Strumieniowanie odpowiedzi (SSE)
  4. Świadomość kosztów: liczenie tokenów i budżety
← Powrót do AI Agents