Entegrasyon örnekleri
Ağ geçidini cURL, Node.js, Python ve React'ten çağırın — çalışan bir SSE istemcisi, bağımsız bir tespit çağrısı ve sunucu tarafında bir konuşma.
- Sürüm: 0.4
- Rol: admin_user, normal_user
- Tür: görev
Ağ geçidine karşı çalışan bir istemci kurun: kimlik doğrulayın, hangi modelleri çağırabileceğinizi keşfedin, olay akışını doğru okuyun, model kullanmadan metin tarayın ve konuşmayı sunucuda tutun. Bu sayfadaki her parça gerçek rotalara karşı çalışır.
Neye ihtiyacım var?
- Lisans
- Any
- Rol
admin_usernormal_user
Ön koşullar
- Ağ geçidine erişilebiliyor ve GET /health isteğine status ok yanıtı veriyor.
- İlk açılış kurulumu tamamlanmış ve kurulu lisans geçerli — aksi hâlde aşağıdaki her rota 423 veya 402 döndürür.
- Kiracınız veya kiracı grubunuz için bir sağlayıcı kimlik bilgisi var, böylece en az bir model çağrılabiliyor.
- Sohbet, modeller ve tespit için bir ağ geçidi API anahtarınız (Authorization: Bearer cid_key_…) var; oturumları kullanacaksanız kullanıcı JWT'si almak için yerel oturum açma bilgileriniz var.
Aşağıdaki <gateway-host>, ağ geçidinin dinlediği adrestir — varsayılan olarak 3000 portu ya da
önündeki ters proxy'nin yayımladığı adres. Rota önekleri tek biçimli değildir: sohbet /chat,
oturumlar /sessions, modeller /models altındadır ve /api/v1 altındaki tek yüzey tespittir.
Warning
POST /chat/completions ve POST /sessions/:id/messages her zaman text/event-stream ile yanıt
verir. Ağ geçidi modelin yanıtını tamponlar, filtreler ve tüm cevabı tek bir filtered-response
olayı olarak yayar — token parçacıkları ve choices[] gövdesi yoktur. Her iki rotada da
response.json() çağırmak başarısız olur.
Kimlik bilginizin hangi modellere eriştiğini doğrulayın
GET /models hem JWT hem de cid_key_ taşıyıcısı kabul eder ve yalnızca sağlayıcısının
kiracınız için etkin kimlik bilgisi bulunan modelleri döndürür.
Yanıt bir model nesneleri dizisidir. Her biri, model alanında göndereceğiniz model_name
değerini ve modeli sunan sağlayıcıyı taşır:
Boş bir dizi, kiracınız için hiçbir sağlayıcı kimlik bilgisinin çözülmediği anlamına gelir ve biri çözülene kadar her sohbet çağrısı başarısız olur.
Komut satırından bir sohbet isteği gönderin
cURL'ün akışı tamponlamaması için -N kullanın.
Terminal, model üretirken duraklar, sonra tüm cevabı tek bir çerçevede yazdırır, ardından sonlandırıcıyı:
Model adı belirsiz olduğunda provider gönderin. gpt-4o, gpt-4o-mini ve gpt-4-turbo hem
openai hem azure_openai tarafından kaydedilir; Azure'un 3.5 modeli noktasız biçimde
gpt-35-turbo'dur.
Akışı kendi kodunuzdan okuyun
Çözülmüş baytları tamponlayın ve çerçeveler arasındaki boş satırdan bölün — tek bir okuma birden çok çerçeve ya da bir çerçevenin yarısını getirebilir.
Her iki istemci de tam cevabı döndürür ya da bir politika reddinde hata fırlatır.
İçerik olmayan olayları ele alın
İstek ile cevap arasında ağ geçidi kontrol olayları yayabilir. Kullanmadıklarınızı yok sayın,
ancak bilinmeyen bir type değerinin içerik işleyicinize düşmesine izin vermeyin.
| Olay | Ne zaman görünür | Ne yapmalı |
|---|---|---|
{"error":…,"type":"content_rejected"} | İstem politikayı ihlal etti. Sonlandırıcı; sağlayıcı çağrısı ve token harcaması yok | error değerini kullanıcıya gösterin; aynı metni yeniden denemeyin |
{"type":"user_locked",…} | Kullanıcı bir LLM incelemesiyle kilitlenmiş. Sonlandırıcı | Durun ve review_id değerini gösterin |
{"type":"security_warning",…} | Bir inceleme kullanıcıyı işaretledi. Sonlandırıcı değil | Günlüğe yazıp devam edin |
{"type":"documents_processed",…} | documents gönderdiniz | İsterseniz özetleri raporlayın |
{"type":"model_routed",…} / {"type":"routing_evaluated",…} | Model yönlendirme isteği değerlendirdi | Yalnızca telemetri |
{"type":"token_optimized",…} | İstem sıkıştırma çalıştı | Yalnızca telemetri |
{"type":"token_usage",…} | Sağlayıcı kullanım bildirdiğinde her zaman | İstem ve tamamlama dağılımını kaydedin |
{"type":"output_content_rejected",…} | Cevap engellendi. Sonlandırıcı | reason değerini gösterin; cevap atılır |
{"id":"filtered-response",…} | Cevap | content alanını gösterin |
{"type":"output_content_warning",…} | Cevap işaretlendi ama teslim edildi | Cevabın yanında bir uyarı gösterin |
Note
İsteminizin ne kadarının maskelendiğini bildiren user_message_processed olayı,
/chat/completions üzerinde yalnızca dahili olarak yayılır ve istemciye hiç ulaşmaz.
POST /sessions/:id/messages üzerinde ise istemciye ulaşır.
Model çağırmadan metin tarayın
POST /api/v1/guardrails/detect, hiçbir sağlayıcı devreye girmeden aynı tespit işlem hattını
çalıştırır. 200 döndürür ve kararı gövdede belirtir; dolayısıyla bir engelleme HTTP hatası
değildir.
action değeri reject, mask, flag veya allow olabilir. text 1–50.000 karakter
olmalıdır. detectedEntities[].value bir yer tutucu ya da [REDACTED] değeridir: uç nokta
bulduğu ham PII'yi asla geri döndürmez ve normalization.originalText bilinçli olarak boş
bırakılır.
Oturum ile konuşmayı sunucuda tutun
Oturumlar geçmişi sunucu tarafında tutar; böylece tur başına tek bir mesaj gönderirsiniz.
Yalnızca bir kullanıcı JWT'si kabul ederler — bir cid_key_ taşıyıcısı reddedilir, bu
yüzden önce oturum açın.
Mesaj çağrısı sohbetle aynı biçimde akar; kodlamaya değer tek fark şudur: bir oturum, istemi
{"type":"content_rejected","reason":…} ile ve error alanı olmadan reddeder; bu nedenle
/chat/completions için yazılmış bir işleyici bunu kaçırır.
Akışı tarayıcıya aktarın
Ağ geçidi kimlik bilgisini asla ön yüz koduna koymayın. Kendi rotanızda sonlandırın ve çerçeveleri olduğu gibi iletin; böylece tarayıcı aynı sözleşmeyi okur.
Asistan mesajı tek adımda görünür. Ağ geçidi üzerinden daktilo efekti mümkün değildir; çünkü çıktı filtrelemesi cevabın herhangi bir bölümünü serbest bırakmadan önce tamamına ihtiyaç duyar.
Doğrulama
curl -s https://<gateway-host>/healthçağrısı{"status":"ok",…}döndürür.curl -s https://<gateway-host>/models -H "Authorization: Bearer $CID222_API_KEY"boş olmayan bir dizi döndürür ve çağırmayı düşündüğünüzmodel_namebu dizidedir.- Sohbet istemciniz boş olmayan bir metin döndürür ve ham akış,
iddeğerifiltered-responseolan tam olarak bir çerçeve, ardındandata: [DONE]içerir. detect("Email me at john@example.com")çağrısımaskdeğerinde biractionve adresin bir yer tutucuyla değiştirildiği birmaskedTextdöndürür.- Filtre kümenizin reddettiği bir istem gönderin. Akış,
filtered-responseolmadan bircontent_rejectedolayıyla sonlanır ve deneme, panoda Tüm Tespitler altındarejectedeylemiyle görünür.
Başarısız olursa
- Her rota
code: "SETUP_REQUIRED"ile423döndürüyor → ilk açılış kurulumu tamamlanmamıştır; sihirbazı bitirin. - Her rota
code: "LICENSE_EXPIRED"ile402döndürüyor → Kurulumdan sonra 402 GET /models[]döndürüyor → kiracınız için hiçbir sağlayıcı kimlik bilgisi çözülmüyor. Kimlik Bilgileri altından bir tane ekleyin ya da kiracıyı böyle bir kimlik bilgisi olan bir gruba ekleyin.- Dün çalışan bir rotada
401→ JWT'nin süresi dolmuştur ya da API anahtarı yeniden oluşturulmuştur. /chat/completionsüzerinde çalışan bir anahtarla/sessionsüzerinde401→ oturumlar yalnızca JWT kabul eder.- İstemci askıda kalıp zaman aşımına uğruyor → hiç gelmeyecek token parçacıklarını bekliyordur.
Bunun yerine tek
filtered-responseolayını ele alın. Bkz. Hata yönetimi.
Sonraki adımlar
- Hata yönetimi — durum kodları, üç hata gövdesi biçimi ve hangi hataların yeniden denemeye değer olduğu.
- En iyi uygulamalar — kimlik bilgisi yönetimi, bağlantı yeniden kullanımı ve oturumlar ile durumsuz uç nokta arasında seçim.
- Sohbet tamamlamaları — istek DTO'sunun tamamı ve eksiksiz olay listesi.
- İçerik tespiti — tespit isteği ve yanıtının her alanı.
Son güncelleme