Skip to main content
CID222 Docs
GeliştirmeAPI başvurusu

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

ÖzellikDeğer
Metot ve yolPOST /chat/completions
Kimlik bilgisiAğ 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 rolauditor; 403 ve ROLE_NOT_FOR_CHAT ile

İstek gövdesi

AlanTürZorunluNotlar
modelstringEvetGET /models çıktısındaki bir model adı
messagesarrayEvetKonuşma turları. Aşağıdaki "Mesaj biçimi" bölümüne bakın
providerstringHayıropenai, azure_openai, anthropic, google veya ollama. İki sağlayıcı aynı model adını kaydettiğinde gereklidir
temperaturenumberHayır0 ile 2 arası
max_tokensnumberHayır1 veya daha büyük
top_pnumberHayır0 ile 1 arası
content_filterstringHayırGirdi filtresi takma adı. content-safety-v2'ye geri düşer
contextsstring[]HayırArka plandaki halüsinasyon kontrolü için erişim pasajları
documentsarrayHayırAyrıştırılacak, denetlenecek, redakte edilecek ve bağlam olarak eklenecek belgeler
session_idstringHayırTuru, tespit kayıtları için mevcut bir oturuma bağlar
include_context_usagebooleanHayırBağlam penceresi muhasebesi ister
streambooleanHayırKabul 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.

{ "role": "user", "content": "Message content" }
{
  "role": "user",
  "content": [
    { "type": "text", "text": "What is in this image?" },
    { "type": "image_url", "image_url": { "url": "data:image/png;base64,iVBORw0KG…", "detail": "auto" } }
  ]
}
{
  "role": "user",
  "content": [
    { "type": "text", "text": "Summarise this contract" },
    { "type": "document", "document": { "data": "JVBERi0xLjQK…", "type": "pdf", "name": "contract.pdf" } }
  ]
}

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

curl -N -sS -X POST "https://<appliance-fqdn>/chat/completions" \
  -H "Authorization: Bearer cid_key_0123456789abcdef…" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o",
    "provider": "openai",
    "messages": [
      { "role": "system", "content": "You are a helpful customer service agent." },
      { "role": "user", "content": "My name is John Smith and my email is john@example.com" }
    ]
  }'

İstemcinin aldığı şey — alışverişin tamamı, sırasıyla:

data: {"type":"token_usage","usage":{"prompt_tokens":320,"completion_tokens":12,"total_tokens":332}}

data: {"id":"filtered-response","content":"Hello. How can I help you today?","finish_reason":"stop","filtered":false,"entities_masked":0}

data: [DONE]

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ıraOlayBiçimSonlandırıcı
1Kullanıcı kilitli{"type":"user_locked","reason":…,"review_id":…,"locked_at":…,"unlock_request_status":…}Evet
2Güvenlik uyarısı{"type":"security_warning","review_id":…,"message":…}Hayır
3Belgeler işlendi{"type":"documents_processed","count":N,"summaries":[…],"processing_time_ms":N}Hayır
4Model yönlendirildi{"type":"model_routed","shadow":bool,"from":…,"to":…,"difficulty":n,"projected_saving_pct":n}Hayır
5Yönlendirme değerlendirildi{"type":"routing_evaluated","difficulty":n,"routed":bool}Hayır
6Token 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
7Girdi reddedildi{"error":…,"type":"content_rejected","entities":[…]}Evet
8Token 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
9bYanı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
10Akış sonudata: [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:

if event.get("id") == "filtered-response":
    answer = event["content"]      # yanıtın tamamı, tam olarak bir kez

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_reason parç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:

data: {"error":"Content contains prohibited information","type":"content_rejected","entities":[{"type":"jailbreak","action":"reject","confidence":0.96}]}

data: [DONE]

Engellenen çıktı — model bir yanıt üretti, ancak çıktı filtresi onu döndürmeyi reddetti:

data: {"type":"token_usage","usage":{"prompt_tokens":88,"completion_tokens":140,"total_tokens":228}}

data: {"type":"output_content_rejected","severity":"critical","message":"🚫 Response blocked due to policy violations","reason":"Credit card detected in response","entities_detected":1,"actions_applied":["reject"]}

data: [DONE]

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ı koduModeller
openaigpt-4o, gpt-4o-mini, gpt-4-turbo, gpt-3.5-turbo
azure_openaigpt-4o, gpt-4o-mini, gpt-4-turbo, gpt-35-turbo
anthropicclaude-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
googlegemini-2.5-flash, gemini-2.5-pro
ollamaYalnı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

DurumNedeni
400Gövde doğrulamayı geçemedi — eksik model veya messages, ya da aralık dışı bir değer
401Eksik, hatalı biçimlendirilmiş veya tanınmayan bearer token
402LICENSE_EXPIRED — kurulu lisans geçersiz veya süresi dolmuş
403auditor için ROLE_NOT_FOR_CHAT, viewer için READ_ONLY_ROLE veya FEATURE_NOT_LICENSED
423SETUP_REQUIRED — ilk açılış kurulumu tamamlanmamış
500Ele 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 yolDöndürürAçıklama
POST /chat/harden-promptJSONBir istemi güvenlik ve netlik için yeniden yazar. Gövde {"prompt":…}, yanıt {original, hardened, improvements, risk_assessment}
GET /chat/providersJSON{"providers":[{"id":…,"code":…,"name":…,"supported":…}],"total":n}

İlgili

Son güncelleme

Bu sayfada