POST/v1/chat
Streamovat odpověď asistenta (SSE)
chat
Při několika kopiích API za nástrojem pro vyrovnávání zátěže (adresa api.<domain>, 1.62.0) se odpověď a vyrovnávací paměť jejích událostí nacházejí v paměti té kopie, která odpověď generuje. Obnovení streamu pomocí Last-Event-ID funguje jen na této kopii.
Opakovaný požadavek se stejným request_id a konverzací, který po dokončení odpovědi dorazí na jinou kopii, dostane uloženou odpověď (token a done, události číslované od 1), aniž by se otázka pokládala znovu. Opakovaný požadavek, který dorazí na jinou kopii, zatímco se odpověď ještě generuje, toto generování zastaví a sestaví odpověď znovu; ani v tom případě nevznikne druhá otázka. Chcete-li stream obnovit bez nového generování, udržujte spojení se stejnou kopií, nebo požadavek zopakujte po události done.
Autentizace
Odešlete klíč API v hlavičce Authorization: Authorization: Bearer <klíč>.
Parametry hlavičky
X-View-AsstringJen pro klíče API s rolí
admin. Provede požadavek jako datový profil<profile>[:viewer|verifier|editor], napříklademployee:viewer. Instalační klíč tuto hlavičku použít nemůže (403).
Parametry cookie
kb_view_asstringCookie režimu „View as“ pro relaci.
POST /auth/view-asji nastaví aDELETE /auth/view-asji smaže.
Tělo požadavku
application/json
items ≥ 1
collectionstringVýchozí: "default"
tagsarray of string | nullexportstring | nullcard_idsarray of string | nullitems ≤ 50
streambooleanVýchozí: false
conversation_idstring | nulllength ≤ 64
originstring | nulltoolsboolean | nullbypass_cachebooleanNebrat odpověď z mezipaměti odpovědí (tlačítko „Get a fresh answer“ pod odpovědí z mezipaměti). Nová odpověď nahradí záznam v mezipaměti.
Výchozí: false
languagestring | nullJazyk odpovědi: kód ISO 639-1 (
de,en,ru, …), aby odpověď byla v tomto jazyce. Sautonebo bez tohoto pole se jazyk určí podle otázky. Rozhraní předává jazyk návrhu v jiném jazyce výslovně (Starter.language).scopeChatScope | nullRozsah otázky: několik kolekcí, zdroj, štítky a období. Kolekce z rozsahu nahrazují
collection. Zdroj zúží odpověď na svou kolekci (a své vlastní karty). Štítky se přidají ktags. Období omezí finanční odpovědi na toto období. Vybrat lze jen to, co uživatel vidí (kolekce:collections.no_access/collections.not_found; zdroj:sources.not_found). Sconversation_idse rozsah uloží do konverzace. Bez tohoto pole platí rozsah konverzace;nullnebo prázdný rozsah ho vymaže.request_idstringKlíč idempotence otázky. Stejný klíč posílejte při každém opakování streamu pro jednu otázku (opakování po odpojení;
Last-Event-IDzde stream nenavazuje a jen se zaprotokoluje). Opakování s klíčem odpovědi, která už je uložená, nevytvoří druhou otázku: uložený výsledek se odešle znovu jako jedna událostdone(atokens textem), i když je vyčerpaný limit otázek nebo kreditů. Pokud se předchozí odpověď pro odpojeného klienta ještě generuje, generování se zastaví a odpověď se vygeneruje znovu.length ≤ 64
version_ofinteger (int64)Vytvoří novou verzi kola této otázky v konverzaci (
question_idz průběhu konverzace): upravenou otázku (nový text vmessages), znovu vygenerovanou odpověď (stejný text, obvykle sbypass_cache) nebo stejnou otázku s jinou hodnotouquality(napříkladprecisepo odpovědifast). Předchozí dvojice otázky a odpovědi se zachová. Kola po ní zůstávají v její větvi a jsou skrytá v průběhu konverzace, dokud je vybraná nová verze (FeedItem.versions,POST /v1/conversations/{conv_id}/versions). Historie použitá pro odpověď je vybraná větev až po toto kolo.qualityverze nemění nastavení konverzace. Vyžadujeconversation_id; otázka z jiné konverzace vrací404 questions.not_found.qualitystringPoměr mezi rychlostí a přesností vyhledávání, ze kterého výsledek vychází:
fastje rychlejší,precisepřesnější. Výchozí:precise.Povolené hodnoty:
fastprecise
Odpovědi
200Se `stream=true`: `text/event-stream`. Každá událost se skládá z řádků `id: <number>` (pořadové číslo události ve streamu, od 1) a `data: <JSON>`, za nimiž následuje prázdný řádek. Pole `event:` a `retry:` se nepoužívají; typ události je v poli `type` (`ChatEvent`).
Se stream=true: text/event-stream. Každá událost se skládá z řádků id: <number> (pořadové číslo události ve streamu, od 1) a data: <JSON>, za nimiž následuje prázdný řádek. Pole event: a retry: se nepoužívají; typ události je v poli type (ChatEvent).
Na otázku s request_id se odpovídá nezávisle na spojení. Odpojení odpověď nezastaví: dokončí se a uloží do konverzace (nejdéle po dobu 10 minut). Opakování stejného požadavku (stejné request_id a konverzace) se připojí k probíhající odpovědi a s hlavičkou Last-Event-ID dostane události po tomto čísle, takže stream pokračuje se stejnými čísly událostí. Pokud stream nemůže od tohoto čísla pokračovat, opakovaný požadavek dostane stream od začátku: první událost pak má číslo nejvýše rovné Last-Event-ID a klient začne odpověď skládat od začátku. Pokud odpověď už skončila a vyrovnávací paměť jejích událostí byla uvolněna (po 3 minutách), uložený výsledek se odešle znovu (token a done, číslované od 1), aniž by se otázka pokládala znovu; jinak se odpověď vygeneruje znovu. Chcete-li takovou odpověď zastavit, zavolejte POST /v1/chat/cancel. Bez request_id odpojení klienta odpověď zruší.
Po první události, dokud odpověď probíhá, server každých 15 sekund odešle komentář : ping; přeskočte ho. Pořadí událostí: události stage (průběh), meta, sources, data, pak text odpovědi v událostech token, pak done. Před textem odpovědi se sources a data mohou opakovat a mohou se objevit události tool; text může přijít jako jeden token nebo po částech. Odpověď z mezipaměti: meta (s cached), sources, data, token, done. Chyba po zahájení streamu přijde jako událost error a stream se uzavře bez done; stavový kód HTTP streamu je vždy 200. Po done může přijít událost followups s navrhovanými dalšími otázkami. Typy událostí, které nezpracováváte, ignorujte.
Se stream=false: application/json s tělem AnswerResponse (a navíc conversation_id).
Hlavičky odpovědi
RateLimit-PolicyPlatné limity ve formátu návrhu IETF
draft-ietf-httpapi-ratelimit-headers: položky oddělené čárkou"<name>";q=<quota>;w=<window in seconds>.keyje četnost požadavků klíče API (kvóta je nárazová špička, okno je doba jejího úplného obnovení; pro relaci je touser, bez přihlašovacích údajůip);minute,dayamonthjsou kvóty organizace na kalendářní minutu, den a měsíc v UTC.RateLimitKolik zbývá z každého limitu v
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimit nejpřísnější položky v
RateLimit-Policy(té, ve které zbývá nejméně požadavků).X-RateLimit-RemainingPočet požadavků, které zbývají v rámci nejpřísnějšího limitu.
X-RateLimit-ResetPočet sekund do obnovení nejpřísnějšího 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 | nullProč byly pro tuto odpověď použity nástroje:
request(výslovně vyžádáno);compare,compute,action(podle otázky);needs_calc(je potřeba výpočet nad tabulkami);summary(přehled kolekce nebo dokumentů);mcp(organizace připojila externí servery MCP).Povolené hodnoty:
requestcomparecomputeactionneeds_calcsummarymcpnulltool_callsarray of ToolCallInfocalculationsarray of Calculationpending_actionsarray of PendingActionconversation_idstringJen pro
POST /v1/chats konverzací.answer_idstringID objektu odpovědi.
400Požadavek je neplatný: hodnota parametru nebo stav objektu akci neumožňuje (`detail` je zpráva).
Hlavičky odpovědi
RateLimit-PolicyPlatné limity ve formátu návrhu IETF
draft-ietf-httpapi-ratelimit-headers: položky oddělené čárkou"<name>";q=<quota>;w=<window in seconds>.keyje četnost požadavků klíče API (kvóta je nárazová špička, okno je doba jejího úplného obnovení; pro relaci je touser, bez přihlašovacích údajůip);minute,dayamonthjsou kvóty organizace na kalendářní minutu, den a měsíc v UTC.RateLimitKolik zbývá z každého limitu v
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimit nejpřísnější položky v
RateLimit-Policy(té, ve které zbývá nejméně požadavků).X-RateLimit-RemainingPočet požadavků, které zbývají v rámci nejpřísnějšího limitu.
X-RateLimit-ResetPočet sekund do obnovení nejpřísnějšího limitu.
application/json
401Nebyly odeslány žádné přihlašovací údaje (ani cookie relace, ani klíč API), nebo klíč nebyl nalezen.
Hlavičky odpovědi
RateLimit-PolicyPlatné limity ve formátu návrhu IETF
draft-ietf-httpapi-ratelimit-headers: položky oddělené čárkou"<name>";q=<quota>;w=<window in seconds>.keyje četnost požadavků klíče API (kvóta je nárazová špička, okno je doba jejího úplného obnovení; pro relaci je touser, bez přihlašovacích údajůip);minute,dayamonthjsou kvóty organizace na kalendářní minutu, den a měsíc v UTC.RateLimitKolik zbývá z každého limitu v
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimit nejpřísnější položky v
RateLimit-Policy(té, ve které zbývá nejméně požadavků).X-RateLimit-RemainingPočet požadavků, které zbývají v rámci nejpřísnějšího limitu.
X-RateLimit-ResetPočet sekund do obnovení nejpřísnějšího limitu.
application/json
403Akce není povolena: role nestačí, chybí přístup ke kolekci nebo kartě, požadavek běží v režimu „View as“, nebo je organizace pozastavená či smazaná (`detail` je objekt s `code: org_suspended | org_deleted`).
Hlavičky odpovědi
RateLimit-PolicyPlatné limity ve formátu návrhu IETF
draft-ietf-httpapi-ratelimit-headers: položky oddělené čárkou"<name>";q=<quota>;w=<window in seconds>.keyje četnost požadavků klíče API (kvóta je nárazová špička, okno je doba jejího úplného obnovení; pro relaci je touser, bez přihlašovacích údajůip);minute,dayamonthjsou kvóty organizace na kalendářní minutu, den a měsíc v UTC.RateLimitKolik zbývá z každého limitu v
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimit nejpřísnější položky v
RateLimit-Policy(té, ve které zbývá nejméně požadavků).X-RateLimit-RemainingPočet požadavků, které zbývají v rámci nejpřísnějšího limitu.
X-RateLimit-ResetPočet sekund do obnovení nejpřísnějšího limitu.
application/json
404Objekt neexistuje nebo vám není dostupný. API nepotvrzuje, že objekt s omezeným přístupem existuje.
Hlavičky odpovědi
RateLimit-PolicyPlatné limity ve formátu návrhu IETF
draft-ietf-httpapi-ratelimit-headers: položky oddělené čárkou"<name>";q=<quota>;w=<window in seconds>.keyje četnost požadavků klíče API (kvóta je nárazová špička, okno je doba jejího úplného obnovení; pro relaci je touser, bez přihlašovacích údajůip);minute,dayamonthjsou kvóty organizace na kalendářní minutu, den a měsíc v UTC.RateLimitKolik zbývá z každého limitu v
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimit nejpřísnější položky v
RateLimit-Policy(té, ve které zbývá nejméně požadavků).X-RateLimit-RemainingPočet požadavků, které zbývají v rámci nejpřísnějšího limitu.
X-RateLimit-ResetPočet sekund do obnovení nejpřísnějšího limitu.
application/json
422Chyba validace: tělo nebo parametry neodpovídají schématu (`detail` je seznam chyb validace), nebo je hodnota parametru mimo povolený rozsah (`detail` je zpráva).
Hlavičky odpovědi
RateLimit-PolicyPlatné limity ve formátu návrhu IETF
draft-ietf-httpapi-ratelimit-headers: položky oddělené čárkou"<name>";q=<quota>;w=<window in seconds>.keyje četnost požadavků klíče API (kvóta je nárazová špička, okno je doba jejího úplného obnovení; pro relaci je touser, bez přihlašovacích údajůip);minute,dayamonthjsou kvóty organizace na kalendářní minutu, den a měsíc v UTC.RateLimitKolik zbývá z každého limitu v
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimit nejpřísnější položky v
RateLimit-Policy(té, ve které zbývá nejméně požadavků).X-RateLimit-RemainingPočet požadavků, které zbývají v rámci nejpřísnějšího limitu.
X-RateLimit-ResetPočet sekund do obnovení nejpřísnějšího limitu.
application/json
429Příliš mnoho požadavků (`api.rate_limited`), kvóta organizace na minutu, den nebo měsíc je vyčerpána (`api.quota_exceeded`; `error.details` obsahuje `quota`, `limit` a `reset_at`), organizace dosáhla svého limitu nebo je služba odpovědí vytížená (`answers.engine_busy`). Počkejte dobu uvedenou v hlavičce `Retry-After`.
Hlavičky odpovědi
Retry-AfterPočet sekund, které je třeba počkat před opakováním požadavku.
RateLimit-PolicyPlatné limity ve formátu návrhu IETF
draft-ietf-httpapi-ratelimit-headers: položky oddělené čárkou"<name>";q=<quota>;w=<window in seconds>.keyje četnost požadavků klíče API (kvóta je nárazová špička, okno je doba jejího úplného obnovení; pro relaci je touser, bez přihlašovacích údajůip);minute,dayamonthjsou kvóty organizace na kalendářní minutu, den a měsíc v UTC.RateLimitKolik zbývá z každého limitu v
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimit nejpřísnější položky v
RateLimit-Policy(té, ve které zbývá nejméně požadavků).X-RateLimit-RemainingPočet požadavků, které zbývají v rámci nejpřísnějšího limitu.
X-RateLimit-ResetPočet sekund do obnovení nejpřísnějšího limitu.
application/json
Chybové kódy
Kódy, které tato operace může vrátit v error.code, kromě obecných kódů každého požadavku.
- 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é opakování
S každým požadavkem POST a PATCH odešlete hlavičku Idempotency-Key (například UUID). Opakování se stejným klíčem do 24 hodin vrátí uloženou odpověď, místo aby se požadavek provedl znovu.
Limity četnosti
Odpovědi obsahují hlavičky RateLimit a RateLimit-Policy a starší X-RateLimit-Limit, X-RateLimit-Remaining a X-RateLimit-Reset. Odpověď 429 má hlavičku Retry-After v sekundách: počkejte a požadavek zopakujte.