POST/v1/chat
Asistanın yanıtını akış olarak alma (SSE)
chat
Bir yük dengeleyicinin arkasında birden çok API örneği çalıştığında (api.<domain> adresi, 1.62.0), bir yanıt ve olaylarının arabelleği, yanıtı üreten örneğin belleğinde tutulur. Akışı Last-Event-ID ile sürdürmek yalnızca o örnekte çalışır.
Aynı request_id ve sohbetle yapılan ve yanıt tamamlandıktan sonra başka bir örneğe ulaşan yinelenen istek, soruyu yeniden sormadan kaydedilmiş yanıtı alır (token ve done, olaylar 1’den numaralanır). Yanıt hâlâ üretilirken başka bir örneğe ulaşan yinelenen istek, o üretimi durdurur ve yanıtı yeniden oluşturur; ikinci bir soru da oluşturulmaz. Yeni bir üretim olmadan akışı sürdürmek için bağlantıyı aynı örnekte tutun ya da isteği done olayından sonra yineleyin.
Kimlik doğrulama
API anahtarını Authorization başlığında gönderin: Authorization: Bearer <anahtar>.
Başlık parametreleri
X-View-AsstringYalnızca
adminrolündeki API anahtarları için. İsteği<profile>[:viewer|verifier|editor]veri profili adına yapar, örneğinemployee:viewer. Kurulum anahtarı bu başlığı kullanamaz (403).
Çerez parametreleri
kb_view_asstringBir oturum için “View as” modunun (başka bir kullanıcı gibi görüntüleme) çerezi.
POST /auth/view-asbu çerezi ayarlar,DELETE /auth/view-astemizler.
İstek gövdesi
application/json
items ≥ 1
collectionstringVarsayılan: "default"
tagsarray of string | nullexportstring | nullcard_idsarray of string | nullitems ≤ 50
streambooleanVarsayılan: false
conversation_idstring | nulllength ≤ 64
originstring | nulltoolsboolean | nullbypass_cachebooleanYanıtı yanıt önbelleğinden almaz (önbellekteki yanıtın altındaki “Get a fresh answer” (yeni yanıt al) düğmesi). Yeni yanıt, önbellekteki kaydın yerini alır.
Varsayılan: false
languagestring | nullYanıt dili: o dilde yanıt almak için bir ISO 639-1 kodu (
de,en,ru, …).autoile ya da alan olmadan dil sorudan algılanır. Arayüz, başka bir dildeki önerinin dilini açıkça gönderir (Starter.language).scopeChatScope | nullSorunun alanı: birkaç koleksiyon, bir kaynak, etiketler ve bir dönem. Soru alanındaki koleksiyonlar
collectionyerine geçer. Kaynak, yanıtı kendi koleksiyonuyla (ve kendi kartlarıyla) daraltır. Etiketlertagslistesine eklenir. Dönem, finansal yanıtları o dönemle sınırlar. Yalnızca kullanıcının görebildiklerini seçebilirsiniz (koleksiyonlar:collections.no_access/collections.not_found; kaynak:sources.not_found).conversation_idile soru alanı sohbete kaydedilir. Bu alan gönderilmezse sohbete kayıtlı soru alanı uygulanır;nullya da boş bir soru alanı onu temizler.request_idstringSorunun idempotency anahtarı. Bir sorunun akışını her yeniden denemede aynı anahtarı gönderin (bağlantı koptuktan sonra yeniden deneme; burada
Last-Event-IDakışı sürdürmez, yalnızca günlüğe yazılır). Kaydedilmiş bir yanıtın anahtarıyla yapılan yeniden deneme ikinci bir soru oluşturmaz: soru ya da kredi sınırı dolmuş olsa bile kaydedilmiş sonuç tek birdoneolayı (ve metinle birlikte birtoken) olarak yeniden gönderilir. Önceki yanıt, bağlantısı kopan bir istemci için hâlâ hazırlanıyorsa bu hazırlık durur ve yanıt yeniden oluşturulur.length ≤ 64
version_ofinteger (int64)Bu sorunun sohbetteki turunun yeni bir sürümünü oluşturur (sohbet geçmişindeki
question_id): düzenlenmiş bir soru (messagesiçinde yeni metin), yeniden oluşturulmuş bir yanıt (aynı metin, genelliklebypass_cacheile) ya da başka birqualityile aynı soru (örneğinprecise, birfastyanıtından sonra). Önceki soru-yanıt çifti korunur. Ondan sonraki turlar kendi dalında kalır ve yeni sürüm seçiliyken sohbet geçmişinde gizlenir (FeedItem.versions,POST /v1/conversations/{conv_id}/versions). Yanıt için kullanılan geçmiş, bu tura kadar seçili daldır. Bir sürümünqualitydeğeri sohbetin ayarlarını değiştirmez.conversation_idgerektirir; başka bir sohbetten bir soru404 questions.not_founddöndürür.qualitystringSonucun arkasındaki aramada hız ile doğruluk arasındaki denge:
fastdaha hızlı,precisedaha doğrudur. Varsayılan:precise.Geçerli değerler:
fastprecise
Yanıtlar
200`stream=true` ile: `text/event-stream`. Her olay `id: <number>` (olayın akıştaki sıra numarası, 1’den başlar) ve `data: <JSON>` satırlarından ve ardından gelen boş bir satırdan oluşur. `event:` ve `retry:` alanları kullanılmaz; olay türü `type` alanındadır (`ChatEvent`).
stream=true ile: text/event-stream. Her olay id: <number> (olayın akıştaki sıra numarası, 1’den başlar) ve data: <JSON> satırlarından ve ardından gelen boş bir satırdan oluşur. event: ve retry: alanları kullanılmaz; olay türü type alanındadır (ChatEvent).
request_id içeren bir soru bağlantıdan bağımsız olarak yanıtlanır. Bağlantının kopması yanıtı durdurmaz: yanıt tamamlanır ve sohbete kaydedilir (en fazla 10 dakika boyunca). Aynı isteği (aynı request_id ve sohbet) yinelemek süren yanıta bağlanır; Last-Event-ID başlığıyla o numaradan sonraki olayları alır, böylece akış aynı olay numaralarıyla devam eder. Akış o numaradan devam edemiyorsa yinelenen istek akışı baştan alır: bu durumda ilk olayın numarası Last-Event-ID değerinden büyük değildir ve istemci yanıtı baştan başlatır. Yanıt zaten tamamlanmış ve olay arabelleği serbest bırakılmışsa (3 dakika sonra) kaydedilmiş sonuç, soru yeniden sorulmadan tekrar gönderilir (token ve done, 1’den numaralanır); aksi hâlde yanıt yeniden üretilir. Böyle bir yanıtı durdurmak için POST /v1/chat/cancel çağırın. request_id olmadan istemci bağlantısının kopması yanıtı iptal eder.
İlk olaydan sonra, yanıt sürerken sunucu her 15 saniyede bir : ping yorumu gönderir; bunu atlayın. Olay sırası: stage olayları (ilerleme), meta, sources, data, ardından token olaylarında yanıt metni, sonra done. Yanıt metninden önce sources ve data tekrarlanabilir ve tool olayları görünebilir; metin tek bir token olarak ya da parçalar hâlinde gelebilir. Önbellekteki bir yanıt: meta (cached ile), sources, data, token, done. Akış başladıktan sonraki bir hata error olayı olarak gelir ve akış done olmadan kapanır; akışın HTTP durumu her zaman 200’dür. done olayından sonra önerilen sonraki soruları içeren bir followups olayı gelebilir. İşlemediğiniz olay türlerini yok sayın.
stream=false ile: AnswerResponse gövdeli application/json (ayrıca conversation_id).
Yanıt başlıkları
RateLimit-PolicyGeçerli limitler, IETF taslağı
draft-ietf-httpapi-ratelimit-headersbiçiminde: virgülle ayrılmış"<name>";q=<quota>;w=<window in seconds>öğeleri.key, API anahtarının istek hızıdır (kota ani artış payıdır, zaman penceresi bu payın tamamen dolma süresidir; oturum içinuser, kimlik bilgisi olmadanip);minute,dayvemonth, kuruluşun UTC’ye göre takvim dakikası, günü ve ayı için kotalarıdır.RateLimitRateLimit-Policyiçindeki her limitten kalan:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitRateLimit-Policyiçindeki en sıkı girdinin limiti (en az istek hakkı kalan girdi).X-RateLimit-RemainingEn sıkı limitte kalan istek sayısı.
X-RateLimit-ResetEn sıkı limitin sıfırlanmasına kalan saniye.
text/event-stream
application/json
answerstringzorunluquestion_idintegerzorunluquerystringcollectionstringzorunluprovenancearray of NumberProvenanceemptystringGeçerli değerler:
no_hitsrestrictedguardrailno_data_for_periodbasisAnswerBasisverificationAnswerVerificationalt_periodsarray of AnswerAltPerioditems ≤ 6
drilldownarray of AnswerDrilldownitems ≤ 20
restrictedRestrictedInfoguardrailGuardrailVerdictverified_onlybooleancachedbooleancache_hitAnswerCacheHitout_of_scopeAnswerOutOfScopeattachmentsarray of Attachmentexport_errorstringtoolsstring | nullBu yanıt için araçların neden kullanıldığı:
request(açıkça istendi);compare,compute,action(soruya göre);needs_calc(tablolar üzerinde hesaplama gerekiyor);summary(bir koleksiyonun ya da belgelerin genel görünümü);mcp(kuruluş harici MCP sunucularını bağlamış).Geçerli değerler:
requestcomparecomputeactionneeds_calcsummarymcpnulltool_callsarray of ToolCallInfocalculationsarray of Calculationpending_actionsarray of PendingActionconversation_idstringYalnızca sohbetli
POST /v1/chatiçin.answer_idstringYanıt nesnesinin kimliği.
400İstek geçersiz: bir parametre değeri ya da nesnenin durumu işleme izin vermiyor (`detail` bir iletidir).
Yanıt başlıkları
RateLimit-PolicyGeçerli limitler, IETF taslağı
draft-ietf-httpapi-ratelimit-headersbiçiminde: virgülle ayrılmış"<name>";q=<quota>;w=<window in seconds>öğeleri.key, API anahtarının istek hızıdır (kota ani artış payıdır, zaman penceresi bu payın tamamen dolma süresidir; oturum içinuser, kimlik bilgisi olmadanip);minute,dayvemonth, kuruluşun UTC’ye göre takvim dakikası, günü ve ayı için kotalarıdır.RateLimitRateLimit-Policyiçindeki her limitten kalan:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitRateLimit-Policyiçindeki en sıkı girdinin limiti (en az istek hakkı kalan girdi).X-RateLimit-RemainingEn sıkı limitte kalan istek sayısı.
X-RateLimit-ResetEn sıkı limitin sıfırlanmasına kalan saniye.
application/json
401Kimlik bilgisi gönderilmedi (ne oturum çerezi ne de API anahtarı) ya da anahtar bulunamadı.
Yanıt başlıkları
RateLimit-PolicyGeçerli limitler, IETF taslağı
draft-ietf-httpapi-ratelimit-headersbiçiminde: virgülle ayrılmış"<name>";q=<quota>;w=<window in seconds>öğeleri.key, API anahtarının istek hızıdır (kota ani artış payıdır, zaman penceresi bu payın tamamen dolma süresidir; oturum içinuser, kimlik bilgisi olmadanip);minute,dayvemonth, kuruluşun UTC’ye göre takvim dakikası, günü ve ayı için kotalarıdır.RateLimitRateLimit-Policyiçindeki her limitten kalan:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitRateLimit-Policyiçindeki en sıkı girdinin limiti (en az istek hakkı kalan girdi).X-RateLimit-RemainingEn sıkı limitte kalan istek sayısı.
X-RateLimit-ResetEn sıkı limitin sıfırlanmasına kalan saniye.
application/json
403İşleme izin verilmiyor: rol yetersiz, koleksiyona ya da karta erişim yok, istek “View as” modunda çalışıyor ya da kuruluş askıya alınmış veya silinmiş (`detail`, `code: org_suspended | org_deleted` içeren bir nesnedir).
Yanıt başlıkları
RateLimit-PolicyGeçerli limitler, IETF taslağı
draft-ietf-httpapi-ratelimit-headersbiçiminde: virgülle ayrılmış"<name>";q=<quota>;w=<window in seconds>öğeleri.key, API anahtarının istek hızıdır (kota ani artış payıdır, zaman penceresi bu payın tamamen dolma süresidir; oturum içinuser, kimlik bilgisi olmadanip);minute,dayvemonth, kuruluşun UTC’ye göre takvim dakikası, günü ve ayı için kotalarıdır.RateLimitRateLimit-Policyiçindeki her limitten kalan:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitRateLimit-Policyiçindeki en sıkı girdinin limiti (en az istek hakkı kalan girdi).X-RateLimit-RemainingEn sıkı limitte kalan istek sayısı.
X-RateLimit-ResetEn sıkı limitin sıfırlanmasına kalan saniye.
application/json
404Nesne yok ya da size açık değil. API, erişimi kısıtlı bir nesnenin var olduğunu belli etmez.
Yanıt başlıkları
RateLimit-PolicyGeçerli limitler, IETF taslağı
draft-ietf-httpapi-ratelimit-headersbiçiminde: virgülle ayrılmış"<name>";q=<quota>;w=<window in seconds>öğeleri.key, API anahtarının istek hızıdır (kota ani artış payıdır, zaman penceresi bu payın tamamen dolma süresidir; oturum içinuser, kimlik bilgisi olmadanip);minute,dayvemonth, kuruluşun UTC’ye göre takvim dakikası, günü ve ayı için kotalarıdır.RateLimitRateLimit-Policyiçindeki her limitten kalan:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitRateLimit-Policyiçindeki en sıkı girdinin limiti (en az istek hakkı kalan girdi).X-RateLimit-RemainingEn sıkı limitte kalan istek sayısı.
X-RateLimit-ResetEn sıkı limitin sıfırlanmasına kalan saniye.
application/json
422Geçerlilik hatası: gövde ya da parametreler şemaya uymuyor (`detail` geçerlilik hatalarının listesidir) ya da bir parametre değeri aralığın dışında (`detail` bir iletidir).
Yanıt başlıkları
RateLimit-PolicyGeçerli limitler, IETF taslağı
draft-ietf-httpapi-ratelimit-headersbiçiminde: virgülle ayrılmış"<name>";q=<quota>;w=<window in seconds>öğeleri.key, API anahtarının istek hızıdır (kota ani artış payıdır, zaman penceresi bu payın tamamen dolma süresidir; oturum içinuser, kimlik bilgisi olmadanip);minute,dayvemonth, kuruluşun UTC’ye göre takvim dakikası, günü ve ayı için kotalarıdır.RateLimitRateLimit-Policyiçindeki her limitten kalan:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitRateLimit-Policyiçindeki en sıkı girdinin limiti (en az istek hakkı kalan girdi).X-RateLimit-RemainingEn sıkı limitte kalan istek sayısı.
X-RateLimit-ResetEn sıkı limitin sıfırlanmasına kalan saniye.
application/json
429Çok fazla istek (`api.rate_limited`), kuruluşun dakika, gün ya da ay kotası doldu (`api.quota_exceeded`; `error.details` alanında `quota`, `limit` ve `reset_at` bulunur), kuruluşun limitine ulaşıldı ya da yanıt hizmeti meşgul (`answers.engine_busy`). `Retry-After` başlığındaki süre kadar bekleyin.
Yanıt başlıkları
Retry-Afterİsteği yeniden denemeden önce beklenmesi gereken saniye sayısı.
RateLimit-PolicyGeçerli limitler, IETF taslağı
draft-ietf-httpapi-ratelimit-headersbiçiminde: virgülle ayrılmış"<name>";q=<quota>;w=<window in seconds>öğeleri.key, API anahtarının istek hızıdır (kota ani artış payıdır, zaman penceresi bu payın tamamen dolma süresidir; oturum içinuser, kimlik bilgisi olmadanip);minute,dayvemonth, kuruluşun UTC’ye göre takvim dakikası, günü ve ayı için kotalarıdır.RateLimitRateLimit-Policyiçindeki her limitten kalan:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitRateLimit-Policyiçindeki en sıkı girdinin limiti (en az istek hakkı kalan girdi).X-RateLimit-RemainingEn sıkı limitte kalan istek sayısı.
X-RateLimit-ResetEn sıkı limitin sıfırlanmasına kalan saniye.
application/json
Hata kodları
Bu uç noktanın, her isteğin genel kodlarının yanı sıra error.code alanında döndürebileceği kodlar.
- 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
Güvenli yeniden denemeler
Her POST ve PATCH isteğiyle bir Idempotency-Key başlığı (örneğin bir UUID) gönderin. Aynı anahtarla 24 saat içinde yapılan yeniden deneme, isteği yeniden çalıştırmak yerine kaydedilmiş yanıtı döndürür.
Hız sınırları
Yanıtlarda RateLimit ve RateLimit-Policy başlıklarıyla birlikte daha eski X-RateLimit-Limit, X-RateLimit-Remaining ve X-RateLimit-Reset başlıkları bulunur. 429 yanıtında saniye cinsinden Retry-After başlığı vardır: bekleyin ve yeniden deneyin.