Bank analitiki "ötən ayın vadəli depozit gəliri ən yüksək 5 filialı" deyə soruşduqda doğru cavab artıq SQL-in içindədir. Onu təhlükəsiz çıxarmaq isə bir neçə yoxlama tələb edir: istifadəçi səlahiyyətli mi, hansı metric tərifi tətbiq olunur, nəticədə FİN kodu və ya IBAN sızabiləcəkmi, rəqəmlər göstərilən dataframe ilə üst-üstə düşürmü? CentraQL AI BI Copilot pipeline bu səthi 11 mərhələdə idarə edir.
Pipeline-ın məqsədi
Təbii dil sualını izlənə bilən, audit edilə bilən və sübut edilə bilən cavaba çevirmək. *İzlənə bilən* — hər mərhələdə hansı LLM-in, hansı konteksdə işlədiyi log-lanır. *Sübut edilə bilən* — cavabın hansı SQL-dən və hansı semantik təriflərdən çıxdığı istifadəçiyə göstərilir.
1. Guard
Sorğu səthə dəyməmişdən əvvəl policy qatı işləyir: istifadəçi rolu, veri təsnifatı, ComplianceProfile (məs. RegulatedFinance). Prompt-injection paternləri yüngül regex + similarity filtri ilə yoxlanır; yüksək riskli giriş rədd edilib log-lanır.
2. Intent
Qısa bir LLM çağırışı (adətən 7B planner) sualı təsnif edir: aqreqasiya, trend, drill-down, anomaliya izahı. Hər tip fərqli şablon və few-shot dəstinə yönləndirilir.
3. Retrieve (Qdrant)
Domain pack içində sertifikatlı few-shot və KPI tərifləri nomic-embed-text ilə vektorlanmışdır. Sualın semantik qonşuları çəkilir; planner-ə top-k (~5) konteks kimi verilir.
4. Plan — QuerySpec JSON
Planner LLM-ə few-shot + sual birləşik prompt-u verilir. Çıxış azad SQL deyil, JSON QuerySpec-dir: hansı metric, hansı dimension, hansı filter, hansı sort, hansı limit. JSON schema validatoru forması zorlayır; uyğunsuz çıxış rədd edilir, bir dəfə retry edilir.
5. Validate
QuerySpec semantik qatın qarşısında yoxlanır. Metric təyin olunubmu, dimension etibarlıdırmı, filter sahəsi istifadəçinin girişinə açıqdırmı? RegulatedFinance-də əlavə yoxlama: rangeOf, joinDepthMax, allowFreeText=false. Rədd olarsa istifadəçiyə səbəblə qaytarılır.
6. Synth — SQL
QuerySpec deterministik builder ilə T-SQL-ə çevrilir. LLM bu mərhələdə işlədilmir, ona görə hallüsinasiya mümkün deyil. SQL formatlanır, hash-lənir, audit-ə yazılır.
7. Execute (read-only)
Hazırlanan SQL read-only bağlantı üzərində işləyir. Timeout default 30 sn, RegulatedFinance üçün 10 sn. Row limiti profil əsaslıdır (adətən 1000 sətir).
8. Mask (PII)
Nəticə dataframe ColumnPolicy-yə görə filtrlənir: FİN, IBAN, email, telefon maskalanır və ya silinir. Maskalama execute-dən sonra, narrate-dən əvvəl baş verir — həssas sahə LLM-ə heç vaxt çatmır.
9. Chart
Nəticənin formasına görə uyğun qrafik (line, bar, pie, table) və oxlar seçilir. QuerySpec öncədən təyin etmiş ola bilər; əks halda heuristik işləyir.
10. Narrate (LLM)
Maskalanmış nəticə + chart spec narrator LLM-ə verilir. Sanitization mərhələsi narrative içindəki rəqəm/faiz/məbləğləri orijinal cədvəllə müqayisə edir; uyğunsuzluq düzəldilir.
11. Audit
Pipeline-ın hər mərhələsinin metadata-sı PromptAuditLog-a yazılır: sorğu hash, istifadəçi, timestamp, planner və narrator modeli adı, token, dönən sətir, maskalanan sütunlar, p50/p95 latency. BDDK üçün 365 gün retention.
Tipik latency
1×RTX 4090 + Qdrant + SQL Server üzərində p95 ≈ 6-9 sn:
- Guard + Intent: 200 ms
- Retrieve: 80 ms
- Plan (7B q4): 2-3 sn
- Validate + Synth: 60 ms
- Execute: 150-800 ms
- Mask: 30 ms
- Narrate (14B q4): 1.5-3 sn
- Audit (async): 20 ms
Yekun
CentraQL Copilot memarlığı "LLM mənə SQL yazsın" yanaşmasının əksinədir: LLM yalnız dil və narrative üçün, SQL deterministik builder-dən, semantik qatdan və kataloq sərhədindən keçir, çıxış maskalanır. Nəticə: rəqəmlərdə hallüsinasiya riski sıfır olan tənzimləyici-səviyyəli memarlıq.
