POST/v1/chat
Gauti asistento atsakymą srautu (SSE)
chat
Kai už apkrovos balansavimo įrenginio veikia kelios API kopijos (adresas api.<domain>, 1.62.0), atsakymas ir jo įvykių buferis laikomi kopijos, kuri jį generuoja, atmintyje. Srautą su Last-Event-ID galima tęsti tik toje kopijoje.
Pakartotinė užklausa su tuo pačiu request_id ir pokalbiu, pasiekusi kitą kopiją jau baigus atsakymą, gauna išsaugotą atsakymą (token ir done, įvykiai numeruojami nuo 1), klausimas iš naujo neužduodamas. Pakartotinė užklausa, pasiekusi kitą kopiją, kol atsakymas dar generuojamas, sustabdo tą generavimą ir atsakymą sudaro iš naujo; antras klausimas taip pat nesukuriamas. Norėdami tęsti srautą be naujo generavimo, išlaikykite ryšį su ta pačia kopija arba pakartokite užklausą po įvykio done.
Autentifikavimas
Siųskite API raktą antraštėje Authorization: Authorization: Bearer <raktas>.
Antraštės parametrai
X-View-AsstringTik API raktams su vaidmeniu
admin. Užklausa vykdoma duomenų profilio<profile>[:viewer|verifier|editor]vardu, pvz.,employee:viewer. Diegimo raktas šios antraštės naudoti negali (403).
Slapuko parametrai
kb_view_asstringRežimo „View as“ (žiūrėti kaip) sesijos slapukas.
POST /auth/view-asjį nustato, oDELETE /auth/view-asišvalo.
Užklausos turinys
application/json
items ≥ 1
collectionstringNumatytoji reikšmė: "default"
tagsarray of string | nullexportstring | nullcard_idsarray of string | nullitems ≤ 50
streambooleanNumatytoji reikšmė: false
conversation_idstring | nulllength ≤ 64
originstring | nulltoolsboolean | nullbypass_cachebooleanNeimti atsakymo iš atsakymų podėlio (mygtukas „Get a fresh answer“ po atsakymu iš podėlio). Naujas atsakymas pakeičia įrašą podėlyje.
Numatytoji reikšmė: false
languagestring | nullAtsakymo kalba: ISO 639-1 kodas (
de,en,ru, …), kad atsakymas būtų ta kalba. Suautoarba be lauko kalba nustatoma pagal klausimą. Sąsaja kitos kalbos pasiūlymo kalbą perduoda aiškiai (Starter.language).scopeChatScope | nullKlausimo sritis: keli rinkiniai, šaltinis, žymos ir laikotarpis. Srities rinkiniai pakeičia
collection. Šaltinis susiaurina atsakymą iki savo rinkinio (ir savo kortelių). Žymos pridedamos prietags. Laikotarpis apriboja finansinius atsakymus tuo laikotarpiu. Galima pasirinkti tik tai, ką naudotojas mato (rinkiniai:collections.no_access/collections.not_found; šaltinis:sources.not_found). Suconversation_idsritis išsaugoma pokalbyje. Be lauko taikoma pokalbio sritis;nullarba tuščia sritis ją išvalo.request_idstringKlausimo idempotentiškumo raktas. Siųskite tą patį raktą kiekviename vieno klausimo srauto pakartojime (pakartojime po ryšio nutrūkimo; čia
Last-Event-IDsrauto netęsia ir tik įrašomas į žurnalą). Pakartojimas su jau išsaugoto atsakymo raktu nesukuria antro klausimo: išsaugotas rezultatas išsiunčiamas iš naujo kaip vienas įvykisdone(irtokensu tekstu), net jei klausimų ar kreditų limitas išnaudotas. Jei ankstesnis atsakymas atsijungusiam klientui dar generuojamas, šis generavimas sustabdomas ir atsakymas generuojamas iš naujo.length ≤ 64
version_ofinteger (int64)Sukuria naują šio klausimo replikos versiją pokalbyje (
question_idiš pokalbio juostos): redaguotą klausimą (naujas tekstasmessages), iš naujo sugeneruotą atsakymą (tas pats tekstas, paprastai subypass_cache) arba tą patį klausimą su kituquality(pavyzdžiui,precisepofastatsakymo). Ankstesnė klausimo ir atsakymo pora išsaugoma. Po jos einančios replikos lieka jos šakoje ir juostoje nerodomos, kol pasirinkta nauja versija (FeedItem.versions,POST /v1/conversations/{conv_id}/versions). Atsakymui naudojama istorija – pasirinkta šaka iki šios replikos. Versijosqualitypokalbio nustatymų nekeičia. Reikiaconversation_id; klausimas iš kito pokalbio grąžina404 questions.not_found.qualitystringPaieškos, iš kurios gautas rezultatas, greičio ir tikslumo pusiausvyra:
fast– greičiau,precise– tiksliau. Numatytoji reikšmė:precise.Leidžiamos reikšmės:
fastprecise
Atsakai
200Su `stream=true`: `text/event-stream`. Kiekvieną įvykį sudaro eilutės `id: <number>` (įvykio eilės numeris sraute, pradedant nuo 1) ir `data: <JSON>`, po jų – tuščia eilutė. Laukai `event:` ir `retry:` nenaudojami; įvykio tipas nurodomas lauke `type` (`ChatEvent`).
Su stream=true: text/event-stream. Kiekvieną įvykį sudaro eilutės id: <number> (įvykio eilės numeris sraute, pradedant nuo 1) ir data: <JSON>, po jų – tuščia eilutė. Laukai event: ir retry: nenaudojami; įvykio tipas nurodomas lauke type (ChatEvent).
Klausimas su request_id atsakomas nepriklausomai nuo ryšio. Atsijungimas atsakymo nesustabdo: jis užbaigiamas ir išsaugomas pokalbyje (iki 10 minučių). Pakartojus tą pačią užklausą (tas pats request_id ir pokalbis), prisijungiama prie vykdomo atsakymo, o su antrašte Last-Event-ID gaunami po to numerio einantys įvykiai, todėl srautas tęsiasi su tais pačiais įvykių numeriais. Jei srauto nuo to numerio tęsti neįmanoma, pakartotinė užklausa gauna srautą nuo pradžių: tada pirmojo įvykio numeris yra ne didesnis už Last-Event-ID, ir klientas atsakymą pradeda iš naujo. Jei atsakymas jau baigtas ir jo įvykių buferis atlaisvintas (po 3 minučių), išsaugotas rezultatas siunčiamas dar kartą (token ir done, numeruojami nuo 1), klausimas iš naujo neužduodamas; kitaip atsakymas generuojamas iš naujo. Norėdami sustabdyti tokį atsakymą, iškvieskite POST /v1/chat/cancel. Be request_id kliento atsijungimas atšaukia atsakymą.
Po pirmojo įvykio, kol atsakymas vykdomas, serveris kas 15 sekundžių siunčia komentarą : ping; jį praleiskite. Įvykių tvarka: įvykiai stage (eiga), meta, sources, data, tada atsakymo tekstas įvykiuose token, tada done. Prieš atsakymo tekstą sources ir data gali kartotis ir gali atsirasti įvykių tool; tekstas gali ateiti vienu token arba dalimis. Atsakymas iš podėlio: meta (su cached), sources, data, token, done. Klaida, įvykusi srautui jau prasidėjus, ateina kaip įvykis error, o srautas užsidaro be done; srauto HTTP būsena visada 200. Po done gali ateiti įvykis followups su siūlomais tolesniais klausimais. Neapdorojamų įvykių tipų nepaisykite.
Su stream=false: application/json su turiniu AnswerResponse (ir conversation_id).
Atsako antraštės
RateLimit-PolicyGaliojantys limitai IETF juodraščio
draft-ietf-httpapi-ratelimit-headersformatu: kableliais atskirti elementai"<name>";q=<quota>;w=<window in seconds>.key– API rakto užklausų dažnis (kvota – pliūpsnis, laiko langas – laikas, per kurį kvota visiškai atsistato; sesijai taiuser, be prisijungimo duomenų –ip);minute,dayirmonth– organizacijos kvotos kalendorinei minutei, dienai ir mėnesiui pagal UTC.RateLimitKiek liko kiekvieno
RateLimit-Policylimito:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitGriežčiausio
RateLimit-Policyįrašo (kuriame liko mažiausiai užklausų) limitas.X-RateLimit-RemainingLikusių užklausų skaičius pagal griežčiausią limitą.
X-RateLimit-ResetSekundės iki griežčiausio limito atsistatymo.
text/event-stream
application/json
answerstringprivalomasquestion_idintegerprivalomasquerystringcollectionstringprivalomasprovenancearray of NumberProvenanceemptystringLeidžiamos reikšmės:
no_hitsrestrictedguardrailno_data_for_periodbasisAnswerBasisverificationAnswerVerificationalt_periodsarray of AnswerAltPerioditems ≤ 6
drilldownarray of AnswerDrilldownitems ≤ 20
restrictedRestrictedInfoguardrailGuardrailVerdictverified_onlybooleancachedbooleancache_hitAnswerCacheHitout_of_scopeAnswerOutOfScopeattachmentsarray of Attachmentexport_errorstringtoolsstring | nullKodėl šiam atsakymui naudoti įrankiai:
request(paprašyta aiškiai);compare,compute,action(pagal klausimą);needs_calc(reikia skaičiavimų su lentelėmis);summary(rinkinio ar dokumentų apžvalga);mcp(organizacija prijungė išorinius MCP serverius).Leidžiamos reikšmės:
requestcomparecomputeactionneeds_calcsummarymcpnulltool_callsarray of ToolCallInfocalculationsarray of Calculationpending_actionsarray of PendingActionconversation_idstringTik
POST /v1/chatsu pokalbiu.answer_idstringAtsakymo objekto ID.
400Užklausa netinkama: parametro reikšmė arba objekto būsena neleidžia atlikti veiksmo (`detail` – pranešimas).
Atsako antraštės
RateLimit-PolicyGaliojantys limitai IETF juodraščio
draft-ietf-httpapi-ratelimit-headersformatu: kableliais atskirti elementai"<name>";q=<quota>;w=<window in seconds>.key– API rakto užklausų dažnis (kvota – pliūpsnis, laiko langas – laikas, per kurį kvota visiškai atsistato; sesijai taiuser, be prisijungimo duomenų –ip);minute,dayirmonth– organizacijos kvotos kalendorinei minutei, dienai ir mėnesiui pagal UTC.RateLimitKiek liko kiekvieno
RateLimit-Policylimito:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitGriežčiausio
RateLimit-Policyįrašo (kuriame liko mažiausiai užklausų) limitas.X-RateLimit-RemainingLikusių užklausų skaičius pagal griežčiausią limitą.
X-RateLimit-ResetSekundės iki griežčiausio limito atsistatymo.
application/json
401Prisijungimo duomenys neišsiųsti (nei sesijos slapukas, nei API raktas) arba raktas nerastas.
Atsako antraštės
RateLimit-PolicyGaliojantys limitai IETF juodraščio
draft-ietf-httpapi-ratelimit-headersformatu: kableliais atskirti elementai"<name>";q=<quota>;w=<window in seconds>.key– API rakto užklausų dažnis (kvota – pliūpsnis, laiko langas – laikas, per kurį kvota visiškai atsistato; sesijai taiuser, be prisijungimo duomenų –ip);minute,dayirmonth– organizacijos kvotos kalendorinei minutei, dienai ir mėnesiui pagal UTC.RateLimitKiek liko kiekvieno
RateLimit-Policylimito:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitGriežčiausio
RateLimit-Policyįrašo (kuriame liko mažiausiai užklausų) limitas.X-RateLimit-RemainingLikusių užklausų skaičius pagal griežčiausią limitą.
X-RateLimit-ResetSekundės iki griežčiausio limito atsistatymo.
application/json
403Veiksmas neleidžiamas: vaidmuo nesuteikia reikiamų teisių, nėra prieigos prie rinkinio ar kortelės, užklausa vykdoma režimu „View as“ arba organizacijos veikla sustabdyta ar organizacija ištrinta (`detail` – objektas su `code: org_suspended | org_deleted`).
Atsako antraštės
RateLimit-PolicyGaliojantys limitai IETF juodraščio
draft-ietf-httpapi-ratelimit-headersformatu: kableliais atskirti elementai"<name>";q=<quota>;w=<window in seconds>.key– API rakto užklausų dažnis (kvota – pliūpsnis, laiko langas – laikas, per kurį kvota visiškai atsistato; sesijai taiuser, be prisijungimo duomenų –ip);minute,dayirmonth– organizacijos kvotos kalendorinei minutei, dienai ir mėnesiui pagal UTC.RateLimitKiek liko kiekvieno
RateLimit-Policylimito:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitGriežčiausio
RateLimit-Policyįrašo (kuriame liko mažiausiai užklausų) limitas.X-RateLimit-RemainingLikusių užklausų skaičius pagal griežčiausią limitą.
X-RateLimit-ResetSekundės iki griežčiausio limito atsistatymo.
application/json
404Objekto nėra arba jis jums nepasiekiamas. API nepatvirtina, kad ribotos prieigos objektas egzistuoja.
Atsako antraštės
RateLimit-PolicyGaliojantys limitai IETF juodraščio
draft-ietf-httpapi-ratelimit-headersformatu: kableliais atskirti elementai"<name>";q=<quota>;w=<window in seconds>.key– API rakto užklausų dažnis (kvota – pliūpsnis, laiko langas – laikas, per kurį kvota visiškai atsistato; sesijai taiuser, be prisijungimo duomenų –ip);minute,dayirmonth– organizacijos kvotos kalendorinei minutei, dienai ir mėnesiui pagal UTC.RateLimitKiek liko kiekvieno
RateLimit-Policylimito:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitGriežčiausio
RateLimit-Policyįrašo (kuriame liko mažiausiai užklausų) limitas.X-RateLimit-RemainingLikusių užklausų skaičius pagal griežčiausią limitą.
X-RateLimit-ResetSekundės iki griežčiausio limito atsistatymo.
application/json
422Validavimo klaida: turinys ar parametrai neatitinka schemos (`detail` – validavimo klaidų sąrašas) arba parametro reikšmė nepatenka į leistiną intervalą (`detail` – pranešimas).
Atsako antraštės
RateLimit-PolicyGaliojantys limitai IETF juodraščio
draft-ietf-httpapi-ratelimit-headersformatu: kableliais atskirti elementai"<name>";q=<quota>;w=<window in seconds>.key– API rakto užklausų dažnis (kvota – pliūpsnis, laiko langas – laikas, per kurį kvota visiškai atsistato; sesijai taiuser, be prisijungimo duomenų –ip);minute,dayirmonth– organizacijos kvotos kalendorinei minutei, dienai ir mėnesiui pagal UTC.RateLimitKiek liko kiekvieno
RateLimit-Policylimito:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitGriežčiausio
RateLimit-Policyįrašo (kuriame liko mažiausiai užklausų) limitas.X-RateLimit-RemainingLikusių užklausų skaičius pagal griežčiausią limitą.
X-RateLimit-ResetSekundės iki griežčiausio limito atsistatymo.
application/json
429Per daug užklausų (`api.rate_limited`), išnaudota organizacijos minutės, dienos ar mėnesio kvota (`api.quota_exceeded`; `error.details` pateikia `quota`, `limit` ir `reset_at`), pasiektas organizacijos limitas arba atsakymų paslauga užimta (`answers.engine_busy`). Palaukite tiek, kiek nurodyta antraštėje `Retry-After`.
Atsako antraštės
Retry-AfterKiek sekundžių palaukti prieš kartojant užklausą.
RateLimit-PolicyGaliojantys limitai IETF juodraščio
draft-ietf-httpapi-ratelimit-headersformatu: kableliais atskirti elementai"<name>";q=<quota>;w=<window in seconds>.key– API rakto užklausų dažnis (kvota – pliūpsnis, laiko langas – laikas, per kurį kvota visiškai atsistato; sesijai taiuser, be prisijungimo duomenų –ip);minute,dayirmonth– organizacijos kvotos kalendorinei minutei, dienai ir mėnesiui pagal UTC.RateLimitKiek liko kiekvieno
RateLimit-Policylimito:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitGriežčiausio
RateLimit-Policyįrašo (kuriame liko mažiausiai užklausų) limitas.X-RateLimit-RemainingLikusių užklausų skaičius pagal griežčiausią limitą.
X-RateLimit-ResetSekundės iki griežčiausio limito atsistatymo.
application/json
Klaidų kodai
Kodai, kuriuos ši operacija gali grąžinti lauke error.code, be bendrųjų kodų, galimų bet kuriai užklausai.
- 400answers.empty_question
- 409answers.external_ai_disabled
- 400answers.last_message_not_user
- 404answers.no_collections
- 422answers.scope_invalid
- 401auth.not_authenticated
- 403auth.system_scope
- 403collections.no_access
- 404collections.not_found
- 404conversations.not_found
- 422conversations.title_empty
- 429limits.concurrent_answers
- 429limits.questions
- 403org.deleted
- 403org.suspended
- 404sources.not_found
- 403view_as.read_only
Saugūs pakartojimai
Su kiekviena POST ir PATCH užklausa siųskite antraštę Idempotency-Key (pavyzdžiui, UUID). Pakartojus užklausą su tuo pačiu raktu per 24 valandas, grąžinamas išsaugotas atsakas, o užklausa iš naujo nevykdoma.
Užklausų dažnio limitai
Atsakuose yra antraštės RateLimit ir RateLimit-Policy bei ankstesnės X-RateLimit-Limit, X-RateLimit-Remaining ir X-RateLimit-Reset. Atsake 429 yra antraštė Retry-After sekundėmis: palaukite ir pakartokite užklausą.