POST/v1/chat
Strömma ett svar från assistenten (SSE)
chat
Med flera API-instanser bakom en lastbalanserare (adressen api.<domain>, 1.62.0) finns ett svar och bufferten med dess händelser i minnet hos den instans som genererar det. Att återuppta strömmen med Last-Event-ID fungerar bara mot den instansen.
Ett upprepat anrop med samma request_id och konversation som når en annan instans när svaret redan är klart får det sparade svaret (token och done, händelser numrerade från 1) utan att frågan ställs igen. Ett upprepat anrop som når en annan instans medan svaret fortfarande genereras stoppar den genereringen och bygger svaret på nytt; inte heller då skapas någon ny fråga. Om du vill återuppta strömmen utan en ny generering behåller du anslutningen till samma instans eller upprepar anropet efter händelsen done.
Autentisering
Skicka en API-nyckel i huvudet Authorization: Authorization: Bearer <nyckel>.
Parametrar i huvuden
X-View-AsstringBara för API-nycklar med rollen
admin. Gör anropet som dataprofilen<profile>[:viewer|verifier|editor], till exempelemployee:viewer. Installationsnyckeln kan inte använda det här huvudet (403).
Cookie-parametrar
kb_view_asstringCookie för läget ”View as” (visa som en annan användare) i en session.
POST /auth/view-assätter den ochDELETE /auth/view-astar bort den.
Anropets brödtext
application/json
items ≥ 1
collectionstringStandard: "default"
tagsarray of string | nullexportstring | nullcard_idsarray of string | nullitems ≤ 50
streambooleanStandard: false
conversation_idstring | nulllength ≤ 64
originstring | nulltoolsboolean | nullbypass_cachebooleanTa inte svaret från svarscachen (knappen ”Get a fresh answer” under ett cachat svar). Det nya svaret ersätter posten i cachen.
Standard: false
languagestring | nullSvarsspråk: en ISO 639-1-kod (
de,en,ru, …) för att svara på det språket. Medautoeller utan fältet identifieras språket utifrån frågan. Gränssnittet skickar uttryckligen språket för ett förslag på ett annat språk (Starter.language).scopeChatScope | nullFrågans avgränsning: flera samlingar, en källa, taggar och en period. Avgränsningens samlingar ersätter
collection. En källa begränsar svaret till källans samling (och dess egna kort). Taggarna läggs till itags. Perioden begränsar finansiella svar till den perioden. Du kan bara välja det som användaren ser (samlingar:collections.no_access/collections.not_found; källa:sources.not_found). Medconversation_idsparas avgränsningen i konversationen. Utan fältet gäller konversationens avgränsning;nulleller en tom avgränsning rensar den.request_idstringFrågans idempotensnyckel. Skicka samma nyckel i varje nytt försök av strömmen för en fråga (ett nytt försök efter ett avbrott; här fortsätter
Last-Event-IDinte strömmen och loggas bara). Ett nytt försök med nyckeln till ett svar som redan har sparats skapar ingen andra fråga: det sparade resultatet skickas igen som en händelsedone(och entokenmed texten), även om gränsen för frågor eller krediter är uttömd. Om det föregående svaret fortfarande genereras för en klient som har kopplats från, stoppas den genereringen och svaret genereras på nytt.length ≤ 64
version_ofinteger (int64)Skapar en ny version av den här frågans omgång i konversationen (
question_idfrån flödet): en redigerad fråga (ny text imessages), ett omgenererat svar (samma text, oftast medbypass_cache) eller samma fråga med en annanquality(till exempelpreciseefter ettfast-svar). Det tidigare paret av fråga och svar behålls. Omgångarna efter det stannar i dess gren och döljs i flödet medan den nya versionen är vald (FeedItem.versions,POST /v1/conversations/{conv_id}/versions). Historiken som används för svaret är den valda grenen fram till den här omgången. En versionsqualityändrar inte konversationens inställningar. Kräverconversation_id; en fråga från en annan konversation returnerar404 questions.not_found.qualitystringBalans mellan snabbhet och noggrannhet i sökningen bakom resultatet:
fastär snabbare,preciseär noggrannare. Standard:precise.Tillåtna värden:
fastprecise
Svar
200Med `stream=true`: `text/event-stream`. Varje händelse består av raderna `id: <number>` (händelsens löpnummer i strömmen, från 1) och `data: <JSON>`, följda av en tom rad. Fälten `event:` och `retry:` används inte; händelsetypen finns i fältet `type` (`ChatEvent`).
Med stream=true: text/event-stream. Varje händelse består av raderna id: <number> (händelsens löpnummer i strömmen, från 1) och data: <JSON>, följda av en tom rad. Fälten event: och retry: används inte; händelsetypen finns i fältet type (ChatEvent).
En fråga med request_id besvaras oberoende av anslutningen. En frånkoppling stoppar inte svaret: det slutförs och sparas i konversationen (i upp till 10 minuter). Om samma anrop upprepas (samma request_id och konversation) kopplas det till svaret som pågår, och med huvudet Last-Event-ID får det händelserna efter det numret, så strömmen fortsätter med samma händelsenummer. Om strömmen inte kan fortsätta från det numret får det upprepade anropet strömmen från början: den första händelsen har då ett nummer som inte är större än Last-Event-ID, och klienten börjar om med svaret. Om svaret redan är klart och dess händelsebuffert har frigjorts (efter 3 minuter) skickas det sparade resultatet igen (token och done, numrerade från 1) utan att frågan ställs igen; annars genereras svaret på nytt. Anropa POST /v1/chat/cancel för att stoppa ett sådant svar. Utan request_id avbryter en frånkoppling från klienten svaret.
Efter den första händelsen, medan svaret pågår, skickar servern en kommentar : ping var 15:e sekund; hoppa över den. Ordningen på händelserna: händelser stage (förlopp), meta, sources, data, sedan svarstexten i händelser token och sist done. Före svarstexten kan sources och data upprepas och händelser tool förekomma; texten kan komma som en enda token eller i delar. Ett cachat svar: meta (med cached), sources, data, token, done. Ett fel efter att strömmen har startat kommer som en händelse error, och strömmen stängs utan done; strömmens HTTP-status är alltid 200. Efter done kan en händelse followups med förslag på nästa frågor komma. Ignorera händelsetyper som du inte hanterar.
Med stream=false: application/json med brödtexten AnswerResponse (plus conversation_id).
Svarshuvuden
RateLimit-PolicyGällande gränser i formatet från IETF-utkastet
draft-ietf-httpapi-ratelimit-headers: kommaseparerade poster"<name>";q=<quota>;w=<window in seconds>.keyär API-nyckelns anropsfrekvens (kvoten är toppen (burst), fönstret är tiden tills den har fyllts på helt; för en session är detuser, utan autentiseringsuppgifterip);minute,dayochmonthär organisationens kvoter för kalenderminuten, kalenderdygnet och kalendermånaden i UTC.RateLimitVad som återstår av varje gräns i
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitGränsen för den striktaste posten i
RateLimit-Policy(den med minst antal återstående anrop).X-RateLimit-RemainingÅterstående anrop inom den striktaste gränsen.
X-RateLimit-ResetSekunder tills den striktaste gränsen nollställs.
text/event-stream
application/json
answerstringobligatoriskquestion_idintegerobligatoriskquerystringcollectionstringobligatoriskprovenancearray of NumberProvenanceemptystringTillåtna värden:
no_hitsrestrictedguardrailno_data_for_periodbasisAnswerBasisverificationAnswerVerificationalt_periodsarray of AnswerAltPerioditems ≤ 6
drilldownarray of AnswerDrilldownitems ≤ 20
restrictedRestrictedInfoguardrailGuardrailVerdictverified_onlybooleancachedbooleancache_hitAnswerCacheHitout_of_scopeAnswerOutOfScopeattachmentsarray of Attachmentexport_errorstringtoolsstring | nullVarför verktyg användes för det här svaret:
request(uttryckligen begärt);compare,compute,action(utifrån frågan);needs_calc(en beräkning över tabeller behövs);summary(en översikt över en samling eller dokument);mcp(organisationen har anslutit externa MCP-servrar).Tillåtna värden:
requestcomparecomputeactionneeds_calcsummarymcpnulltool_callsarray of ToolCallInfocalculationsarray of Calculationpending_actionsarray of PendingActionconversation_idstringBara för
POST /v1/chatmed en konversation.answer_idstringSvarsobjektets id.
400Anropet är ogiltigt: ett parametervärde eller objektets tillstånd tillåter inte åtgärden (`detail` är ett meddelande).
Svarshuvuden
RateLimit-PolicyGällande gränser i formatet från IETF-utkastet
draft-ietf-httpapi-ratelimit-headers: kommaseparerade poster"<name>";q=<quota>;w=<window in seconds>.keyär API-nyckelns anropsfrekvens (kvoten är toppen (burst), fönstret är tiden tills den har fyllts på helt; för en session är detuser, utan autentiseringsuppgifterip);minute,dayochmonthär organisationens kvoter för kalenderminuten, kalenderdygnet och kalendermånaden i UTC.RateLimitVad som återstår av varje gräns i
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitGränsen för den striktaste posten i
RateLimit-Policy(den med minst antal återstående anrop).X-RateLimit-RemainingÅterstående anrop inom den striktaste gränsen.
X-RateLimit-ResetSekunder tills den striktaste gränsen nollställs.
application/json
401Inga autentiseringsuppgifter skickades (varken en sessionscookie eller en API-nyckel), eller så hittades inte nyckeln.
Svarshuvuden
RateLimit-PolicyGällande gränser i formatet från IETF-utkastet
draft-ietf-httpapi-ratelimit-headers: kommaseparerade poster"<name>";q=<quota>;w=<window in seconds>.keyär API-nyckelns anropsfrekvens (kvoten är toppen (burst), fönstret är tiden tills den har fyllts på helt; för en session är detuser, utan autentiseringsuppgifterip);minute,dayochmonthär organisationens kvoter för kalenderminuten, kalenderdygnet och kalendermånaden i UTC.RateLimitVad som återstår av varje gräns i
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitGränsen för den striktaste posten i
RateLimit-Policy(den med minst antal återstående anrop).X-RateLimit-RemainingÅterstående anrop inom den striktaste gränsen.
X-RateLimit-ResetSekunder tills den striktaste gränsen nollställs.
application/json
403Åtgärden är inte tillåten: rollen räcker inte, det saknas åtkomst till samlingen eller kortet, anropet körs i läget ”View as” (visa som en annan användare), eller organisationen är avstängd eller borttagen (`detail` är ett objekt med `code: org_suspended | org_deleted`).
Svarshuvuden
RateLimit-PolicyGällande gränser i formatet från IETF-utkastet
draft-ietf-httpapi-ratelimit-headers: kommaseparerade poster"<name>";q=<quota>;w=<window in seconds>.keyär API-nyckelns anropsfrekvens (kvoten är toppen (burst), fönstret är tiden tills den har fyllts på helt; för en session är detuser, utan autentiseringsuppgifterip);minute,dayochmonthär organisationens kvoter för kalenderminuten, kalenderdygnet och kalendermånaden i UTC.RateLimitVad som återstår av varje gräns i
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitGränsen för den striktaste posten i
RateLimit-Policy(den med minst antal återstående anrop).X-RateLimit-RemainingÅterstående anrop inom den striktaste gränsen.
X-RateLimit-ResetSekunder tills den striktaste gränsen nollställs.
application/json
404Objektet finns inte eller är inte tillgängligt för dig. API:et bekräftar inte att ett begränsat objekt finns.
Svarshuvuden
RateLimit-PolicyGällande gränser i formatet från IETF-utkastet
draft-ietf-httpapi-ratelimit-headers: kommaseparerade poster"<name>";q=<quota>;w=<window in seconds>.keyär API-nyckelns anropsfrekvens (kvoten är toppen (burst), fönstret är tiden tills den har fyllts på helt; för en session är detuser, utan autentiseringsuppgifterip);minute,dayochmonthär organisationens kvoter för kalenderminuten, kalenderdygnet och kalendermånaden i UTC.RateLimitVad som återstår av varje gräns i
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitGränsen för den striktaste posten i
RateLimit-Policy(den med minst antal återstående anrop).X-RateLimit-RemainingÅterstående anrop inom den striktaste gränsen.
X-RateLimit-ResetSekunder tills den striktaste gränsen nollställs.
application/json
422Valideringsfel: brödtexten eller parametrarna stämmer inte med schemat (`detail` är en lista med valideringsfel), eller så ligger ett parametervärde utanför det tillåtna intervallet (`detail` är ett meddelande).
Svarshuvuden
RateLimit-PolicyGällande gränser i formatet från IETF-utkastet
draft-ietf-httpapi-ratelimit-headers: kommaseparerade poster"<name>";q=<quota>;w=<window in seconds>.keyär API-nyckelns anropsfrekvens (kvoten är toppen (burst), fönstret är tiden tills den har fyllts på helt; för en session är detuser, utan autentiseringsuppgifterip);minute,dayochmonthär organisationens kvoter för kalenderminuten, kalenderdygnet och kalendermånaden i UTC.RateLimitVad som återstår av varje gräns i
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitGränsen för den striktaste posten i
RateLimit-Policy(den med minst antal återstående anrop).X-RateLimit-RemainingÅterstående anrop inom den striktaste gränsen.
X-RateLimit-ResetSekunder tills den striktaste gränsen nollställs.
application/json
429För många anrop (`api.rate_limited`), organisationens kvot för minuten, dygnet eller månaden är förbrukad (`api.quota_exceeded`; `error.details` innehåller `quota`, `limit` och `reset_at`), organisationens gräns är nådd eller svarstjänsten är upptagen (`answers.engine_busy`). Vänta den tid som anges i huvudet `Retry-After`.
Svarshuvuden
Retry-AfterAntal sekunder att vänta innan du skickar anropet igen.
RateLimit-PolicyGällande gränser i formatet från IETF-utkastet
draft-ietf-httpapi-ratelimit-headers: kommaseparerade poster"<name>";q=<quota>;w=<window in seconds>.keyär API-nyckelns anropsfrekvens (kvoten är toppen (burst), fönstret är tiden tills den har fyllts på helt; för en session är detuser, utan autentiseringsuppgifterip);minute,dayochmonthär organisationens kvoter för kalenderminuten, kalenderdygnet och kalendermånaden i UTC.RateLimitVad som återstår av varje gräns i
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitGränsen för den striktaste posten i
RateLimit-Policy(den med minst antal återstående anrop).X-RateLimit-RemainingÅterstående anrop inom den striktaste gränsen.
X-RateLimit-ResetSekunder tills den striktaste gränsen nollställs.
application/json
Felkoder
Koder som den här slutpunkten kan returnera i error.code, utöver de allmänna koderna för alla anrop.
- 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
Säkra nya försök
Skicka huvudet Idempotency-Key (till exempel ett UUID) med varje POST och PATCH. Ett nytt försök med samma nyckel inom 24 timmar returnerar det sparade svaret i stället för att köra anropet igen.
Hastighetsbegränsningar
Svaren innehåller huvudena RateLimit och RateLimit-Policy samt de tidigare X-RateLimit-Limit, X-RateLimit-Remaining och X-RateLimit-Reset. Ett 429-svar har Retry-After i sekunder: vänta och försök igen.