POST/v1/chat
Streamovať odpoveď asistenta (SSE)
chat
Pri viacerých kópiách API za vyrovnávačom záťaže (load balancer; adresa api.<domain>, 1.62.0) existujú odpoveď a medzipamäť jej udalostí v pamäti kópie, ktorá odpoveď generuje. Obnovenie streamu s Last-Event-ID funguje len na tejto kópii.
Opakovaná požiadavka s tým istým request_id a konverzáciou, ktorá sa po dokončení odpovede dostane na inú kópiu, dostane uloženú odpoveď (token a done, udalosti číslované od 1) bez opätovného položenia otázky. Opakovaná požiadavka, ktorá sa dostane na inú kópiu, kým sa odpoveď ešte generuje, toto generovanie zastaví a zostaví odpoveď nanovo; ani vtedy sa nevytvorí druhá otázka. Ak chcete obnoviť stream bez nového generovania, udržiavajte spojenie s tou istou kópiou alebo zopakujte požiadavku po udalosti done.
Autentifikácia
Odošlite kľúč API v hlavičke Authorization: Authorization: Bearer <kľúč>.
Parametre hlavičky
X-View-AsstringLen pre kľúče API s rolou
admin. Vykoná požiadavku v mene dátového profilu<profile>[:viewer|verifier|editor], napríklademployee:viewer. Inštalačný kľúč túto hlavičku použiť nemôže (403).
Parametre cookie
kb_view_asstringSúbor cookie režimu „View as“ pre reláciu.
POST /auth/view-asho nastaví aDELETE /auth/view-asho odstráni.
Telo požiadavky
application/json
items ≥ 1
collectionstringPredvolené: "default"
tagsarray of string | nullexportstring | nullcard_idsarray of string | nullitems ≤ 50
streambooleanPredvolené: false
conversation_idstring | nulllength ≤ 64
originstring | nulltoolsboolean | nullbypass_cachebooleanNepreberať odpoveď z vyrovnávacej pamäte odpovedí (tlačidlo „Get a fresh answer“ pod odpoveďou z vyrovnávacej pamäte). Nová odpoveď nahradí záznam vo vyrovnávacej pamäti.
Predvolené: false
languagestring | nullJazyk odpovede: kód ISO 639-1 (
de,en,ru, …), ak má odpoveď byť v tomto jazyku. Priautoalebo bez poľa sa jazyk určí z otázky. Rozhranie odovzdáva jazyk odporúčania v inom jazyku výslovne (Starter.language).scopeChatScope | nullRozsah otázky: niekoľko kolekcií, zdroj, štítky a obdobie. Kolekcie rozsahu nahrádzajú
collection. Zdroj zúži odpoveď na svoju kolekciu (a svoje vlastné karty). Štítky sa pridajú ktags. Obdobie obmedzí finančné odpovede na toto obdobie. Vybrať možno len to, čo používateľ vidí (kolekcie:collections.no_access/collections.not_found; zdroj:sources.not_found). Sconversation_idsa rozsah uloží v konverzácii. Bez poľa platí rozsah konverzácie;nullalebo prázdny rozsah ho vymaže.request_idstringKľúč idempotencie otázky. Rovnaký kľúč posielajte pri každom opakovaní streamu pre jednu otázku (opakovanie po odpojení; tu
Last-Event-IDstream neobnoví a len sa zaznamená do logu). Opakovanie s kľúčom odpovede, ktorá je už uložená, nevytvorí druhú otázku: uložený výsledok sa znova pošle ako jedna udalosťdone(atokens textom), aj keď je limit otázok alebo kreditov vyčerpaný. Ak sa predchádzajúca odpoveď pre odpojeného klienta ešte generuje, toto generovanie sa zastaví a odpoveď sa vygeneruje nanovo.length ≤ 64
version_ofinteger (int64)Vytvorí novú verziu kola tejto otázky v konverzácii (
question_idz priebehu konverzácie): upravenú otázku (nový text vmessages), znova vygenerovanú odpoveď (rovnaký text, zvyčajne sbypass_cache) alebo tú istú otázku s inou hodnotouquality(napríkladprecisepo odpovedifast). Predchádzajúca dvojica otázky a odpovede sa zachová. Kolá za ňou zostanú v jej vetve a kým je vybraná nová verzia, sú skryté v priebehu konverzácie (FeedItem.versions,POST /v1/conversations/{conv_id}/versions). Históriou pre odpoveď je vybraná vetva až po toto kolo.qualityverzie nemení nastavenia konverzácie. Vyžadujeconversation_id; otázka z inej konverzácie vráti404 questions.not_found.qualitystringPomer medzi rýchlosťou a presnosťou vyhľadávania, z ktorého výsledok vychádza:
fastje rýchlejší,preciseje presnejší. Predvolené:precise.Povolené hodnoty:
fastprecise
Odpovede
200So `stream=true`: `text/event-stream`. Každá udalosť sa skladá z riadkov `id: <number>` (poradové číslo udalosti v streame, od 1) a `data: <JSON>`, po ktorých nasleduje prázdny riadok. Polia `event:` a `retry:` sa nepoužívajú; typ udalosti je v poli `type` (`ChatEvent`).
So stream=true: text/event-stream. Každá udalosť sa skladá z riadkov id: <number> (poradové číslo udalosti v streame, od 1) a data: <JSON>, po ktorých nasleduje prázdny riadok. Polia event: a retry: sa nepoužívajú; typ udalosti je v poli type (ChatEvent).
Na otázku s request_id sa odpovedá nezávisle od spojenia. Odpojenie odpoveď nezastaví: dokončí sa a uloží do konverzácie (nanajvýš do 10 minút). Opakovanie tej istej požiadavky (rovnaké request_id a konverzácia) sa pripojí k rozpracovanej odpovedi a s hlavičkou Last-Event-ID dostane udalosti po tomto čísle, takže stream pokračuje s rovnakými číslami udalostí. Ak stream od tohto čísla pokračovať nemôže, opakovaná požiadavka dostane stream od začiatku: prvá udalosť má potom číslo nie väčšie ako Last-Event-ID a klient začne odpoveď odznova. Ak sa odpoveď už dokončila a medzipamäť jej udalostí bola uvoľnená (po 3 minútach), uložený výsledok sa pošle znova (token a done, číslované od 1) bez opätovného položenia otázky; inak sa odpoveď vygeneruje nanovo. Ak chcete takúto odpoveď zastaviť, zavolajte POST /v1/chat/cancel. Bez request_id odpojenie klienta odpoveď zruší.
Po prvej udalosti, kým odpoveď prebieha, server posiela každých 15 sekúnd komentár : ping; preskočte ho. Poradie udalostí: udalosti stage (priebeh), meta, sources, data, potom text odpovede v udalostiach token a nakoniec done. Pred textom odpovede sa sources a data môžu opakovať a môžu sa objaviť udalosti tool; text môže prísť ako jeden token alebo po častiach. Odpoveď z vyrovnávacej pamäte: meta (s cached), sources, data, token, done. Chyba po začatí streamu príde ako udalosť error a stream sa uzavrie bez done; stavový kód HTTP streamu je vždy 200. Po done môže prísť udalosť followups s odporúčanými ďalšími otázkami. Typy udalostí, ktoré nespracúvate, ignorujte.
So stream=false: application/json s telom AnswerResponse (a navyše conversation_id).
Hlavičky odpovede
RateLimit-PolicyPlatné limity vo formáte návrhu IETF
draft-ietf-httpapi-ratelimit-headers: položky oddelené čiarkami"<name>";q=<quota>;w=<window in seconds>.keyje frekvencia požiadaviek kľúča API (kvóta je nárazová špička, okno je čas na jej úplné doplnenie; pre reláciu je touser, bez prihlasovacích údajovip);minute,dayamonthsú kvóty organizácie na kalendárnu minútu, deň a mesiac v UTC.RateLimitČo zostáva z každého limitu v
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimit najprísnejšej položky v
RateLimit-Policy(tej, ktorej zostáva najmenej požiadaviek).X-RateLimit-RemainingPočet požiadaviek, ktoré zostávajú v rámci najprísnejšieho limitu.
X-RateLimit-ResetPočet sekúnd do obnovenia najprísnejšieho limitu.
text/event-stream
application/json
answerstringpovinnéquestion_idintegerpovinnéquerystringcollectionstringpovinnéprovenancearray of NumberProvenanceemptystringPovolené hodnoty:
no_hitsrestrictedguardrailno_data_for_periodbasisAnswerBasisverificationAnswerVerificationalt_periodsarray of AnswerAltPerioditems ≤ 6
drilldownarray of AnswerDrilldownitems ≤ 20
restrictedRestrictedInfoguardrailGuardrailVerdictverified_onlybooleancachedbooleancache_hitAnswerCacheHitout_of_scopeAnswerOutOfScopeattachmentsarray of Attachmentexport_errorstringtoolsstring | nullPrečo sa pri tejto odpovedi použili nástroje:
request(výslovne vyžiadané);compare,compute,action(podľa otázky);needs_calc(je potrebný výpočet nad tabuľkami);summary(prehľad kolekcie alebo dokumentov);mcp(organizácia pripojila externé servery MCP).Povolené hodnoty:
requestcomparecomputeactionneeds_calcsummarymcpnulltool_callsarray of ToolCallInfocalculationsarray of Calculationpending_actionsarray of PendingActionconversation_idstringLen pri
POST /v1/chats konverzáciou.answer_idstringID objektu odpovede.
400Požiadavka je neplatná: hodnota parametra alebo stav objektu akciu nedovoľuje (`detail` je správa).
Hlavičky odpovede
RateLimit-PolicyPlatné limity vo formáte návrhu IETF
draft-ietf-httpapi-ratelimit-headers: položky oddelené čiarkami"<name>";q=<quota>;w=<window in seconds>.keyje frekvencia požiadaviek kľúča API (kvóta je nárazová špička, okno je čas na jej úplné doplnenie; pre reláciu je touser, bez prihlasovacích údajovip);minute,dayamonthsú kvóty organizácie na kalendárnu minútu, deň a mesiac v UTC.RateLimitČo zostáva z každého limitu v
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimit najprísnejšej položky v
RateLimit-Policy(tej, ktorej zostáva najmenej požiadaviek).X-RateLimit-RemainingPočet požiadaviek, ktoré zostávajú v rámci najprísnejšieho limitu.
X-RateLimit-ResetPočet sekúnd do obnovenia najprísnejšieho limitu.
application/json
401Neboli odoslané žiadne prihlasovacie údaje (ani cookie relácie, ani kľúč API) alebo sa kľúč nenašiel.
Hlavičky odpovede
RateLimit-PolicyPlatné limity vo formáte návrhu IETF
draft-ietf-httpapi-ratelimit-headers: položky oddelené čiarkami"<name>";q=<quota>;w=<window in seconds>.keyje frekvencia požiadaviek kľúča API (kvóta je nárazová špička, okno je čas na jej úplné doplnenie; pre reláciu je touser, bez prihlasovacích údajovip);minute,dayamonthsú kvóty organizácie na kalendárnu minútu, deň a mesiac v UTC.RateLimitČo zostáva z každého limitu v
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimit najprísnejšej položky v
RateLimit-Policy(tej, ktorej zostáva najmenej požiadaviek).X-RateLimit-RemainingPočet požiadaviek, ktoré zostávajú v rámci najprísnejšieho limitu.
X-RateLimit-ResetPočet sekúnd do obnovenia najprísnejšieho limitu.
application/json
403Akcia nie je povolená: rola nestačí, chýba prístup ku kolekcii alebo karte, požiadavka beží v režime „View as“ alebo je organizácia pozastavená či odstránená (`detail` je objekt s `code: org_suspended | org_deleted`).
Hlavičky odpovede
RateLimit-PolicyPlatné limity vo formáte návrhu IETF
draft-ietf-httpapi-ratelimit-headers: položky oddelené čiarkami"<name>";q=<quota>;w=<window in seconds>.keyje frekvencia požiadaviek kľúča API (kvóta je nárazová špička, okno je čas na jej úplné doplnenie; pre reláciu je touser, bez prihlasovacích údajovip);minute,dayamonthsú kvóty organizácie na kalendárnu minútu, deň a mesiac v UTC.RateLimitČo zostáva z každého limitu v
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimit najprísnejšej položky v
RateLimit-Policy(tej, ktorej zostáva najmenej požiadaviek).X-RateLimit-RemainingPočet požiadaviek, ktoré zostávajú v rámci najprísnejšieho limitu.
X-RateLimit-ResetPočet sekúnd do obnovenia najprísnejšieho limitu.
application/json
404Objekt neexistuje alebo vám nie je dostupný. API nepotvrdzuje, že objekt s obmedzeným prístupom existuje.
Hlavičky odpovede
RateLimit-PolicyPlatné limity vo formáte návrhu IETF
draft-ietf-httpapi-ratelimit-headers: položky oddelené čiarkami"<name>";q=<quota>;w=<window in seconds>.keyje frekvencia požiadaviek kľúča API (kvóta je nárazová špička, okno je čas na jej úplné doplnenie; pre reláciu je touser, bez prihlasovacích údajovip);minute,dayamonthsú kvóty organizácie na kalendárnu minútu, deň a mesiac v UTC.RateLimitČo zostáva z každého limitu v
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimit najprísnejšej položky v
RateLimit-Policy(tej, ktorej zostáva najmenej požiadaviek).X-RateLimit-RemainingPočet požiadaviek, ktoré zostávajú v rámci najprísnejšieho limitu.
X-RateLimit-ResetPočet sekúnd do obnovenia najprísnejšieho limitu.
application/json
422Chyba validácie: telo alebo parametre nezodpovedajú schéme (`detail` je zoznam chýb validácie) alebo je hodnota parametra mimo rozsahu (`detail` je správa).
Hlavičky odpovede
RateLimit-PolicyPlatné limity vo formáte návrhu IETF
draft-ietf-httpapi-ratelimit-headers: položky oddelené čiarkami"<name>";q=<quota>;w=<window in seconds>.keyje frekvencia požiadaviek kľúča API (kvóta je nárazová špička, okno je čas na jej úplné doplnenie; pre reláciu je touser, bez prihlasovacích údajovip);minute,dayamonthsú kvóty organizácie na kalendárnu minútu, deň a mesiac v UTC.RateLimitČo zostáva z každého limitu v
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimit najprísnejšej položky v
RateLimit-Policy(tej, ktorej zostáva najmenej požiadaviek).X-RateLimit-RemainingPočet požiadaviek, ktoré zostávajú v rámci najprísnejšieho limitu.
X-RateLimit-ResetPočet sekúnd do obnovenia najprísnejšieho limitu.
application/json
429Príliš veľa požiadaviek (`api.rate_limited`), vyčerpaná kvóta organizácie na minútu, deň alebo mesiac (`api.quota_exceeded`; `error.details` obsahuje `quota`, `limit` a `reset_at`), dosiahnutý limit organizácie alebo zaneprázdnená služba odpovedí (`answers.engine_busy`). Počkajte čas uvedený v hlavičke `Retry-After`.
Hlavičky odpovede
Retry-AfterPočet sekúnd, ktoré treba počkať pred opakovaním požiadavky.
RateLimit-PolicyPlatné limity vo formáte návrhu IETF
draft-ietf-httpapi-ratelimit-headers: položky oddelené čiarkami"<name>";q=<quota>;w=<window in seconds>.keyje frekvencia požiadaviek kľúča API (kvóta je nárazová špička, okno je čas na jej úplné doplnenie; pre reláciu je touser, bez prihlasovacích údajovip);minute,dayamonthsú kvóty organizácie na kalendárnu minútu, deň a mesiac v UTC.RateLimitČo zostáva z každého limitu v
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimit najprísnejšej položky v
RateLimit-Policy(tej, ktorej zostáva najmenej požiadaviek).X-RateLimit-RemainingPočet požiadaviek, ktoré zostávajú v rámci najprísnejšieho limitu.
X-RateLimit-ResetPočet sekúnd do obnovenia najprísnejšieho limitu.
application/json
Chybové kódy
Kódy, ktoré táto operácia môže vrátiť v error.code, okrem všeobecných kódov každej požiadavky.
- 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
Bezpečné opakovanie
S každou požiadavkou POST a PATCH odošlite hlavičku Idempotency-Key (napríklad UUID). Opakovaná požiadavka s rovnakým kľúčom do 24 hodín vráti uloženú odpoveď namiesto toho, aby sa požiadavka vykonala znova.
Limity frekvencie
Odpovede obsahujú hlavičky RateLimit a RateLimit-Policy a staršie X-RateLimit-Limit, X-RateLimit-Remaining a X-RateLimit-Reset. Odpoveď 429 má hlavičku Retry-After v sekundách: počkajte a požiadavku zopakujte.