Mimari

Mimari

Bileşenler ve portlar, denetim hattı, politika modeli, dedektör kayıt defteri, kanıt defteri, kimlik ve lisans, geçit ve işlevsel olmayan gereksinimler.

Güncelleme: Ekim 2026

Bileşenler ve portlar

Bir Thulpar kurulumu altı bileşenden oluşur: api (kontrol düzlemi ve check API), geçit (veri düzlemi), dedektörler (CPU ve GPU), konsol, Postgres ve Valkey. Hepsi aynı Compose projesinde ya da aynı Helm sürümünde çalışır; yalnız api ve geçit dışarıya yönlendirilen bir ağdadır, geri kalanı iç ağlardadır.

KURUM AĞI · KAPALI DEVRE Uygulama / ajanOpenAI SDK · thp_live_… MCP istemcisitools/list · tools/call Aginies Platformyürütücü kancaları THULPAR thulpar-gateway/v1/* · /mcp/:server · :8053 thulpar-api/v1/check · politika · defter thulpar-detectorsCPU: ONNX, llama.cpp · GPU: vLLM konsol:8050 · OIDC Postgres · Valkeydefter · durum Model uç noktalarıvLLM · kurumun kendi MCP sunucularışema sabitlenmiş OIDC · SPIREkullanıcı · iş yükü kanıt defteri · günlük çapa · imzalı kanıt paketleri · çevrimdışı doğrulanırKVKK · BDDK · SEDDK · kamu · EU AI Act · ISO 42001 · DORA İNTERNET telemetri lisans sunucusu satıcı API’si uzak üretim × çalışma zamanında hiçbir bağlantı yalnız kurulumda: ghcr.io · özetle sabit ya da air-gap medyası ×
BileşenGöreviPort
thulpar-webKonsol: bulgular, defter, dedektörler, politikalar, onaylar, geçit modelleri, MCP sunucuları, API anahtarları, kanıt paketleri, sağlık, kurulum ayarları; TR varsayılan, EN8050
thulpar-apiCheck API, politika çözümleme, ray motoru, Cedar, etiketler, onaylar, defter, dışa aktarımlar, lisans, konsolun kontrol düzlemi8051
thulpar-gatewayOpenAI-uyumlu proxy ve MCP proxy; motor süreç içinde, api’ye HTTP sıçraması yok8053
thulpar-detectorsDetector API sidecar’ları: CPU katmanı (ONNX, llama.cpp, Presidio, dosya çözümleyici) ve GPU adaptörü (vLLM uç noktaları)yayımlanmaz
PostgresPolitikalar, defter, onaylar, dedektörler, API anahtarları, kurulum ayarlarıyayımlanmaz
ValkeyOturumlar, önbellekler, hız sınırları, hold sinyalleri, akış biletleri (Redis protokolü)yayımlanmaz
Prometheus /metricsapi ve geçidin kendi dinleyicileri; hiçbir zaman 8051/8053 üzerinde değil9051 / 9053, yalnız loopback
Dedektörler, Postgres ve Valkey host’a yayımlanmaz ve dışarıya rotası olmayan Compose-internal ağlardadır: yanlış yönlendirilmiş bir bağlantı host güvenlik duvarına ulaşmadan düşer.

Denetim hattı

Çağıran aşamayı, içeriği ve bağlamı gönderir. api anahtarı kiracıya bağlar, hız sınırını ve kabul kontrolünü uygular; politika çözümleyici (kiracı, uygulama, ajan, sürüm) için derlenmiş ray grafiğini verir; motor grafiği çalıştırır, bulguları toplar, kararı çıkarır ve defter olayını yazar.

  • Bir aşamanın rayları bağımlılığa göre seviyelenir: bağımsız raylar paralel çalışır, bir ray başka bir rayın bulgularını after ile tüketir (ör. enjeksiyondan sonra PII maskeleme).
  • Her rayın kendi süre bütçesi vardır; çağıranın options.deadlineMs değeri üst sınırdır. Süresi dolan ray duruşuyla kaydedilir.
  • Sonuçlar grafik sırasına göre katlanır; yanıt hangi dedektörün önce bittiğine bağlı değildir. Öncelik: deny > hold > rewrite > reask > redact > escalate > allow_with_findings > allow.
  • async rayları yanıt gittikten sonra çalışır ve ana olaya bağlı bir takip olayı yazar; escalate bulgusu kiracı webhook’unu çağırır.
  • Kabul edilen her denetim tam bir defter olayı yazar, her çıkış yolunda: motor hatası bile kapalı bir ray altında kaydedilmiş bir deny’dır, adaptörün açık düşebileceği bir 500 değil.
Aşamap50 bütçe (tasarım)Not
input150 mssenkron; çağıran destekliyorsa üretimle paralel (spekülatif bilet)
tool_call50 msCedar + deterministik doğrulayıcılar
output250 mssenkron ya da geri çekme çerçevesiyle asenkron
output_chunk40 mscümle başına
retrieval100 msparti başına

Politika modeli

Bir politika paketi JSON’dur ve yayımlanmış bir şemaya karşı doğrulanır. Paketler org → kiracı → uygulama → ajan sırasıyla katmanlanır: alt paket her şeyi miras alır, ray parametrelerini değiştirebilir, ray ekleyebilir ya da bir rayı kapatabilir. Üst paketin kilitlediği bir ayar altta yalnız sıkılaştırılabilir; bunu yazarın iyi niyeti değil birleştirme işlemi zorlar.

  • Sürümler: semver + içerik hash’i; her sürüm Ed25519 ile imzalanır (istemci tarafında kayıtlı bir anahtarla ya da kurulumun kendi imzalama anahtarıyla). Konsol sürümler arasındaki ray düzeyinde farkı gösterir.
  • Aktivasyon kapıları: şema ve Cedar geçerliliği; hiçbir dedektörün uygulamadığı kapalı bir ray reddedilir; adlandırılmış her onay profili zincirde tanımlı olmalıdır; şablonun asgari katmanı kurulumla karşılaştırılır.
  • policy.requireApproval aktivasyonu iki kişilik bir işlem yapar; policy.requireBenchmark başarısız bir kırmızı takım kıyaslamasıyla aktivasyonu engeller.
  • Beş imzaya hazır sektör şablonu: tr-banking-bddk, tr-insurance-seddk, tr-public-sector, tr-defence, eu-ai-act-high-risk; her birinin CPU katmanı için bir -baslangic varyantı vardır.
{
  "id": "acme-banking", "version": "1.2.0", "extends": "tr-banking-bddk",
  "scope": { "level": "tenant", "tenantId": "tnt_acme" },
  "rails": [
    { "id": "pii.redact", "stages": ["input", "output"], "mode": "enforce",
      "failPosture": "closed", "onFinding": "redact", "locked": true },
    { "id": "groundedness", "stages": ["output"], "mode": "shadow",
      "params": { "minSupport": 0.6 } }
  ],
  "approvals": { "four-eyes": { "approvers": ["TENANT_ADMIN"], "fourEyes": true,
                                "slaMinutes": 60, "fallback": "deny" } }
}

Dedektör kayıt defteri

Her dedektör aynı HTTP Detector API’sinin arkasında çalışır ve kendini tanıtır: kimlik, sürüm, sınıf, not, diller, uyguladığı raylar, yetenekler. Ray, ihtiyaç duyduğu sınıfı ve asgari notu bildirir; kayıt defteri kurulu katmanda o sınıfı uygulayan, nota ulaşan ve tespit edilen dili destekleyen en iyi dedektörü çözer.

  • Hiçbir dedektör çözülemezse rayın duruşu uygulanır, aktivasyon boşluğu bildirir ve sağlık sayfası gösterir; sessiz bir izin yoktur.
  • Dil geçişi: her cümlenin dili tespit edilir ve segment o dilin dedektörüne yönlendirilir; Türkçe bir belgenin içindeki İngilizce talimat İngilizce kurallara ulaşır.
  • Hangi dedektörlerin çalıştığı konsolda seçilir; bellek tahmini konteynerin sınırına karşı gösterilir, sığmayan değişiklik uygulanmaz.
  • Yerleşik raylar (secrets, system_prompt.leak, tool.args, tool.authz, labels.sink, budget, conversation, schema, exfil) süreç içinde çalışır ve dedektör gerektirmez.
  • Kurumun kendi dedektörü de kayıt olur: Detector API’yi uygulayan her HTTP servisi ray grafiğinde aynı yere oturur.

Kanıt defteri

Her olay kiracının zincirine hash = SHA-256(önceki hash ‖ kanonik JSON) ile eklenir; kanonikleştirme RFC 8785’tir. İçeriğin kendisi değil hash’i saklanır; bir PII rayı içeriğin üzerinden geçtiyse en çok 2 KB’lık redakte bir örnek yanında durur ve saklama süresi sonunda zincire dokunmadan silinir.

Zincir
Kiracı başına bir zincir; kurulum geneli değişiklikler platform zincirinde. Her yapılandırma değişikliği (politika, anahtar, dedektör, lisans, ayar) bir config_change olayıdır.
Çapalar
Günlük iş son çapadan beri yazılan her olayı kök hash’iyle kapatır ve bir anchor olayı ekler; liste kurumun kendi noterine ya da SIEM’ine verilebilir.
Gece doğrulama
Her gece son çapaların kök hash’leri saklanan olaylardan yeniden hesaplanır ve kuyruk hash hash doğrulanır; kırık bir zincir kritik bir uyarıdır.
Olay içeriği
Aşama, mod, uygulama, ajan, paket sürümü, çalışan ve atlanan raylar, dedektör sürümleri, karar, bulgular, etiketler, gecikme, içerik hash’i, onay kimliği.
Kanıt paketleri
Kiracı, dönem ve profil başına imzalı ZIP; yedi regülatör profili; kurulumun açık anahtarıyla çevrimdışı doğrulanır.

Kimlik, kiracılık, lisans

Thulpar son kullanıcı saklamaz. İnsanlar için kimlik kurumun OIDC sağlayıcısından (ya da Aginies’e gömülü profilde Platform’dan) gelir; IdP’siz kurulumda ve break-glass için yerel yönetici hesapları + TOTP vardır. Çağıranlar thp_live_… API anahtarı taşır; anahtar bir kiracıya bağlıdır ya da bir SUPER_ADMIN tarafından birden çok kiracıya hizmet eden bir entegrasyon için kurulum anahtarı olarak basılır.

  • Roller: SUPER_ADMIN (kurulum, katmanlar, dedektörler, lisans), TENANT_ADMIN (politika, bulgular, onaylar), onaylayan (yalnız onay kutusu). Konsol bir yönetici konsoludur.
  • Her tablo kiracı kimliği taşır; yabancı satır 404’tür. Devre dışı bir kiracının anahtarları ve oturumları 403 alır; hiçbir şey silinmez.
  • İş yükleri için isteğe bağlı SPIFFE kimliği: X.509 ya da JWT SVID güven paketi dosyalarından doğrulanır, paketin identity bölümü SPIFFE kimliğini uygulama/ajana bağlar ve kimlik kapısı her raydan önce çalışır.
  • Lisans Ed25519 imzalı bir JSON belgesidir; doğrulama, uygulama ve sayım kurulumun içinde çalışır. Hiçbir kiracı ihmalle lisanslanmaz.

Geçit ve ölçekleme

Geçit Thulpar’ın kendi veri düzlemidir: herhangi bir OpenAI-uyumlu istemci ve herhangi bir MCP istemcisi onu model uç noktalarının ve araç sunucularının önüne koyar. Motoru süreç içinde çalıştırır; api’ye HTTP sıçraması, konsol kontrol düzlemi ve zamanlanmış iş yoktur. Postgres ve Valkey dışında durumsuzdur ve yatay ölçeklenir.

  • Modeller kiracı takma adlarıdır: takma ad, yukarı akış URL’si, model adı ve mühürlenmiş kimlik bilgisi konsolda tanımlanır; istemci yalnız base URL ve anahtarı değiştirir.
  • Akış: yanıt cümlelere bölünür, her cümle output_chunk aşamasında denetlenir; maskelenmesi ya da durdurulması gereken içerikte istemciye bir geri çekme çerçevesi ve maskeli metin gider.
  • MCP proxy: tools/list şemaları hash’lenir ve sabitlenir, değişen araç karantinaya alınır, açıklama hijyeni uygulanır; tools/call argümanları araç raylarından, sonuçlar dolaylı enjeksiyon ve PII raylarından geçer.
  • Egress kuralı: geçit yalnız yapılandırılmış yukarı akışlara, MCP sunucularına ve adlandırılmış yetkilendirme sunucularına çıkar; özel, loopback ve metadata adresleri kayıtta ve her çağrıda reddedilir.
  • Yük altında: anahtar başına token kovası (429), replika başına eşzamanlılık sınırı; yumuşak sınırın üstünde kalite rayları atılır, sert sınırın üstünde 503 ve bir shed defter olayı; kiracı adil payı.
  • Loglarda ham içerik yok: pino redakte eder, metrik etiketleri sınırlı sözcüklerdir, hiçbir zaman kiracı kimliği ya da içerik değildir. OTel izleri yalnız bir uç nokta verildiğinde ve içeriksiz.