POST/v1/chat
Vastaanota avustajan vastaus virtana (SSE)
chat
Kun kuormantasaajan takana on useita API-instansseja (api.<domain>-osoite, 1.62.0), vastaus ja sen tapahtumien puskuri ovat sen instanssin muistissa, joka muodostaa vastauksen. Virran jatkaminen Last-Event-ID-otsakkeella toimii vain tässä instanssissa.
Toistettu pyyntö samalla request_id-tunnuksella ja samassa keskustelussa, joka saapuu toiseen instanssiin vastauksen valmistuttua, saa tallennetun vastauksen (token ja done, tapahtumat numeroitu 1:stä alkaen) ilman, että kysymys esitetään uudelleen. Toistettu pyyntö, joka saapuu toiseen instanssiin vastauksen ollessa vielä muodostumassa, pysäyttää muodostamisen ja muodostaa vastauksen alusta; myöskään toista kysymystä ei luoda. Jotta voit jatkaa virtaa ilman uutta muodostamista, pidä yhteys samaan instanssiin tai toista pyyntö done-tapahtuman jälkeen.
Todennus
Lähetä API-avain Authorization-otsakkeessa: Authorization: Bearer <avain>.
Otsakeparametrit
X-View-AsstringVain API-avaimille, joilla on
admin-rooli. Suorittaa pyynnön dataprofiilin<profile>[:viewer|verifier|editor]puolesta, esimerkiksiemployee:viewer. Asennusavain ei voi käyttää tätä otsaketta (403).
Evästeparametrit
kb_view_asstringIstunnon ”View as” -tilan eväste.
POST /auth/view-asasettaa sen jaDELETE /auth/view-aspoistaa sen.
Pyynnön runko
application/json
items ≥ 1
collectionstringOletus: "default"
tagsarray of string | nullexportstring | nullcard_idsarray of string | nullitems ≤ 50
streambooleanOletus: false
conversation_idstring | nulllength ≤ 64
originstring | nulltoolsboolean | nullbypass_cachebooleanÄlä ota vastausta vastausvälimuistista (välimuistissa olevan vastauksen alla oleva ”Get a fresh answer” -painike). Uusi vastaus korvaa välimuistissa olevan merkinnän.
Oletus: false
languagestring | nullVastauksen kieli: ISO 639-1 -koodi (
de,en,ru, …), jolla vastataan kyseisellä kielellä. Arvollaautotai ilman kenttää kieli tunnistetaan kysymyksestä. Käyttöliittymä välittää toisenkielisen ehdotuksen kielen erikseen (Starter.language).scopeChatScope | nullKysymyksen rajaus: useita kokoelmia, lähde, tunnisteet ja jakso. Rajauksen kokoelmat korvaavat
collection-kentän. Lähde rajaa vastauksen lähteen kokoelmaan (ja sen omiin kortteihin). Tunnisteet lisätääntags-kenttään. Jakso rajaa taloutta koskevat vastaukset kyseiseen jaksoon. Valita voi vain sitä, minkä käyttäjä näkee (kokoelmat:collections.no_access/collections.not_found; lähde:sources.not_found). Kun mukana onconversation_id, rajaus tallennetaan keskusteluun. Ilman kenttää käytetään keskustelun rajausta;nulltai tyhjä rajaus tyhjentää sen.request_idstringKysymyksen idempotenssiavain. Lähetä sama avain jokaisessa saman kysymyksen virran uusintayrityksessä (uusintayritys yhteyden katkettua; tässä
Last-Event-IDei jatka virtaa, vaan se vain kirjataan lokiin). Uusintayritys jo tallennetun vastauksen avaimella ei luo toista kysymystä: tallennettu tulos lähetetään uudelleen yhtenädone-tapahtumana (ja tekstin sisältävänätoken-tapahtumana), vaikka kysymys- tai krediittiraja olisi käytetty loppuun. Jos edellistä vastausta muodostetaan vielä katkenneelle asiakkaalle, sen muodostaminen pysähtyy ja vastaus muodostetaan uudelleen.length ≤ 64
version_ofinteger (int64)Luo keskusteluun uuden version tämän kysymyksen vuorosta (
question_idsyötteestä): muokattu kysymys (uusi tekstimessages-kentässä), uudelleen muodostettu vastaus (sama teksti, yleensäbypass_cache-kentän kanssa) tai sama kysymys toisellaquality-arvolla (esimerkiksiprecisefast-vastauksen jälkeen). Edellinen kysymyksen ja vastauksen pari säilyy. Sen jälkeiset vuorot jäävät sen haaraan ja piilotetaan syötteestä, kun uusi versio on valittuna (FeedItem.versions,POST /v1/conversations/{conv_id}/versions). Vastauksessa käytetty historia on valittu haara tähän vuoroon asti. Versionqualityei muuta keskustelun asetuksia. Edellyttääconversation_id-kenttää; toisen keskustelun kysymys palauttaa404 questions.not_found.qualitystringTuloksen taustalla olevan haun nopeuden ja tarkkuuden tasapaino:
faston nopeampi,precisetarkempi. Oletus:precise.Sallitut arvot:
fastprecise
Vastaukset
200Kun `stream=true`: `text/event-stream`. Jokainen tapahtuma koostuu riveistä `id: <number>` (tapahtuman järjestysnumero virrassa, alkaen 1:stä) ja `data: <JSON>`, joita seuraa tyhjä rivi. Kenttiä `event:` ja `retry:` ei käytetä; tapahtuman tyyppi on `type`-kentässä (`ChatEvent`).
Kun stream=true: text/event-stream. Jokainen tapahtuma koostuu riveistä id: <number> (tapahtuman järjestysnumero virrassa, alkaen 1:stä) ja data: <JSON>, joita seuraa tyhjä rivi. Kenttiä event: ja retry: ei käytetä; tapahtuman tyyppi on type-kentässä (ChatEvent).
Kysymykseen, jolla on request_id, vastataan yhteydestä riippumatta. Yhteyden katkeaminen ei pysäytä vastausta: se viedään loppuun ja tallennetaan keskusteluun (enintään 10 minuutin ajan). Saman pyynnön toistaminen (sama request_id ja sama keskustelu) liittyy käynnissä olevaan vastaukseen, ja Last-Event-ID-otsakkeen kanssa se saa kyseisen numeron jälkeiset tapahtumat, joten virta jatkuu samoilla tapahtumanumeroilla. Jos virta ei voi jatkua kyseisestä numerosta, toistettu pyyntö saa virran alusta: ensimmäisen tapahtuman numero on silloin enintään Last-Event-ID, ja asiakasohjelma aloittaa vastauksen alusta. Jos vastaus on jo valmis ja sen tapahtumapuskuri on vapautettu (3 minuutin kuluttua), tallennettu tulos lähetetään uudelleen (token ja done, numeroitu 1:stä alkaen) ilman, että kysymys esitetään uudelleen; muuten vastaus muodostetaan alusta. Tällaisen vastauksen voi pysäyttää kutsulla POST /v1/chat/cancel. Ilman request_id-tunnusta asiakasohjelman yhteyden katkeaminen peruu vastauksen.
Ensimmäisen tapahtuman jälkeen, kun vastaus on käynnissä, palvelin lähettää : ping -kommentin 15 sekunnin välein; ohita se. Tapahtumien järjestys: stage-tapahtumat (edistyminen), meta, sources, data, sitten vastauksen teksti token-tapahtumissa ja lopuksi done. Ennen vastauksen tekstiä sources ja data voivat toistua ja tool-tapahtumia voi esiintyä; teksti voi saapua yhtenä token-tapahtumana tai osina. Välimuistista tuleva vastaus: meta (jossa cached), sources, data, token, done. Virran alkamisen jälkeinen virhe saapuu error-tapahtumana, ja virta sulkeutuu ilman done-tapahtumaa; virran HTTP-tila on aina 200. done-tapahtuman jälkeen voi saapua followups-tapahtuma, jossa on ehdotettuja seuraavia kysymyksiä. Ohita tapahtumatyypit, joita et käsittele.
Kun stream=false: application/json, jonka runko on AnswerResponse (ja lisäksi conversation_id).
Vastausotsakkeet
RateLimit-PolicyVoimassa olevat rajat IETF-luonnoksen
draft-ietf-httpapi-ratelimit-headersmuodossa: pilkuin erotetut kohteet"<name>";q=<quota>;w=<window in seconds>.keyon API-avaimen pyyntönopeus (kiintiö on purske, aikaikkuna on aika, jossa se täyttyy kokonaan; istunnolle se onuser, ilman tunnistetietojaip);minute,dayjamonthovat organisaation kiintiöt UTC-ajan kalenteriminuutille, -päivälle ja -kuukaudelle.RateLimitMitä kustakin
RateLimit-Policy-otsakkeen rajasta on jäljellä:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitRateLimit-Policy-otsakkeen tiukimman kohteen raja (sen, jossa pyyntöjä on jäljellä vähiten).X-RateLimit-RemainingTiukimman rajan puitteissa jäljellä olevat pyynnöt.
X-RateLimit-ResetSekunteja siihen, kun tiukin raja nollautuu.
text/event-stream
application/json
answerstringpakollinenquestion_idintegerpakollinenquerystringcollectionstringpakollinenprovenancearray of NumberProvenanceemptystringSallitut arvot:
no_hitsrestrictedguardrailno_data_for_periodbasisAnswerBasisverificationAnswerVerificationalt_periodsarray of AnswerAltPerioditems ≤ 6
drilldownarray of AnswerDrilldownitems ≤ 20
restrictedRestrictedInfoguardrailGuardrailVerdictverified_onlybooleancachedbooleancache_hitAnswerCacheHitout_of_scopeAnswerOutOfScopeattachmentsarray of Attachmentexport_errorstringtoolsstring | nullMiksi tähän vastaukseen käytettiin työkaluja:
request(pyydettiin erikseen);compare,compute,action(kysymyksen perusteella);needs_calc(tarvitaan laskentaa taulukoista);summary(yleiskatsaus kokoelmaan tai asiakirjoihin);mcp(organisaatio on yhdistänyt ulkoisia MCP-palvelimia).Sallitut arvot:
requestcomparecomputeactionneeds_calcsummarymcpnulltool_callsarray of ToolCallInfocalculationsarray of Calculationpending_actionsarray of PendingActionconversation_idstringVain
POST /v1/chat-toiminnossa keskustelun kanssa.answer_idstringVastausobjektin tunnus.
400Pyyntö on virheellinen: parametrin arvo tai objektin tila ei salli toimenpidettä (`detail` on viesti).
Vastausotsakkeet
RateLimit-PolicyVoimassa olevat rajat IETF-luonnoksen
draft-ietf-httpapi-ratelimit-headersmuodossa: pilkuin erotetut kohteet"<name>";q=<quota>;w=<window in seconds>.keyon API-avaimen pyyntönopeus (kiintiö on purske, aikaikkuna on aika, jossa se täyttyy kokonaan; istunnolle se onuser, ilman tunnistetietojaip);minute,dayjamonthovat organisaation kiintiöt UTC-ajan kalenteriminuutille, -päivälle ja -kuukaudelle.RateLimitMitä kustakin
RateLimit-Policy-otsakkeen rajasta on jäljellä:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitRateLimit-Policy-otsakkeen tiukimman kohteen raja (sen, jossa pyyntöjä on jäljellä vähiten).X-RateLimit-RemainingTiukimman rajan puitteissa jäljellä olevat pyynnöt.
X-RateLimit-ResetSekunteja siihen, kun tiukin raja nollautuu.
application/json
401Tunnistetietoja ei lähetetty (ei istuntoevästettä eikä API-avainta), tai avainta ei löytynyt.
Vastausotsakkeet
RateLimit-PolicyVoimassa olevat rajat IETF-luonnoksen
draft-ietf-httpapi-ratelimit-headersmuodossa: pilkuin erotetut kohteet"<name>";q=<quota>;w=<window in seconds>.keyon API-avaimen pyyntönopeus (kiintiö on purske, aikaikkuna on aika, jossa se täyttyy kokonaan; istunnolle se onuser, ilman tunnistetietojaip);minute,dayjamonthovat organisaation kiintiöt UTC-ajan kalenteriminuutille, -päivälle ja -kuukaudelle.RateLimitMitä kustakin
RateLimit-Policy-otsakkeen rajasta on jäljellä:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitRateLimit-Policy-otsakkeen tiukimman kohteen raja (sen, jossa pyyntöjä on jäljellä vähiten).X-RateLimit-RemainingTiukimman rajan puitteissa jäljellä olevat pyynnöt.
X-RateLimit-ResetSekunteja siihen, kun tiukin raja nollautuu.
application/json
403Toimenpide ei ole sallittu: rooli ei riitä, kokoelmaan tai korttiin ei ole käyttöoikeutta, pyyntö suoritetaan ”View as” -tilassa, tai organisaation toiminta on keskeytetty tai organisaatio on poistettu (`detail` on objekti, jossa on `code: org_suspended | org_deleted`).
Vastausotsakkeet
RateLimit-PolicyVoimassa olevat rajat IETF-luonnoksen
draft-ietf-httpapi-ratelimit-headersmuodossa: pilkuin erotetut kohteet"<name>";q=<quota>;w=<window in seconds>.keyon API-avaimen pyyntönopeus (kiintiö on purske, aikaikkuna on aika, jossa se täyttyy kokonaan; istunnolle se onuser, ilman tunnistetietojaip);minute,dayjamonthovat organisaation kiintiöt UTC-ajan kalenteriminuutille, -päivälle ja -kuukaudelle.RateLimitMitä kustakin
RateLimit-Policy-otsakkeen rajasta on jäljellä:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitRateLimit-Policy-otsakkeen tiukimman kohteen raja (sen, jossa pyyntöjä on jäljellä vähiten).X-RateLimit-RemainingTiukimman rajan puitteissa jäljellä olevat pyynnöt.
X-RateLimit-ResetSekunteja siihen, kun tiukin raja nollautuu.
application/json
404Objektia ei ole tai se ei ole saatavillasi. API ei paljasta, onko rajoitettu objekti olemassa.
Vastausotsakkeet
RateLimit-PolicyVoimassa olevat rajat IETF-luonnoksen
draft-ietf-httpapi-ratelimit-headersmuodossa: pilkuin erotetut kohteet"<name>";q=<quota>;w=<window in seconds>.keyon API-avaimen pyyntönopeus (kiintiö on purske, aikaikkuna on aika, jossa se täyttyy kokonaan; istunnolle se onuser, ilman tunnistetietojaip);minute,dayjamonthovat organisaation kiintiöt UTC-ajan kalenteriminuutille, -päivälle ja -kuukaudelle.RateLimitMitä kustakin
RateLimit-Policy-otsakkeen rajasta on jäljellä:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitRateLimit-Policy-otsakkeen tiukimman kohteen raja (sen, jossa pyyntöjä on jäljellä vähiten).X-RateLimit-RemainingTiukimman rajan puitteissa jäljellä olevat pyynnöt.
X-RateLimit-ResetSekunteja siihen, kun tiukin raja nollautuu.
application/json
422Validointivirhe: runko tai parametrit eivät vastaa skeemaa (`detail` on validointivirheiden lista), tai parametrin arvo on sallitun alueen ulkopuolella (`detail` on viesti).
Vastausotsakkeet
RateLimit-PolicyVoimassa olevat rajat IETF-luonnoksen
draft-ietf-httpapi-ratelimit-headersmuodossa: pilkuin erotetut kohteet"<name>";q=<quota>;w=<window in seconds>.keyon API-avaimen pyyntönopeus (kiintiö on purske, aikaikkuna on aika, jossa se täyttyy kokonaan; istunnolle se onuser, ilman tunnistetietojaip);minute,dayjamonthovat organisaation kiintiöt UTC-ajan kalenteriminuutille, -päivälle ja -kuukaudelle.RateLimitMitä kustakin
RateLimit-Policy-otsakkeen rajasta on jäljellä:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitRateLimit-Policy-otsakkeen tiukimman kohteen raja (sen, jossa pyyntöjä on jäljellä vähiten).X-RateLimit-RemainingTiukimman rajan puitteissa jäljellä olevat pyynnöt.
X-RateLimit-ResetSekunteja siihen, kun tiukin raja nollautuu.
application/json
429Liian monta pyyntöä (`api.rate_limited`), organisaation minuutti-, päivä- tai kuukausikiintiö on käytetty (`api.quota_exceeded`; `error.details` sisältää kentät `quota`, `limit` ja `reset_at`), organisaation raja on saavutettu tai vastauspalvelu on kuormitettu (`answers.engine_busy`). Odota `Retry-After`-otsakkeen ilmoittama aika.
Vastausotsakkeet
Retry-AfterKuinka monta sekuntia odotetaan ennen pyynnön uusintayritystä.
RateLimit-PolicyVoimassa olevat rajat IETF-luonnoksen
draft-ietf-httpapi-ratelimit-headersmuodossa: pilkuin erotetut kohteet"<name>";q=<quota>;w=<window in seconds>.keyon API-avaimen pyyntönopeus (kiintiö on purske, aikaikkuna on aika, jossa se täyttyy kokonaan; istunnolle se onuser, ilman tunnistetietojaip);minute,dayjamonthovat organisaation kiintiöt UTC-ajan kalenteriminuutille, -päivälle ja -kuukaudelle.RateLimitMitä kustakin
RateLimit-Policy-otsakkeen rajasta on jäljellä:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitRateLimit-Policy-otsakkeen tiukimman kohteen raja (sen, jossa pyyntöjä on jäljellä vähiten).X-RateLimit-RemainingTiukimman rajan puitteissa jäljellä olevat pyynnöt.
X-RateLimit-ResetSekunteja siihen, kun tiukin raja nollautuu.
application/json
Virhekoodit
Koodit, jotka tämä päätepiste voi palauttaa error.code-kentässä kaikkien pyyntöjen yleisten koodien lisäksi.
- 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
Turvalliset uusintayritykset
Lähetä jokaisen POST- ja PATCH-pyynnön mukana Idempotency-Key-otsake (esimerkiksi UUID). Kun pyyntö toistetaan samalla avaimella 24 tunnin kuluessa, palautetaan tallennettu vastaus eikä pyyntöä suoriteta uudelleen.
Nopeusrajoitukset
Vastauksissa ovat RateLimit- ja RateLimit-Policy-otsakkeet sekä aiemmat X-RateLimit-Limit, X-RateLimit-Remaining ja X-RateLimit-Reset. 429-vastauksessa on Retry-After sekunteina: odota ja yritä uudelleen.