Tokenide arvestuse voogesitus AI API lüüsis: lõppkasutus, tühistamised ja osalised vastused
Voogesitus parandab tajutavat latentsust, kuid see võib rikkuda AI kasutusanalüüsi ja arveldamise, kui lüüs kasutab ainult puhverservereid. Siin on praktiline oleku-masina muster lõppkasutuse, katkestatud voogude, pakkuja vigade ja osaliste vastuste jäädvustamiseks.
LLM-i voogesituse vastuseid on lihtne puhverserveriga kasutada ja neid on raske õigesti arveldada. Kui AI API lüüs edastab serveri poolt saadetud sündmused kliendile, kuid käsitleb esimesi tükke kasutuskirjetena, liigub rentnike analüüs. Triivimine ilmneb tavaliselt selliste vaidluste puhul nagu: "kasutaja nägi ainult poolt vastust", "teenusepakkuja esitas rohkem arveid, kui meie armatuurlaud näitab", "kvoot vabastati liiga vara" või "ajalõpp tekitas märke, kuid arve rida ei olnud."
Põhiprobleem seisneb selles, et voogesitatud kõned ei ole üks sündmus. Need on jada: taotlus on vastu võetud, ülesvoolu voog avatud, baidid edastatud, lõppkasutus on teatatud, teenusepakkuja peatatud, kliendi ühendus katkestatud, lüüsi ajalõpp ja arveldamine. Usaldusväärne lüüs peaks neid olekuid selgesõnaliselt modelleerima, selle asemel, et eeldada, et lõpetatud HTTP-vastus on ainus edukas tee.
Tõrkerežiim: voogesitus peidab arvestuspiiri
Mitte voogesitatud lõpetamised tagastavad tavaliselt ühe vastuseobjekti koos kasutuse metaandmetega. Lüüs võib selle kasutuse normaliseerida, kirjutada pearaamatu rida, värskendada kvooti ja väljastada analüüsi ühe käiguga.
Voogesitus muudab piiri. Kasutuskogemus on järkjärguline, kuid arveldustõde võib jõuda lõpus, pakkujaspetsiifilise lõppsündmuse, kumulatiivse delta, SDK koondvastuse või hiljem pakkuja aruandluse API-de kaudu. Kui klient katkestab ühenduse enne lõplikku kasutussündmust, võis lüüs edastada ainult osa vastusest, samal ajal kui teenusepakkuja genereeris ja arveldas veel märke.
Fakt: OpenAI dokumendid, mille kohaselt voogesituse helistajad, kes soovivad kasutusandmeid, peaksid määrama stream_options väärtusega include_usage. OpenAI pakub ka organisatsiooni tasemel kasutus- ja kulude lõpp-punkte, märkides samas, et kasutus ja kulud ei pruugi alati rahalistel eesmärkidel ideaalselt kokku sobida.
Fakt: antroopne voogesitus kasutab serveri saadetud sündmusi, nagu message_start, content_block_delta, message_delta ja message_stop. Selle message_delta kasutusteave on kumulatiivne, seega ei tohi lüüs iga kasutuse deltat kokku liita.
Fakt: Gemini ja Vertexi stiilis voogesituse API-d võivad paljastada täiendavaid tükke, samas kui SDK-d võivad pakkuda ka koondatud vastuseobjekti. Lüüside puhul võib see koondatud tee olla täielikuks kasutuseks parem allikas kui ainult nähtavad tükid.
Kasutage vooolekumasinat, mitte tõeväärtuslikku edulippu
Voogesitustaotlusel peab olema püsiv kasutusrekord enne ülesvoolu kõne algust. See kirje peaks liikuma läbi selgesõnaliste olekute. Praktiline miinimum on:
aktsepteeritud: lüüs autendis võtme, omistas rentniku ja lõi avatud pearaamaturea.first_byte_sent: vähemalt üks väljundsündmus jõudis allavoolukliendini.provider_completed: ülesvoolu pakkuja väljastas tavalise stoppsignaali või lõpetas vastuseobjekti.client_aborted: allavoolu pesa suletakse enne tavalist lüüsi lõpetamist.provider_error: ülesvoolu pakkuja tagastas veateate pärast voo algust või enne lõppkasutuse saabumist.gateway_timeout: lüüs jõustas oma latentsuseelarve ja lõpetas taotluse.arveldatud: lüüs teisendas kasutuse rentniku kuludeks ja kvooditarbimiseks.ühildatud: hilisemad pakkuja kasutus- või kuluandmed kinnitasid või korrigeerisid rida.
See mudel hoiab ära levinud analüüsivea: iga teksti tootnud voo märgistamine "edukaks ja täpseks". Voog võib olla kasutajale kasulik, teenusepakkuja poolt mittetäielik, prognoositav arveldamiseks ja samal ajal ootel kooskõlastus.
Soovitatavad pearaamatu väljad
Hoidke päringu aja rida väikesena, kuid selgesõnalisena:
Oluline vahe on output_tokens_billed versus output_tokens_delivered_estimate. Kasutajad hoolivad sellest, mis nende rakenduseni jõudis. Finance hoolib sellest, mida pakkuja arve esitas. Need numbrid võivad erineda pärast ühenduse katkemist, tööriistakõnede vooge, peidetud arutlusmärke, vahemällu salvestatud märke, ohutuspeatusi või lüüsi ajalõppusid.
Pakkujapõhised püüdmisreeglid
Pakkujaneutraalne OpenAI-ga ühilduv API on kasulik rakenduste arendajatele, kuid lüüsiadapter vajab siiski pakkujapõhiseid arvestusreegleid.
OpenAI-ga ühilduv voogesitus
OpenAI marsruutide puhul avage lüüsivalik, mis võimaldab ülesvoolu kasutamise aruandlust, kui seda toetatakse. Levinud muster on aktsepteerida lüüsitaseme vaikeseadeid, näiteks:
Kui allavoolu helistaja selle välja jätab, saab lüüs otsustada, kas sisestada see marsruutidele, kus see ühildub. Dokumenteerige see käitumine, kuna mõned kliendid eeldavad täpset juhtmete ühilduvust ja mõned mudelid või ülesvoolu ei pruugi lõppkasutust samal viisil toetada.
Soovitus: ärge arveldage üürniku kulusid varaste osade alusel. Hoidke pearaamatu rida avatuna, kuni viimane kasutussündmus on jäädvustatud, pakkuja vastus lõpeb kasutuseta või voog siseneb vea- või tühistamisteele.
Antroopiline voogesitus
Anthropic'i kumulatiivne kasutamine nõuab teistsugust reeglit. Kui lüüs näeb kolme message_delta sündmust, mille väljundlubade arv on 10, 25 ja 40, on väljundi arv 40, mitte 75.
lase latestUsage = null;
for await (const event of anthropicStream) {
if (sündmus.tüüp === "message_delta" && event.usage) {
if (latestUsage && event.usage.output_tokens < latestUsage.output_tokens) {
emit("kumulatiivne_kasutus_tagasi", requestId);
}
latestUsage = event.usage;
}
edasiKliendile(sündmus);
}
setttleFromLatestCumulativeUsage(latestUsage);
Soovitus: salvestage viimane kumulatiivne kasutusväärtus ja edastage jälgitavussündmus, kui see taandub. Regressioon võib viidata parseri vigadele, dubleeritud sündmustele, pakkuja muudatustele või segatud voogudele.
Kaksikute ja Vertexi stiilis voogesitus
Gemini toetab voogesituse tükke, et vähendada tajutavat latentsust. Vertex-stiilis SDK-des võib voogesitus paljastada nii asünkroonse voo kui ka koondatud vastuseobjekti. Lüüs peaks säilitama selle koondatud tee, kui see on saadaval.
const streamingResult = ootama model.generateContentStream(request);
for await (const chunk of streamingResult.stream) {
edasiChunk(tükk);
countDeliveredBytesOrText(tükk);
}
const aggregated = oodake streamingResult.response;
setttleFromAggregatedUsage(agregated);
Soovitus: vältige kogu arvestuse loomist nähtavatest tükkidest, kui SDK annab täidetud vastusekirje. Tükid on latentsusaja jaoks. Lõppobjekt on sageli arvelduse ja analüüsi jaoks parem.
Klientide lahtiühendamiste käsitlemine esmaklassiliste raamatupidamissündmustena
Klientide ühenduse katkestamine on koht, kus paljud lüüsid kaotavad raha või võtavad klientidelt üle tasu. Brauseri vahekaart sulgub, mobiilsidevõrk katkeb või rakendus tühistab päringu. Lüüs märkab, et allavoolu pistikupesa on suletud, kuid ülesvoolu pakkuja võib siiski genereerida.
Lüüs peaks tegema selge poliitikavaliku:
- Tühista kohe ülesvoolu: vähendab raisatud tootmis- ja teenusepakkuja kulusid, kuid võib rikkuda töövooge, kus taustaprogramm vajab tulemust ka pärast kasutajaliidese lahtiühendamist.
- Jätkake taustal ülesvoolu: võib säilitada tööd serveripoolsete tarbijate jaoks, kuid kasutaja ei pruugi näha kõiki loodud ja arveldatud märke.
- Marsruudist sõltuv käitumine: tühistage interaktiivse vestluse jaoks, jätkake töölaadsete töövoogude jaoks ja tehke seade üürnikele nähtavaks.
Interaktiivse voogesituse praktiline vaikeseade on tühistada ülesvoolu, kui allavoolu klient katkestab ühenduse, ja seejärel märkida pearaamatu rida kui client_aborted. Kui lõppkasutus saabub tühistamise ajal, arveldage selle autoriteetse kasutusega. Kui ei, siis märkige rida estimated või pending_conciliation, mitte ei teeskle, et see on täpne.
downstream.on("close", async () => {
if (!providerCompleted) {
pearaamat.markClientAborted(requestId);
oota ülesvoolu.abort().catch(() => {
ledger.emit("ülesvoolu_tühista_ebaõnnestunud", taotluseId);
});
}
});
Soovitus: tooge välja läbipaistvad arveldussildid, nagu lõplik, provider_reconciled, hinnanguline, loobunud või ootel_kokkuleppimine. See on paremini kaitstud kui iga voogesitatava kõne näitamine kohe täpsena.
Kvoodi jõustamine voo ajal
Täpne arveldamine sõltub tavaliselt teenusepakkuja lõppkasutusest, kuid kvoodi jõustamine ei saa alati lõpuni oodata. Raske eelarvega üürnikul ei tohiks lubada lõputult voogesitada, kuna täpne kasutus pole lennu keskel saadaval.
Kasutage kahte mehhanismi koos:
- Lennueelne broneerimine: reserveerige hinnanguline maksimumsumma mudeli, taotletud maksimaalsete lubade, rentniku poliitika ja praeguse saldo alusel.
- Voogesituse rõhu kontrollid: voo ajal edastatud väljundi hindamine ja peatamine, kui taotlus ületab konfigureeritud ohutuspiiri.
See on kontrollimehhanism, mitte lõpparve. Pakkujad võivad vahemällu salvestatud märke, arutlusmärke, multimodaalseid märke või peidetud märke loendada erinevalt lüüsi hinnangust.
Muu: reaalajas prognoosid aitavad eelarveid jõustada, kuid need võivad erineda teenusepakkuja arveldusmärkidest. Lõplik arveldus peaks võimaluse korral kasutama autoriteetset teenusepakkuja kasutust ja vastavusse viimine peaks hinnanguid hiljem kohandama.
Vaatlussündmused, mis tabavad raamatupidamisvigu
Voogesituse arveldamise tõrkeid on lihtsam siluda, kui lüüs väljastab sihitud sündmusi, mitte ainult üldist päringulogi. Lisage selliseid sündmusi nagu:
final_usage_missing: voog lõppes ilma autoriteetse kasutuseta.cumulative_usage_regressed: kumulatiivne lubade arv on nihutatud tagasi.stream_ended_without_stop_event: tavalist pakkuja stoppmarkerit ei täheldatud.aborted_after_provider_completion: teenusepakkuja lõpetas, kuid allavoolu klient suleti enne, kui lüüs lõpetas edastamise.settled_from_estimate: rentniku pearaamat kasutas hinnangut, kuna lõppkasutus ei olnud saadaval.reconciliation_adjusted_usage: teenusepakkuja aruandlus muutis hiljem rida.
Fakt: OpenTelemetry GenAI semantilised kokkulepped soovitavad võimaluse korral kasutada voogesituse vastuste jaoks pakkuja tagastatud kasutusteavet ja hoiatavad kasutusmõõdikute aruandluse eest, kui žetoonide arvu pole võimalik tõhusalt või täpselt hankida.
AI kasutusanalüütika puhul tähendab see, et armatuurlauad peaksid toetama usaldustasemeid. Diagramm, mis segab lõplikke, hinnangulisi ja kooskõlastatud väärtusi ilma siltideta, võib näida puhas, kuid eksitada finants- ja tugitiime.
Voogesitusarvestuse vastavustestid
Ärge lootke õnneliku tee vestlusjuhise käsitsi testimisele. Igal pakkuja adapteril peaksid olema vastavustestid juhtudeks, mis rikuvad pearaamatuid:
- Tavaline voog: lõppkasutus saabub, peatumissündmust täheldati, pearaamat loetakse
lõplikuks. - Tööriistakõnede voog: tööriistakutsete deltad suunatakse edasi, kasutus jäädvustatakse, struktureeritud metaandmed ei riku lubade loendamist.
- Ohutus- või keeldumispeatus: teenusepakkuja peatub varakult, kasutamine laheneb endiselt õigesti.
- Kliendi sundühenduse katkestamine: allavoolu sulgub pärast osalist väljundit; ülesvoolu tühistatakse või jätkatakse vastavalt poliitikale.
- 5xx ülesvoolu pärast osalist väljundit: lüüs salvestab osalise edastamise ega märgi taotlust puhtalt õnnestunuks.
- Lüüsi ajalõpp enne lõplikku kasutamist: rida muutub hinnanguliseks või ootel on kooskõlastamine.
- Puuduv viimane sündmus: adapter väljastab
final_usage_missingja väldib täpseid arveldussilte.
Need testid peaksid kinnitama olekuüleminekuid, pearaamatu välju, emiteeritud jälgitavuse sündmusi ja allavoolu käitumist. Baitide kaupa voo ühilduvusest ei piisa; raamatupidamislikud kõrvalmõjud on osa lepingust.
Praktilise rakendamise kontroll-loend
- Enne ülesvoolu päringu saatmist looge kasutusreskontra rida.
- Salvestage üürniku, võtme, kasutaja, mudeli, marsruudi, pakkuja ja päringu identifikaatorid päringu ajal.
- Lubage pakkuja lõppkasutuse aruandlus, kui seda toetatakse, näiteks OpenAI-ga ühilduv
stream_options.include_usage. - Kumulatiivsete pakkujate puhul salvestage sündmuste summeerimise asemel uusim kasutusväärtus.
- Säilitage koondatud vastuseobjektid, kui SDK-d neid pakuvad.
- Jälgige tarnitud väljundit teenusepakkuja arveldatud kasutusest eraldi.
- Ühenduse katkestamisel tühistage ülesvoolu vastavalt marsruudipoliitikale ja märkige
klient_katkestatud. - Kasutage läbipaistvaid arveldusolekuid: lõplik, hinnanguline, kooskõlastamise ootel, pakkuja kooskõlastatud või loobutud.
- Edasta raamatupidamisspetsiifilisi jälgitavuse sündmusi.
- Levitage hiljem teenusepakkuja kasutus- või kuluaruannetega, kui need on saadaval, säilitades samas päringuaegse rentniku omistamise.
Mida üürnikele näidata
Üürnikud ei vaja iga sisemist sündmust, kuid nad vajavad ausaid silte. Kasulik kasutustabel võib näidata:
- Olek: lõplik, hinnanguline või kooskõlastatud.
- Taotlemise tulemus: lõpetatud, klient katkestati, pakkuja viga või lüüsi ajalõpp.
- Edastatud väljund: kliendile saadetud ligikaudne tekst või baidid.
- Arveldatud märgid: teenusepakkuja normaalkasutus, mida kasutatakse kulu jaoks.
- Kohandamine: mis tahes hilisem leppimise delta.
See disain vähendab toe ebaselgust. Kui kasutaja nägi ainult osa vastusest, saab armatuurlaual selgitada, kas teenusepakkuja on juba lõpetanud, kas lüüs tühistati ülesvoolu ja kas tasu on lõplik või hinnanguline.
Soovitused versus ennustused
Soovitused: käsitlege voogesitatud päringuid olekumasinatena, oodake enne täpset arveldamist autoriteetset lõppkasutust, eraldage tarnitud väljund arveldatud kasutusest ja märgistage hinnangulised read ausalt. Pakkuja adapterid peaksid kodeerima pakkujaspetsiifilist kasutussemantikat, selle asemel, et lamendada iga voo üldiseks baidipuhverserveriks.
Prognoos: voogesitusarvestus muutub olulisemaks, kuna mudelid paljastavad rohkem varjatud tööd: arutlusmärgid, vahemällu salvestatud märgi allahindlused, multimodaalne töötlemine, tööriistade kasutamise jäljed ja ohutuspeatused. Lüüsid, mis juba eraldavad teenusepakkuja arveldatud kasutuse kliendi nähtavast väljundist, kohanduvad kergemini kui lüüsid, mis loevad ainult voogesitatud teksti.
Tehtitav järeldus
Kui teie lüüs toetab voogesitust, kontrollige ühte teed juba täna: sundige klient pärast paari esimest tükki lahtiühendamist ja kontrollige pearaamatu rida. Kui see ütleb "edu" koos täpse väljanägemisega märkide arvuga, siis teie analüüs tõenäoliselt valetab.
Parandus seisneb selles, et voogesitust ei tohi loobuda. Säilitage kiire kasutuskogemus, kuid muutke voo lõpetamise, tühistamise, pakkuja vigade, puuduva lõppkasutuse ja vastavusse viimise selgesõnalised raamatupidamisolekud. See annab tootetiimidele reageeriva väljundi, rahastavad meeskonnad kaitstud kulud ja tugimeeskonnad piisavalt tõendeid, et seletada osalisi vastuseid ilma arvamata.