Eenheid 3 / 11

Streaming en lange reacties

Winst:

  • Kan uitleggen wat streaming is, soorten evenementen en waarom het nodig is.
  • max_tokens begrijpt time-out en 128K lange uitvoerrelatie
  • Kan afhankelijk van de werklast de juiste keuze maken tussen streaming- en niet-streamingverzoeken

Het is je misschien opgevallen dat in een chatinterface het antwoord woord voor woord wordt "getypeerd". Dit is geen visuele bloei; Het is het resultaat van een techniek die streaming wordt genoemd en is vaak verplicht voor LLM-integratie van productiekwaliteit. In dit onderdeel leer je wat flow is, uit welke gebeurtenissen het bestaat, wat de relatie is met lange output en time-out, en wanneer je flow moet gebruiken en wanneer niet. We zullen het onderwerp behandelen aan de hand van de echte taken van een professional: live assistent, het genereren van lange rapporten, batchverwerking.

Wat is stroom?

Bij een niet-streaming (synchrone) aanvraag wacht je totdat het model het volledige antwoord produceert; Als het antwoord klaar is, komt het in één stuk aan. Bij een streamingverzoek verzendt de server het antwoord stukje bij beetje terwijl het model genereert. Technisch gezien gebeurt dit met door de server verzonden gebeurtenissen (SSE – Server-Sent Events, een methode waarbij de server kleine gebeurtenissen achter elkaar verzendt via een open verbinding).

Het verschil wordt duidelijk in de gebruikerservaring: bij een reactie die 8 seconden duurt, staart de niet-streamgebruiker 8 seconden naar een leeg scherm; De streaminggebruiker ziet de eerste woorden binnen ~0,5 seconden en de tekst begint te stromen. De waargenomen latentie (de wachttijd die de gebruiker voelt) wordt aanzienlijk verminderd, terwijl de totale tijd onveranderd blijft.

Gebeurtenistypes van stroom

Flow is een opeenvolging van gebeurtenissen. Conceptueel gezien gaat een typische stroom als volgt:

voorval

Betekenis

bericht_start

Het antwoord begon; Headerinformatie zoals model en ID is aangekomen.

inhoud_blok_start

Er is een blok met inhoud (bijvoorbeeld tekst) gestart

inhoud_blok_delta

Er is een klein stukje tekst (delta) aangekomen; jij verzamelt deze

inhoud_blok_stop

blok voltooid

bericht_delta

Eindinformatie bijgewerkt, zoals stop_reason en gebruik

bericht_stop

Antwoord voorbij

Je code combineert opeenvolgend stukjes tekst in content_block_delta-gebeurtenissen; je krijgt exact dezelfde tekst als het niet-gestreamde antwoord. gebruik (tokennummers) zijn meestal duidelijk aan het einde van de stroom: u houdt de kosten bij zodra de stroom voorbij is.

Tip: De meeste officiële SDK's (Software Development Kit – kant-en-klare bibliotheek van de provider) bieden een helper die de stream voor u verzamelt (bijvoorbeeld stream.get_final_message()). Je hoeft niet alle nummers handmatig te beheren; Gebruik deze helper als u de volledige tekst wilt, individuele gebeurtenissen wilt verwerken, maar dan voor live afdrukken.

Lange reacties, max_tokens en time-out

De tweede en meer technische oorzaak van streaming is een time-out. Als een HTTP-verzoek niet binnen een bepaalde tijd wordt voltooid, verbreekt de client de verbinding. Wanneer u een grote uitvoer van het model opvraagt ​​(bijvoorbeeld een rapport van 40.000 tokens), kan de non-flow-aanroep deze limiet overschrijden en een time-out optreden. Het verzoek mislukt en u moet betalen voor de gegenereerde tokens.

Moderne modellen kunnen in één verzoek tot 128.000 tokens uitvoeren. Maar de vuistregel is duidelijk: gebruik streams als de `max_tokens`-waarde hoog is (ongeveer boven de 16.000). Streaming houdt de verbinding levend en voorkomt time-outs; Je ziet ook meteen vooruitgang.

  • `max_tokens`: Maximale uitvoertokens die het model kan produceren; een hard plafond. Als er een interrupt optreedt, wordt stop_reason max_tokens geretourneerd.
  • Contextvenster: Het venster waarin de som van invoer + uitvoer moet passen. max_tokens is het plafond van de uitvoer; Meng de twee niet.
Let op: het genereren van niet-stroomverzoeken met grote max_tokens is een klassieke fout in de productie. Zonder reactie wordt de verbinding verbroken, ziet de gebruiker een fout en gaan de tokenkosten verloren. Lange uitvoer = stream.

Wanneer moet je stromen en wanneer niet?

Status

voorkeur

Waarom

Livechat / assistent

stroom

De waargenomen latentie neemt af, de gebruiker ziet vooruitgang

Lange rapport-/documentproductie

stroom

Voorkomt time-out, transporteert grote hoeveelheden veilig

Korte classificatie (bijvoorbeeld tag met één woord)

geen stroom

De output is al klein; extra complexiteit overbodig

Batchverwerking

stroomloos/batch

Resultaten worden niet direct getoond; Zie eenheid 7

Automatiseringsstap (op de achtergrond)

Meestal geen doorstroming

U geeft het resultaat door naar de volgende stap, geen live weergave

Kopieerbare prompts/sjablonen

De stream zelf is geen prompt, maar prompts zijn van cruciaal belang voor het beheren van de uitvoer die door de stream wordt geproduceerd. Bij lange en vloeiende producties verhoogt het opleggen van de structuur vanaf de voorkant zowel de kwaliteit als de traceerbaarheid.

# Verdeel het lange rapport in secties (zodat de voortgang zichtbaar is in de flow) Schrijf het rapport met de volgende kopjes, in deze exacte volgorde. Begin elke kop met '## ':## Samenvatting## Bevindingen## Aanbevelingen## Volgende stappen

# Geef de doellengte op om afknotting bij lange productie te voorkomen. De totale tekst zal ongeveer 800 woorden bedragen. Houd de porties in evenwicht; Laat aan het einde geen halve zin achter.

# Geef meteen de eerste zin voor de streamingassistent. Geef eerst een direct antwoord van één zin en ga dan dieper in op de details. Zo ziet de gebruiker tijdens het wachten direct resultaat.

# Houd de lange uitvoer gestructureerd (zodat deze later kan worden geparseerd) Voer de uitvoer uit in deze secties en markeer elke sectie met een afzonderlijke '###' header, zodat ik deze programmatisch kan parseren: ### INTRODUCTIE ### BODY ### BRONNEN

Zwakke prompt / Sterke prompt (lange productie)

# ZWAKSchrijf een lang en gedetailleerd rapport over dit onderwerp.

# STERKSchrijf een rapport van ongeveer 900 woorden over dit onderwerp. Rubrieken: ## Samenvatting, ## Analyse, ## Risico's, ## Aanbevelingen. Elke kop mag maximaal 3 paragrafen bevatten. Laat aan het einde geen halve zin achter.

Krachtige versie; Het bepaalt vooraf de lengte, structuur en afwerkingskwaliteit. Naarmate secties in de stroom komen, ziet de gebruiker de voortgang duidelijk en beheert hij zelf de lengte tegen het risico van modelonderbreking.

Drie mini-hoesjes

Geval 1 – Klacht over een leeg scherm. De cliëntassistent van een adviesteam reageerde zonder stroom; gemiddelde reactie duurt 7 seconden, gebruikers vragen "bevriest het?" klaagde hij. Toen ik eenmaal in de flow zat, kwam het eerste woord binnen ~0,6 seconden; De totale tijd bleef hetzelfde, maar de ‘trage’ klachten verdwenen vrijwel.

Geval 2 — Verouderd rapport. Een financieel team liet een kwartaalrapport van 30 pagina's maken; Met max_tokens: 30000 zou het no-flow-verzoek vastlopen in een clienttime-out van 60 seconden, zou het verzoek mislukken en zouden de gegenereerde tokens naar de factuur worden geschreven. Ze gingen met de stroom mee; de verbinding bleef live, het rapport werd volledig afgeleverd en verspilde kosten werden geëlimineerd.

Geval 3 — Onnodige stroom. Een operationeel team bestempelde inkomende e-mails als ‘dringend/regulier’; De uitvoer was één woord, maar gewoonlijk gebruikten ze flow. De stroom leverde geen voordeel op bij het antwoord van één woord, waardoor de code onnodig complex werd. Toen ik overschakelde naar flowless, werd de code vereenvoudigd en bleef het gedrag hetzelfde. Les: streaming is waardevol bij lange/live-uitvoer, niet overal.

Veel voorkomende fouten

  • Geen gebruik maken van streams in lange uitvoer: time-out en verspilde tokenkosten.
  • Streaming gebruiken in korte output: onnodige complexiteit, nul voordeel.
  • Het niet controleren van `stop_reason` aan het einde van de stream: het ingekorte antwoord met max_tokens wordt als voltooid beschouwd.
  • Onjuist samenvoegen van delta's: handmatige optelling met de SDK-helper levert een fout op in de volgorde/ontbrekende onderdelen.
  • Proberen om 'gebruik' halverwege de stream te lezen: tokennummers worden meestal aan het einde duidelijk; Houd de kosten aan het einde bij.
  • Streaming verwarren met kostenbesparing: streaming verbetert de ervaring en het uithoudingsvermogen; Het verandert de tokenprijs niet.

Dieper: stroomonderbrekingen en veerkracht

Streaming is een liveverbinding; Dit is zowel zijn kracht als zijn kwetsbaarheid. Als de verbinding halverwege wegvalt (netwerkschommelingen, time-out van de client), behoudt u de tekst die u tot nu toe heeft verzameld, maar is het antwoord onvolledig. Een streamingclient van productiekwaliteit moet hierop voorbereid zijn: hij mag de gedeeltelijke tekst niet als een "voltooid antwoord" behandelen, en hij mag het antwoord ook niet als voltooid beschouwen totdat hij de gebeurtenis message_stop ziet.

De tweede subtiliteit is dat de stroom de kosten niet verandert. Of u een reactie ontvangt met of zonder streaming, heeft geen invloed op de tokenprijs; flow verbetert alleen maar de ervaring en het uithoudingsvermogen. Dus “als we gaan streamen, zullen ze dan goedkoper zijn?” Het antwoord op de vraag is nee: kijk voor de kosten naar de 5e en 6e eenheid (modelselectie, cache).

Het derde punt is het vinden van een praktisch evenwicht: bij live assistenten wordt een snelle aankomst van het eerste woord (waargenomen vertraging) zeer gewaardeerd; Als u het model vraagt ​​om het antwoord rechtstreeks in te voeren en eerst een kort resultaat te geven (via de systeemprompt in de vierde eenheid), wordt het voordeel van de stroom dus vermenigvuldigd. Als de gebruiker in de eerste seconde iets betekenisvols ziet, wacht hij geduldig op het detail dat volgt. Aan de andere kant levert de stroom geen bijdrage aan de taken die op de achtergrond draaien, waarvan de output naar de volgende automatiseringsstap gaat; Het enige criterium daar is dat de klus correct en volledig wordt uitgevoerd.

Samengevat

Streaming haalt de respons stukje bij beetje op, waardoor de waargenomen latentie wordt verminderd en time-outs bij grote doorvoer worden voorkomen. Bijna verplicht voor live assistent- en lange documentproductie; Het is niet nodig voor kort/achtergrondwerk. Bij lange producties verhoogt het opleggen van de structuur en lengte vanaf de voorkant met een prompt zowel de kwaliteit als de traceerbaarheid; Wanneer de stroom is voltooid, worden stop_reason en gebruik definitief gecontroleerd.

Applicatie taak

Kies twee scenario's: één live/lang (bijvoorbeeld rapporteren aan de klant), één kort/achtergrond (bijvoorbeeld taggen). (1) Bepaal en beargumenteer of u voor elk van deze onderwerpen flow gaat gebruiken. (2) Schrijf een prompt die de structuur voor het lange script oplegt (koppen + doellengte). (3) Bepaal max_tokens-waarden. (4) Maak een lijst van de controles die u aan het einde van de stroom gaat uitvoeren met stop_reason en gebruik.

controlelijst

  • [ ] Ik kan uitleggen wat streaming is en hoe het de waargenomen latentie vermindert.
  • [ ] Ik begreep de basisgebeurtenistypen van het samenkomen van de stroom en de delta.
  • [ ] Ik ken de noodzaak om te streamen met grote max_tokens en de time-outrelatie.
  • [ ] Ik kan beslissen in welke werklast ik streaming gebruik en in welke niet.
  • [ ] Ik kan stop_reason en gebruik aan het einde van de stream controleren.