Jednotka 3 / 11

Streamovanie a dlhé odozvy

zisky:

  • Dokáže vysvetliť, čo je streamovanie, typy udalostí a prečo je to potrebné.
  • max_tokens zachytáva časový limit a 128K dlhý výstupný vzťah
  • Dokáže urobiť správnu voľbu medzi požiadavkami na streamovanie a bez streamovania podľa pracovného zaťaženia

Možno ste si všimli, že v rozhraní chatu sa odpoveď „zapisuje“ slovo po slove. Toto nie je vizuálny rozkvet; Je výsledkom techniky nazývanej streaming a je často povinná pre integráciu LLM v produkčnej kvalite. V tejto lekcii sa dozviete, čo je tok, z akých udalostí sa skladá, jeho vzťah k dlhému výstupu a timeoutu a kedy tok použiť a kedy nie. Tému preberieme cez reálne úlohy profesionála — živá asistentka, generovanie dlhých reportov, dávkové spracovanie.

Čo je Flow?

Pri nestreamingovej (synchrónnej) požiadavke čakáte, kým model vygeneruje celú odpoveď; Keď je odpoveď pripravená, príde v jednom kuse. V požiadavke na streamovanie server odošle odpoveď kúsok po kúsku tak, ako sa model generuje. Technicky sa to robí pomocou udalostí odoslaných serverom (SSE — Server-Sent Events, metóda, pri ktorej server odosiela malé udalosti za sebou cez otvorené pripojenie).

Rozdiel je zrejmý v používateľskej skúsenosti: pri odpovedi, ktorá trvá 8 sekúnd, používateľ bez streamu 8 sekúnd hľadí na prázdnu obrazovku; Používateľ streamovania vidí prvé slová za ~0,5 sekundy a text začne plynúť. Vnímaná latencia – čakanie, ktoré používateľ pociťuje – je výrazne znížená, pričom celkový čas zostáva nezmenený.

Typy toku udalostí

Tok je sled udalostí. Koncepčne typický tok vyzerá takto:

incident

Význam

message_start

Odpoveď sa začala; Prišli informácie v hlavičke, ako je model a ID.

content_block_start

Spustil sa blok obsahu (napr. text).

content_block_delta

Prišiel malý kúsok textu (delta); zbierate tieto

content_block_stop

blok dokončený

message_delta

Aktualizované koncové informácie, ako napríklad stop_reason a využitie

message_stop

Odpovedzte znova

Váš kód postupne kombinuje časti textu v udalostiach content_block_delta; skončíte s rovnakým presným textom ako nestreamovaná odpoveď. využitie (čísla tokenov) sú zvyčajne jasné na konci toku – po skončení toku budete sledovať náklady.

Tip: Väčšina oficiálnych súprav SDK (Software Development Kit – hotová knižnica poskytovateľa) poskytuje pomocníka, ktorý zhromažďuje stream za vás (napr. stream.get_final_message()). Nemusíte spravovať všetky skladby manuálne; Použite tohto pomocníka, ak chcete plný text, spracovanie jednotlivých udalostí, ale pre živú tlač.

Dlhé odpovede, max_tokens a časový limit

Druhou a technickejšou príčinou streamovania je časový limit. Ak požiadavka HTTP nie je dokončená v určitom časovom období, klient zruší pripojenie. Keď požadujete veľký výstup z modelu (napr. hlásenie 40 000 tokenov), volanie bez toku môže prekročiť tento limit a vyprší časový limit – požiadavka zlyhá a vy budete musieť zaplatiť za vygenerované tokeny.

Moderné modely dokážu vyprodukovať až 128 000 tokenov v jednej požiadavke. Ale základné pravidlo je jasné: použite streamy, ak je hodnota `max_tokens` vysoká (približne nad 16 000). Streamovanie udržuje pripojenie nažive a zabraňuje časovým limitom; Okamžite tiež uvidíte pokrok.

  • `max_tokens`: Maximálny výstup tokenov, ktoré môže model vyprodukovať; tvrdý strop. Ak dôjde k prerušeniu, vráti sa stop_reason max_tokens.
  • Kontextové okno: Okno, do ktorého sa musí zmestiť súčet vstup + výstup. max_tokens je strop výstupu; Nemiešajte tieto dve veci.
Upozornenie: Vhadzovanie non-flow žiadostí s veľkými max_tokenmi je klasická chyba v produkcii. Bez odpovede sa pripojenie preruší, používateľovi sa zobrazí chyba a cena tokenu sa stratí. Dlhý výstup = prúd.

Kedy prúdiť a kedy nie?

Stav

preferencie

Prečo?

Živý chat / asistent

tok

Vnímaná latencia klesá, používateľ vidí pokrok

Výroba dlhých správ / dokumentov

tok

Zabraňuje časovému limitu, bezpečne prenáša veľký výkon

Krátka klasifikácia (napr. jednoslovná značka)

žiadny prietok

Výstup je už malý; ďalšie zložitosti zbytočné

Dávkové spracovanie

beztekový/vsádzkový

Výsledky sa nezobrazia okamžite; Pozri jednotku 7

Krok automatizácie (na pozadí)

Zvyčajne žiadny prietok

Výsledok prejdete do ďalšieho kroku, žiadne živé zobrazenie

Kopírovateľné výzvy/šablóny

Samotný prúd nie je výzvou, ale výzvy sú rozhodujúce pre správu výstupu produkovaného prúdom. Pri dlhých a plynulých produkciách zvyšuje uloženie konštrukcie spredu kvalitu aj sledovateľnosť.

# Rozdeľte dlhú správu do sekcií (tak, aby bol pokrok viditeľný v toku) Napíšte správu s nasledujúcimi nadpismi v presnom poradí. Každý nadpis začnite znakom „##“:## Zhrnutie## Zistenia## Odporúčania## Ďalšie kroky

# Uveďte cieľovú dĺžku, aby ste sa vyhli skráteniu pri dlhej produkcii. Celkový text bude mať približne 800 slov. Udržujte porcie vyvážené; Nenechávajte na konci pol vety.

# Okamžite uveďte prvú vetu pre asistenta streamovania. Najprv poskytnite priamu odpoveď jednou vetou a potom prejdite do podrobností. Používateľ teda počas čakania vidí okamžitý výsledok.

# Udržujte dlhý výstup štruktúrovaný (aby ho bolo možné analyzovať neskôr) Výstup výstupu do týchto sekcií a každú sekciu označte samostatnou hlavičkou '### ', aby som ju mohol analyzovať programovo: ### ÚVOD ### TELO ### ZDROJE

Slabá výzva / silná výzva (dlhá produkcia)

# SLABÝ Napíšte dlhú a podrobnú správu na túto tému.

# STRONGNapíšte správu s približne 900 slovami na túto tému. Nadpisy: ## Zhrnutie, ## Analýza, ## Riziká, ## Odporúčania. Každý nadpis by mal mať maximálne 3 odseky. Nenechávajte na konci pol vety.

Výkonná verzia; Vopred určuje dĺžku, štruktúru a kvalitu dokončenia. Keď sekcie prichádzajú v toku, používateľ jasne vidí priebeh a sám si riadi dĺžku proti riziku prerušenia modelu.

Tri mini puzdrá

Prípad 1 – Sťažnosť na prázdnu obrazovku. Asistent klienta konzultačného tímu reagoval bez toku; priemerná odozva trvá 7 sekúnd, používatelia sa pýtajú "zamrzne?" sťažoval sa. Keď som sa dostal do prúdu, prvé slovo prišlo za ~0,6 sekundy; Celkový čas zostal rovnaký, ale „pomalé“ sťažnosti takmer zmizli.

Prípad 2 – Neaktuálna správa. Finančný tím si nechal vypracovať 30-stranovú štvrťročnú správu; S max_tokens: 30000 by sa požiadavka bez toku zablokovala v 60-sekundovom časovom limite klienta, požiadavka by zlyhala – a vygenerované tokeny by sa zapísali na faktúru. Išli s prúdom; pripojenie zostalo živé, hlásenie bolo doručené v plnom rozsahu a odpadli zbytočné náklady.

Prípad 3 – Nepotrebný tok. Operačný tím označoval prichádzajúce e-maily ako „naliehavé/pravidelné“; Výstup bol jedno slovo, ale zvyčajne používali prietok. Tok neposkytol žiadnu výhodu v jednoslovnej odozve, čím sa kód stal zbytočne zložitým. Keď som prešiel na flowless, kód sa zjednodušil a správanie zostalo rovnaké. Ponaučenie: streamovanie je cenné v dlhom/živom výstupe, nie všade.

Časté chyby

  • Nepoužívanie tokov v dlhom výstupe: Časový limit a zbytočné náklady na token.
  • Používanie streamovania v krátkom výstupe: Zbytočná zložitosť, nulový prínos.
  • Nekontroluje sa `stop_reason` na konci toku: skrátená odpoveď s max_tokens sa považuje za dokončenú.
  • Nesprávne zlúčenie rozdielov: Manuálny súčet s pomocníkom SDK spôsobí chybu sekvencie/chýbajúcich častí.
  • Pokúšam sa čítať „používanie“ uprostred prúdu: Čísla tokenov sú zvyčajne jasné na konci; Majte prehľad o nákladoch na konci.
  • Zamieňanie streamovania za znižovanie nákladov: Streamovanie zlepšuje zážitok a výdrž; Nezmení cenu tokenu.

Deeper: Flow Breaks a Resilience

Streamovanie je živé pripojenie; V tom je jeho sila aj zraniteľnosť. Ak spojenie uprostred klesne (kolísanie siete, časový limit klienta), zachováte si text, ktorý ste doteraz nahromadili, ale odpoveď bude neúplná. Streamovací klient v produkčnej kvalite by mal byť na to pripravený: nemal by považovať čiastočný text za „dokončenú odpoveď“, ani by nemal považovať odpoveď za dokončenú, kým neuvidí udalosť message_stop.

Druhou jemnosťou je, že tok nemení náklady. To, či dostanete odpoveď so streamovaním alebo bez neho, nemá vplyv na cenu tokenu; flow len zlepšuje zážitok a výdrž. Takže „ak pôjdeme streamovať, budú lacnejšie?“ Odpoveď na otázku je nie – pokiaľ ide o cenu, pozrite sa na 5. a 6. jednotku (výber modelu, vyrovnávacia pamäť).

Tretím bodom je dosiahnutie praktickej rovnováhy: pri živých asistentoch je rýchly príchod prvého slova (vnímané oneskorenie) vysoko cenený; Preto požiadanie modelu, aby zadal odpoveď priamo a dal najprv krátky výsledok (prostredníctvom systémovej výzvy v 4. jednotke), znásobuje výhodu toku. Ak používateľ vidí niečo zmysluplné v prvej sekunde, trpezlivo čaká na detail, ktorý nasleduje. Na druhej strane tok nijako neprispieva k úlohám, ktoré bežia na pozadí a ktorých výstup ide do ďalšieho kroku automatizácie; Jediným kritériom je, aby bola práca dokončená správne a úplne.

V súhrne

Streamovanie získava odozvu kúsok po kúsku, znižuje vnímanú latenciu a zabraňuje časovým limitom pri veľkých priepustnostiach. Takmer povinné pre živého asistenta a výrobu dlhých dokumentov; Pri krátkodobej práci/práci na pozadí je to zbytočné. Pri dlhých produkciách zvyšuje včasné uloženie štruktúry a dĺžky spredu kvalitu a sledovateľnosť; Keď sa tok skončí, stop_reason a použitie sa určite skontrolujú.

Aplikačná úloha

Vyberte si dva scenáre: jeden živý/dlhý (napr. správa zákazníkovi), jeden krátky/na pozadí (napr. označovanie). (1) Rozhodnite sa a zdôvodnite, či použijete tok pre každú z nich. (2) Napíšte výzvu, ktorá uloží štruktúru pre dlhý skript (nadpisy + cieľová dĺžka). (3) Určite hodnoty max_tokens. (4) Uveďte, aké kontroly vykonáte pomocou stop_reason a use na konci toku.

kontrolný zoznam

  • [ ] Viem vysvetliť, čo je streamovanie a ako znižuje vnímanú latenciu.
  • [ ] Pochopil som základné typy udalostí spájania streamu a delta.
  • [ ] Viem o potrebe streamovania s veľkými max_tokenmi a vzťahu časového limitu.
  • [ ] Môžem sa rozhodnúť, v ktorej záťaži streamovanie využijem a v ktorej nie.
  • [ ] Môžem skontrolovať stop_reason a využitie na konci streamu.