Vienetas 3 / 11

Srautas ir ilgi atsakymai

Pelnas:

  • Gali paaiškinti, kas yra srautinis perdavimas, įvykių tipus ir kodėl to reikia.
  • max_tokens suvokia skirtąjį laiką ir 128 000 ilgio išvesties ryšį
  • Atsižvelgiant į darbo krūvį, gali tinkamai pasirinkti srautinio ir ne srautinio perdavimo užklausas

Galbūt pastebėjote, kad pokalbių sąsajoje atsakymas „įvedamas“ žodis po žodžio. Tai nėra vizualinis klestėjimas; Tai yra technikos, vadinamos srautiniu perdavimu, rezultatas ir dažnai yra privalomas gamybos kokybės LLM integracijai. Šiame skyriuje sužinosite, kas yra srautas, iš kokių įvykių jis susideda, jo ryšį su ilga išvestimi ir skirtuoju laiku ir kada naudoti srautą, o kada ne. Temą apžvelgsime per realias profesionalo užduotis – tiesioginį asistentą, ilgų ataskaitų generavimą, paketinį apdorojimą.

Kas yra Srautas?

Turėdami ne srautinį (sinchroninį) užklausą, laukiate, kol modelis pateiks visą atsakymą; Kai atsakymas yra paruoštas, jis gaunamas vientisas. Srautinio perdavimo užklausoje serveris siunčia atsakymą dalimis, kai modelis generuoja. Techniškai tai atliekama naudojant serverio siunčiamus įvykius (SSE – Server-Sent Events, metodas, kai serveris atviru ryšiu siunčia nedidelius įvykius iš eilės).

Skirtumas išryškėja naudojant vartotojo patirtį: atsakydamas, kuris trunka 8 sekundes, ne srauto naudotojas 8 sekundes žiūri į tuščią ekraną; Srautinio transliavimo vartotojas pirmus žodžius pamato per ~0,5 sekundės ir tekstas pradeda tekėti. Suvokiama delsa – laukimas, kurį jaučia vartotojas – labai sumažėja, o bendras laikas nesikeičia.

Įvykių srauto tipai

Srautas yra įvykių seka. Konceptualiai tipiškas srautas atrodo taip:

incidentas

Reikšmė

message_start

Prasidėjo atsakymas; Gauta antraštės informacija, pvz., modelis ir ID.

content_block_start

Pradėtas turinio (pvz., teksto) blokas

turinio_bloko_delta

Atkeliavo maža teksto dalis (delta); jūs renkate šiuos

content_block_stop

blokas baigtas

pranešimas_delta

Atnaujinta pabaigos informacija, pvz., stop_priežastis ir naudojimas

message_stop

Atsakykite per

Jūsų kodas nuosekliai sujungia turinio_block_delta įvykių teksto dalis; gausite tą patį tekstą kaip ir ne srautu perduodamas atsakymas. naudojimas (žetonų skaičiai) paprastai yra aiškūs srauto pabaigoje – sekate išlaidas, kai srautas baigiasi.

Patarimas: dauguma oficialių SDK (Software Development Kit – paruošta teikėjo biblioteka) yra pagalbinė priemonė, kuri renka srautą už jus (pvz., stream.get_final_message()). Jums nereikia tvarkyti visų takelių rankiniu būdu; Naudokite šį pagalbininką, jei norite viso teksto, apdoroti atskirus įvykius, bet tiesioginiam spausdinimui.

Ilgi atsakymai, max_tokens ir skirtasis laikas

Antroji ir labiau techninė srautinio perdavimo priežastis yra skirtasis laikas. Jei HTTP užklausa neįvykdoma per tam tikrą laikotarpį, klientas nutraukia ryšį. Kai prašote didelio modelio išvesties (pvz., 40 000 žetonų ataskaitos), ne srauto iškvietimas gali viršyti šią ribą ir pasibaigti laikas – užklausa nepavyks ir turėsite sumokėti už sugeneruotus žetonus.

Šiuolaikiniai modeliai vienu prašymu gali išvesti iki 128 000 žetonų. Tačiau nykščio taisyklė aiški: naudokite srautus, jei „max_tokens“ vertė yra didelė (maždaug daugiau nei 16 000). Srautas palaiko ryšį ir apsaugo nuo skirtojo laiko; Taip pat akimirksniu pamatysite pažangą.

  • „max_tokens“: maksimalus išvesties žetonų skaičius, kurį modelis gali sukurti; kietos lubos. Jei įvyksta pertraukimas, grąžinama stop_reason max_tokens.
  • Konteksto langas: langas, kuriame turi tilpti įvesties ir išvesties suma. max_tokens yra išvesties lubos; Nemaišykite dviejų.
Atsargiai: ne srauto užklausų metimas su dideliais max_tokens yra klasikinė gamybos klaida. Nesant atsakymo, ryšys nutrūksta, vartotojas mato klaidą ir žetono kaina yra švaistoma. Ilga išvestis = srautas.

Kada tekėti ir kada ne?

Būsena

pirmenybė

Kodėl

Tiesioginis pokalbis / asistentas

srautas

Sumažėja delsos laikas, vartotojas mato pažangą

Ilgas ataskaitos/dokumento rengimas

srautas

Apsaugo nuo skirtojo laiko, saugiai perduoda didelę galią

Trumpa klasifikacija (pvz., vieno žodžio žyma)

jokio srauto

Išeiga jau maža; nereikalingas papildomas sudėtingumas

Paketinis apdorojimas

betakis/partinis

Rezultatai rodomi ne iš karto; Žiūrėkite 7 skyrių

Automatizavimo veiksmas (fone)

Paprastai nėra srauto

Jūs perkeliate rezultatą į kitą veiksmą, nerodomas tiesioginis

Kopijuojamas raginimas / šablonai

Pats srautas nėra raginimas, tačiau raginimai yra labai svarbūs norint valdyti srauto sukurtą išvestį. Ilgoje ir sklandžioje gamyboje struktūros primetimas iš priekio pagerina kokybę ir atsekamumą.

# Padalinkite ilgą ataskaitą į dalis (kad progresas būtų matomas sraute) Parašykite ataskaitą su šiomis antraštėmis tiksliai tokia tvarka. Kiekvieną antraštę pradėkite nuo „##“:## Santrauka## Išvados## Rekomendacijos## Kiti veiksmai

# Nurodykite tikslinį ilgį, kad išvengtumėte sutrumpinimo ilgoje gamyboje. Iš viso teksto bus apie 800 žodžių. Subalansuokite porcijas; Nepalikite pusės sakinio pabaigoje.

# Nedelsdami pateikite pirmąjį sakinį srautinio perdavimo asistentui. Pirmiausia pateikite tiesioginį vieno sakinio atsakymą, tada gilinkitės į detales. Taigi vartotojas iškart mato rezultatą laukdamas.

# Laikykite ilgą išvestį struktūrizuotą (kad ją būtų galima išanalizuoti vėliau) Išveskite šiose skiltyse išvestį ir pažymėkite kiekvieną skyrių atskira antrašte ###, kad galėčiau ją programiškai išanalizuoti: ### ĮVADAS ### BODY ### ŠALTINIAI

Silpna raginimas / Stiprus raginimas (ilgai gamyba)

# WEAKParašykite ilgą ir išsamų pranešimą šia tema.

# STRONG Parašykite apie 900 žodžių ataskaitą šia tema. Antraštės: ## Santrauka, ## Analizė, ## Rizika, ## Rekomendacijos. Kiekvieną antraštę turi sudaryti ne daugiau kaip 3 pastraipos. Nepalikite pusės sakinio pabaigoje.

Galinga versija; Jis iš anksto nustato ilgį, struktūrą ir apdailos kokybę. Kai sekcijų ateina srautas, vartotojas aiškiai mato pažangą ir pats valdo ilgį, kad išvengtų modelio nutrūkimo.

Trys mini dėklai

1 atvejis – skundas dėl tuščio ekrano. Konsultacinės komandos klientų padėjėjas reagavo be srauto; vidutinis atsakymas trunka 7 sekundes, vartotojai klausia "ar užšąla?" jis skundėsi. Kai patekau į srautą, pirmasis žodis atėjo per ~0,6 sekundės; Bendras laikas išliko toks pat, tačiau „lėti“ skundai beveik išnyko.

2 atvejis – pasenusi ataskaita. Finansų komanda parengė 30 puslapių ketvirčio ataskaitą; Naudojant max_tokens: 30000, užklausa neleisti srauto įstrigtų per 60 sekundžių kliento skirtąjį laiką, užklausa nepavyktų ir sugeneruoti prieigos raktai būtų įrašyti į sąskaitą faktūrą. Jie ėjo su srautu; ryšys išliko veikiantis, ataskaita buvo pristatyta pilnai, o išlaidos buvo pašalintos.

3 atvejis – nereikalingas srautas. Operacijų komanda gautus el. laiškus pažymėjo kaip „skubus/įprastus“; Išvestis buvo vienas žodis, bet jie paprastai naudojo srautą. Srautas nesuteikė jokios naudos atsakant į vieną žodį, todėl kodas buvo be reikalo sudėtingas. Kai perėjau į „flowless“, kodas supaprastėjo ir elgesys išliko toks pat. Pamoka: srautinis perdavimas yra vertingas ilgalaikėje / tiesioginėje išvestyje, ne visur.

Dažnos klaidos

  • Srautų nenaudojimas ilgoje išvestyje: baigėsi skirtasis laikas ir iššvaistomos prieigos rakto išlaidos.
  • Srautinio perdavimo naudojimas trumpoje išvestyje: nereikalingas sudėtingumas, nulis naudos.
  • Netikrinama „stop_reason“ srauto pabaigoje: sutrumpintas atsakymas su max_tokens laikomas baigtu.
  • Neteisingai sujungiamos deltos: neautomatinis sumavimas naudojant SDK pagalbinę priemonę sukuria sekos / trūkstamų dalių klaidą.
  • Bandymas perskaityti "naudojimo" viduryje: žetonų numeriai paprastai tampa aiškūs pabaigoje; Sekite išlaidas pabaigoje.
  • Klaidingas srautinis perdavimas siekiant sumažinti išlaidas: transliacija pagerina patirtį ir ištvermę; Žetono kainos tai nekeičia.

Giliau: srauto pertraukos ir atsparumas

Srautas yra tiesioginis ryšys; Tai ir jos stiprybė, ir pažeidžiamumas. Jei ryšys nutrūks per vidurį (tinklo svyravimai, kliento laikas), išsaugosite iki šiol kauptą tekstą, tačiau atsakymas bus neišsamus. Gamybos kokybės srautinio perdavimo klientas turėtų būti tam pasiruošęs: jis neturėtų traktuoti dalinio teksto kaip „užbaigto atsakymo“ ir neturėtų laikyti atsakymo baigtu, kol nepamatys įvykio message_stop.

Antra subtilybė yra ta, kad srautas nekeičia sąnaudų. Nesvarbu, ar gausite atsakymą su srautu, ar be jo, tokeno kainai įtakos neturi; srautas tik pagerina patirtį ir ištvermę. Taigi „jei transliuosime, ar jie bus pigesni? Atsakymas į klausimą yra neigiamas – dėl išlaidų pažiūrėkite į 5 ir 6 blokus (modelio pasirinkimas, talpykla).

Trečias punktas – išlaikyti praktinę pusiausvyrą: esant gyviems asistentams, labai vertinamas greitas pirmojo žodžio atėjimas (suvokiamas vėlavimas); Todėl paprašius modelio tiesiogiai įvesti atsakymą ir pirmiausia pateikti trumpą rezultatą (per sistemos raginimą 4-ame vienete), srauto nauda padauginama. Jei vartotojas pirmą sekundę pamato ką nors prasmingo, jis kantriai laukia tolesnių detalių. Kita vertus, srautas neturi įtakos fone vykdomoms užduotims, kurių išvestis pereina į kitą automatizavimo žingsnį; Vienintelis kriterijus yra tai, kad darbas būtų atliktas teisingai ir iki galo.

Apibendrinant

Srautinis atsakas nuskaitomas po gabalėlio, sumažinant suvokiamą delsą ir užkertant kelią didelių pralaidų skirtajam laikui. Beveik privaloma gyvam asistentui ir ilgiems dokumentams gaminti; Tai nereikalinga trumpam/fono darbui. Ilgoje gamyboje, primetant struktūrą ir ilgį iš priekio su raginimu, pagerėja ir kokybė, ir atsekamumas; Kai srautas baigtas, stop_reason ir naudojimas tikrai patikrinami.

Taikymo užduotis

Pasirinkite du scenarijus: vieną tiesioginį / ilgą (pvz., pranešti klientui), vieną trumpą / foninį (pvz., žymėjimas). (1) Nuspręskite ir pagrįskite, ar naudosite srautą kiekvienam. (2) Parašykite raginimą, kuris nustato ilgojo scenarijaus struktūrą (antraštės + tikslinis ilgis). (3) Nustatykite max_tokens reikšmes. (4) Nurodykite, kokius patikrinimus atliksite naudodami stop_reason ir naudojimą srauto pabaigoje.

kontrolinis sąrašas

  • [ ] Galiu paaiškinti, kas yra srautinis perdavimas ir kaip jis sumažina suvokiamą delsą.
  • [ ] Supratau pagrindinius srauto ir deltos sujungimo įvykių tipus.
  • [ ] Žinau apie būtinybę perduoti srautą naudojant didelius max_tokens ir skirtojo laiko ryšį.
  • [ ] Galiu nuspręsti, kuriame darbo krūvyje naudosiu srautinį perdavimą, o kuriame ne.
  • [ ] Srauto pabaigoje galiu patikrinti stop_reason ir naudojimą.