Sohbet API'si
POST /chat/completions — istek gövdesi ve arabelleğe alınmış, tek olaylı ve OpenAI biçiminde olmayan Server-Sent Events sözleşmesinin tamamı.
- Sürüm: 0.4
- Rol: admin_user, normal_user
- Tür: başvuru
POST /chat/completions, bir istemi girdi filtrelerinden geçirir, sağlayıcıyı çağırır, yanıtı
çıktı filtrelerinden geçirir ve sonucu bir Server-Sent Events (SSE) akışı olarak döndürür.
Warning
Bu akış ne OpenAI ne de Anthropic biçimindedir. choices, delta, content_block_delta ve
artımlı metin yoktur: CID222, yanıtın tamamını filtreleyebilmek için sağlayıcının token'larını
arabelleğe alır ve tamamlanmış yanıtı "id":"filtered-response" taşıyan tek bir olay olarak
gönderir. Bu uç noktaya bir OpenAI SDK'sı yönelttiğinizde hiçbir şey ayrıştıramaz.
Uç nokta
| Özellik | Değer |
|---|---|
| Metot ve yol | POST /chat/completions |
| Kimlik bilgisi | Ağ geçidi API anahtarı (cid_key_…) veya kullanıcı JWT'si |
| İstek içerik türü | application/json |
| Yanıt içerik türü | text/event-stream — her zaman |
| Yanıt başlıkları | Cache-Control: no-cache, Connection: keep-alive, X-Accel-Buffering: no |
| Reddedilen rol | auditor; 403 ve ROLE_NOT_FOR_CHAT ile |
İstek gövdesi
| Alan | Tür | Zorunlu | Notlar |
|---|---|---|---|
model | string | Evet | GET /models çıktısındaki bir model adı |
messages | array | Evet | Konuşma turları. Aşağıdaki "Mesaj biçimi" bölümüne bakın |
provider | string | Hayır | openai, azure_openai, anthropic, google veya ollama. İki sağlayıcı aynı model adını kaydettiğinde gereklidir |
temperature | number | Hayır | 0 ile 2 arası |
max_tokens | number | Hayır | 1 veya daha büyük |
top_p | number | Hayır | 0 ile 1 arası |
content_filter | string | Hayır | Girdi filtresi takma adı. content-safety-v2'ye geri düşer |
contexts | string[] | Hayır | Arka plandaki halüsinasyon kontrolü için erişim pasajları |
documents | array | Hayır | Ayrıştırılacak, denetlenecek, redakte edilecek ve bağlam olarak eklenecek belgeler |
session_id | string | Hayır | Turu, tespit kayıtları için mevcut bir oturuma bağlar |
include_context_usage | boolean | Hayır | Bağlam penceresi muhasebesi ister |
stream | boolean | Hayır | Kabul edilir ve yok sayılır. Onu okuyan hiçbir şey yoktur; yanıt her hâlükârda akar |
Doğrulama beyaz liste ile çalışır: bu tabloda yer almayan bir alan, hata verilmeden gövdeden
temizlenir. Yanlış yazılmış bir temperture, varsayılan sıcaklıkta başarılı bir çağrı üretir.
Mesaj biçimi
role değeri system, user veya assistant'tır. content ya bir metin ya da içerik
parçalarından oluşan bir dizidir.
Bir document parçasının type değeri pdf, docx, txt, csv veya xlsx olabilir. Görüntü
ve belge içeriği, metin gibi, modele ulaşmadan önce denetlenir ve redakte edilir.
Örnek istek
İstemcinin aldığı şey — alışverişin tamamı, sırasıyla:
Ad ve e-posta, sağlayıcı görmeden önce maskelenmiştir; ancak bu maskelemeyi bildiren olay bu uç
noktada iletilmez. Neyin tespit edildiğini görmek için kontrol panelinde Tespit ve Filtreleme →
Tüm Tespitler bölümünü açın veya aynı metni tespitleri eşzamanlı döndüren
POST /api/v1/guardrails/detect adresine gönderin.
SSE sözleşmesi
Sağlayıcı token farklarını akıtır. CID222 bunların hepsini tüketir, metni biriktirir, yanıtın
tamamı üzerinde çıktı filtrelemesini çalıştırır ve ancak ondan sonra cevabı bağlantınıza yazar. Bu
nedenle istemci şunu görür: isteğe bağlı kontrol olayları, üretim süresi boyunca sessizlik, tek
bir içerik olayı ve data: [DONE].
Her satır data: ile başlar, tek bir JSON nesnesi taşır ve satırlar boş satırla ayrılır. Akış
her zaman data: [DONE] ile biter.
Olaylar, görünebilecekleri sırayla
| Sıra | Olay | Biçim | Sonlandırıcı |
|---|---|---|---|
| 1 | Kullanıcı kilitli | {"type":"user_locked","reason":…,"review_id":…,"locked_at":…,"unlock_request_status":…} | Evet |
| 2 | Güvenlik uyarısı | {"type":"security_warning","review_id":…,"message":…} | Hayır |
| 3 | Belgeler işlendi | {"type":"documents_processed","count":N,"summaries":[…],"processing_time_ms":N} | Hayır |
| 4 | Model yönlendirildi | {"type":"model_routed","shadow":bool,"from":…,"to":…,"difficulty":n,"projected_saving_pct":n} | Hayır |
| 5 | Yönlendirme değerlendirildi | {"type":"routing_evaluated","difficulty":n,"routed":bool} | Hayır |
| 6 | Token optimize edildi | {"type":"token_optimized","shadow":bool,"applied":bool,"original_tokens":n,"compressed_tokens":n,"tokens_saved":n,"ratio":n,"layers_applied":[…],"layer_savings":{…},"cache_hits":n,"cache_misses":n,"fell_back":bool} | Hayır |
| 7 | Girdi reddedildi | {"error":…,"type":"content_rejected","entities":[…]} | Evet |
| 8 | Token kullanımı | {"type":"token_usage","usage":{"prompt_tokens":n,"completion_tokens":n,"total_tokens":n}} | Hayır |
| 9a | Çıktı reddedildi | {"type":"output_content_rejected","severity":"critical","message":…,"reason":…,"entities_detected":n,"actions_applied":[…]} | Evet |
| 9b | Yanıt | {"id":"filtered-response","content":…,"finish_reason":"stop","filtered":bool,"entities_masked":n} | Hayır |
| 9c | Çıktı uyarısı | {"type":"output_content_warning","severity":"warning","message":…,"entities_detected":n,"actions_applied":[…]} | Hayır |
| 10 | Akış sonu | data: [DONE] | Evet |
İlk iki olay LLM inceleme kilit kapısından gelir ve yalnızca bir inceleme kullanıcıyı
kilitlediğinde veya bekleyen bir uyarı bıraktığında görünür. 4 ile 6 arasındaki olaylar yalnızca
model yönlendirmesi veya istem sıkıştırması etkinken görünür. 3. olay yalnızca istek documents
taşıdığında görünür. 9a ve 9b'den tam olarak biri gerçekleşir; 9c, 9b'yi izleyebilir.
Sekizinci ve dokuzuncu olayların sırasına dikkat edin: token_usage, yanıt hâlâ arabelleğe
alınırken iletilir; bu nedenle cevaptan sonra değil, önce gelir.
Nasıl okunur
Model metnini taşıyan tek olay bir type ile değil, "id":"filtered-response" ile tanımlanır.
Bunu eşleştirin:
content alanını olaylar boyunca biriktirmeyin. Yalnızca bir tane vardır.
token_usage çeşitleri
usage her zaman prompt_tokens, completion_tokens ve total_tokens taşır. İstem önbelleği
rakamlarını, bunları bildiren sağlayıcılar kendi alan adlarıyla ekler: OpenAI'de
cached_input_tokens, Anthropic'te cache_read_input_tokens ve cache_creation_input_tokens.
Bunları savunmacı biçimde okuyun.
Var olmayan olaylar
Bunlardan herhangi birini bekleyen bir istemci yazmayın — hiçbirini üreten yoktur:
content_block_delta,delta.text,message_stop,chatcmpl-…artımlı kimlikleri ve her türlü OpenAI veya Anthropic akış çerçevesi.input_rejected. Girdi reddetme olayıcontent_rejected'tır.hallucination. Bağlam doğrulama kontrolü, yanıt döndürüldükten sonra arka planda çalışır. Bir tespit kaydı ve bir oturum uyarısı yazar; akışa hiçbir zaman ulaşmaz.
Var olan ama burada iletilmeyen olaylar
- İstemde neyin maskelendiğini bildiren
user_message_processed, dahili olarak üretilir ve/chat/completionsüzerinde orkestratör tarafından yutulur.POST /sessions/:id/messagesüzerinde iletilir. - Her token başına sağlayıcı parçası, sağlayıcının kendi
finish_reasonparçası ve sağlayıcının kendi[DONE]çerçevesi.
Engellenen içerik
Politika engeli bir HTTP hatası değildir. Yanıt durumu 200'dür ve engel bir olay olarak gelir; bu nedenle yalnızca durum koduna bakan bir istemci başarı görür.
Engellenen girdi — sağlayıcı hiç çağrılmaz ve sağlayıcı token'ı harcanmaz:
Engellenen çıktı — model bir yanıt üretti, ancak çıktı filtresi onu döndürmeyi reddetti:
Ele alınmamış bir sunucu hatasında denetleyici data: {"error":"An error occurred"} yazar ve
akışı kapatır.
Desteklenen modeller
model, kiracınızın etkin sağlayıcı kimlik bilgisine sahip olduğu her modeli kabul eder. Güncel
liste için GET /models çağırın. Ürünle gelen katalog şudur:
| Sağlayıcı kodu | Modeller |
|---|---|
openai | gpt-4o, gpt-4o-mini, gpt-4-turbo, gpt-3.5-turbo |
azure_openai | gpt-4o, gpt-4o-mini, gpt-4-turbo, gpt-35-turbo |
anthropic | claude-opus-4-6, claude-sonnet-4-6, claude-sonnet-4-5-20250929, claude-haiku-4-5-20251001, claude-opus-4-1-20250805, claude-sonnet-4-20250514, claude-opus-4-20250514 |
google | gemini-2.5-flash, gemini-2.5-pro |
ollama | Yalnızca admin_user, superadmin ve viewer rollerine döndürülen iki sansürsüz kırmızı takım modeli |
openai ve azure_openai, gpt-4o, gpt-4o-mini ve gpt-4-turbo modellerinin ikisini de
kaydeder. Hangisini kastettiğinizi belirtmek için model ile birlikte provider gönderin.
Azure'un GPT-3.5 dağıtımı, noktasız biçimde gpt-35-turbo'dur.
Hatalar
| Durum | Nedeni |
|---|---|
| 400 | Gövde doğrulamayı geçemedi — eksik model veya messages, ya da aralık dışı bir değer |
| 401 | Eksik, hatalı biçimlendirilmiş veya tanınmayan bearer token |
| 402 | LICENSE_EXPIRED — kurulu lisans geçersiz veya süresi dolmuş |
| 403 | auditor için ROLE_NOT_FOR_CHAT, viewer için READ_ONLY_ROLE veya FEATURE_NOT_LICENSED |
| 423 | SETUP_REQUIRED — ilk açılış kurulumu tamamlanmamış |
| 500 | Ele alınmamış bir ağ geçidi hatası. Akış zaten açıksa bu, bunun yerine bir error olayı olarak gelir |
Bu uç noktada 429 yoktur: /chat/completions hız sınırlı değildir.
Diğer sohbet uç noktaları
| Metot ve yol | Döndürür | Açıklama |
|---|---|---|
POST /chat/harden-prompt | JSON | Bir istemi güvenlik ve netlik için yeniden yazar. Gövde {"prompt":…}, yanıt {original, hardened, improvements, risk_assessment} |
GET /chat/providers | JSON | {"providers":[{"id":…,"code":…,"name":…,"supported":…}],"total":n} |
İlgili
- API genel bakış — yüzeyler genelinde temel yollar, kimlik bilgileri ve hata biçimleri.
- Oturumlar API'si — sunucu tarafında konuşma durumuyla aynı pipeline.
- İçerik tespiti — bir sağlayıcı çağırmadan metin tarama.
Son güncelleme