
# Dinaminio žinių grafo praturtinimas realaus laiko klausimyno kontekstualizavimui

## Įvadas

Saugumo klausimynai ir atitikties auditai tapo siaubo kertuvu kiekvienoje sparčiai augančioje SaaS įmonėje. Komandos praleidžia begales valandų ieškodamos tinkamo politikos punkto, išgaunančios įrodymus iš dokumentų saugyklų ir perrašo tą patį atsakymą kiekvienam naujam tiekėjo užklausimui. Nors didelių kalbos modeliai (LLM) gali generuoti juodraščio atsakymus, jie dažnai praleidžia **reguliacinę niuansą**, kuri keičiasi nuo dienos iki dienos – naujus Europos duomenų apsaugos tarybos (EDPB) nurodymus, atnaujintą [NIST CSF](https://www.nist.gov/cyberframework) (pvz., NIST SP 800‑53) kontrolės rinkinį arba neseniai paskelbtą [ISO 27001](https://www.iso.org/standard/27001) pataisą.

**Procurize** sprendžia šią problemą su **Dinaminio žinių grafiko praturtinimo varikliu (DKGEE)**. Variklis nuolat priima realaus laiko reguliavimo srautus, susieja juos į vieningą žinių grafiką ir pateikia kontekstinius įrodymus, kurie iš karto prieinami klausimyno kūrimo vartotojo sąsajoje. Rezultatas – *vienintelis tiesų šaltinis*, kuris automatiškai tobulėja, sumažina atsakymo laiką nuo dienų iki minučių ir užtikrina, kad kiekvienas atsakymas atspindi naujausią atitikties būklę.

Šiame straipsnyje aptarsime:

1. Kodėl dinaminis žinių grafas yra trūkstamas ryšys tarp AI generuotų juodraščių ir auditui paruoštų atsakymų.  
2. Architektūrą, duomenų srautą ir pagrindinius DKGEE komponentus.  
3. Kaip integruoti variklį su Proprietize esamomis užduočių valdymo ir komentarų sluoksniais.  
4. Realų pasaulio atvejo analizę su matomiomis naudos rodikliais.  
5. Praktinius patarimus komandoms, norinčioms šiandien įdiegti variklį.

---

## 1. Kodėl statinė žinių bazė nepakankama

| Problema | Statinė žinių bazė | Dinaminis žinių grafas |
|----------|--------------------|------------------------|
| **Reguliavimo atnaujinimai** | Reikalauja rankinio importo; atnaujinimai vėluoja savaites. | Automatizuotas srautų įkėlimas; atnaujinimai per kelias minutes. |
| **Kryžinių sistemų susiejimas** | Rankų darbo susiejimo lentelės išsisklaido. | Grafo ryšiai išlieka nuoseklūs, kai atsiranda nauji mazgai. |
| **Kontekstinių įrodymų paieška** | Raktinių žodžių paieška duoda triukšmingus rezultatus. | Semantinis grafo naršymas suteikia tikslius, šaltiniu patikrintus įrodymus. |
| **Auditingas** | Nėra automatinės pakeitimų žurnalo. | Integruota versijavimas ir kilmės stebėjimas kiekvienam mazgui. |

Statinė saugykla gali laikyti politiką, bet ji negali *suprasti*, kaip naujas reglamentas – pvz., GDPR straipsnis – keičia esamos ISO kontrolės interpretaciją. DKGEE tai sprendžia **modeliuodama reguliavimo ekosistemą kaip grafą**, kurio kiekvienas mazgas atspindi punktą, gairės arba įrodymo elementą, o briaunos koduoja ryšius kaip *„reikalauja“*, *„atšaukia“* ar *„susieja su“*. Kai gaunamas naujas reglamentas, grafas **incrementaliai praturtinamas**, išsaugant istoriją ir iš karto rodomas poveikis esamiems atsakymams.

---

## 2. Architektūros apžvalga

Žemiau pateikiamas aukšto lygio Mermaid diagrama, kuri vaizduoja DKGEE srautą.

```mermaid
graph TD
    A["Reguliacinių duomenų šaltiniai"] --> B["Įkėlimo servisas"]
    B --> C["Normalizavimas ir įvykių išgavimas"]
    C --> D["Grafo atnaujinimas"]
    D --> E["Dinaminis žinių grafas"]
    E --> F["Kontekstinio paieškos variklis"]
    F --> G["Procurize UI (klausimyno kūrimo įrankis)"]
    G --> H["LLM juodraščio generatorius"]
    H --> I["Žmogaus įvedimo peržiūra"]
    I --> J["Galutinio atsakymo saugykla"]
    J --> K["Audito žurnalas ir versijavimas"]
```

### 2.1 Pagrindiniai komponentai

1. **Reguliacinių duomenų šaltiniai** – Jungikliai oficialiems šaltiniams (ES Oficialioji žurnalo, NIST RSS, ISO atnaujinimai), bendruomenės srautams (GitHub palaikomi atitikties taisyklų rinkiniai) ir tiekėjų politikų pokyčiams.  
2. **Įkėlimo servisas** – Lengvas mikroservisas, sukurtas **Go**, kuris patikrina duomenų paketus, aptinka dublikatus ir skelbia neapdorotus duomenis į Kafka temą.  
3. **Normalizavimas ir įvykių išgavimas** – Naudoja **spaCy** ir **Hugging Face** vardų atpažinimo modelius, pritaikytus teisiniam tekstui, kad išgautų punktus, apibrėžimus ir nuorodas.  
4. **Grafo atnaujinimas** – Vykdo **Cypher** komandas prieš **Neo4j** duomenų bazę, kuria arba atnaujina mazgus ir briaunas, išsaugodamas versijų istoriją.  
5. **Dinaminis žinių grafas** – Saugo visą reguliavimo ekosistemą. Kiekvienas mazgas turi savybes: `id`, `source`, `text`, `effectiveDate`, `version`, `confidenceScore`.  
6. **Kontekstinio paieškos variklis** – RAG tipo servisas, gaunantis klausimyno užklausą, atlieka **semantinį grafo naršymą**, reikalauja įrodymų ir grąžina JSON struktūrą.  
7. **Procurize UI integracija** – Priekinė dalis gauna JSON ir tiesiogiai po kiekvienu klausimu rodo pasiūlymus, su įterptomis pastabomis ir mygtuku „Taikyti atsakymui“.  
8. **LLM juodraščio generatorius** – **GPT‑4‑Turbo** modelis, kuris naudojasi gautomis įrodymus kaip pagrindą kuriant pirmąjį atsakymo juodraštį.  
9. **Žmogaus įvedimo peržiūra** – Peržiūrėtojai gali priimti, redaguoti arba atmesti juodraščius. Visi veiksmai registruojami audito tikslais.  
10. **Galutinio atsakymo saugykla ir audito žurnalas** – Atsakymai saugomi *nekintamoje* knygoje (pvz., **AWS QLDB**) su kriptografinėmis maišos reikšmėmis, susietomis su konkrečiu grafo momentu.

---

## 3. Duomenų srautas – Nuo srauto iki atsakymo

1. **Srauto atvykimas** – Publikuojama nauja NIST SP 800‑53 versija. Šaltinio surinkėjas parsiunčia XML, konvertuoja jį į JSON ir išsiunčia į Kafka.  
2. **Išgavimas** – Įvykių išgavimas žymi kiekvieną kontrolę (`AC‑2`, `AU‑6`) ir susijusias gairių pastraipas.  
3. **Grafo mutacija** – `MERGE` komandos prideda naujus mazgus arba atnaujina `effectiveDate` egzistuojančiuose. Briauna `OVERWRITES` susieja naują kontrolę su ankstesne versija.  
4. **Momentinio vaizdo kūrimas** – Neo4j įmontuotas **temporal** papildinys fiksuoja momentinį ID (`graphVersion=2025.11.12.01`).  
5. **Klausimo paskata** – Saugumo analitikas atidaro klausimą „Kaip valdomas paskyrų suteikimas?“  
6. **Kontekstinė paieška** – Paieškos variklis ieško mazgų, susijusių su `AC‑2` **ir** filtruoja pagal įmonės produktų sritį (`SaaS`, `IAM`). Grąžina du politikos fragmentus ir neseniai paskelbto audito ataskaitos ištraukas.  
7. **LLM juodraštis** – LLM gauna klausimą plius gautus įrodymus ir generuoja glaustą atsakymą, cituojant įrodymų ID.  
8. **Žmogaus peržiūra** – Analitikas patikrina citatas, prideda pastabą apie neseniai įgyvendintą vidinį procesą ir patvirtina.  
9. **Audito įrašas** – Sistema įrašo grafo momentinį ID, įrodymų mazgų ID, LLM versiją ir peržiūrėjo vartotojo ID.

Visi šie žingsniai paprastai trunka **mažiau nei 30 sekundžių** įprastam klausimyno elementui.

---

## 4. Įgyvendinimo vadovas

### 4.1 Reikalavimai

| Elementas | Rekomenduojama versija |
|-----------|------------------------|
| Neo4j | 5.x (Enterprise) |
| Kafka | 3.3.x |
| Go | 1.22 |
| Python | 3.11 (spaCy ir RAG) |
| LLM API | OpenAI GPT‑4‑Turbo (ar Azure OpenAI) |
| Debesis | AWS (EKS paslaugoms, QLDB auditui) |

### 4.2 Žingsnis po žingsnio diegimas

1. **Įdiegti Neo4j klasterį** – Įjungti **Temporal** ir **APOC** papildinius. Sukurti `regulatory` duomenų bazę.  
2. **Sukurti Kafka temas** – `regulatory_raw`, `graph_updates`, `audit_events`.  
3. **Konfigūruoti srauto surinkėjus** – Naudoti oficialų **EU Gazette** RSS, **NIST** JSON srautą ir GitHub webhooką bendruomeninių SCC taisyklių atnaujinimams. Slaptažodžius saugoti **AWS Secrets Manager**.  
4. **Paleisti įkėlimo servisą** – Dockerizuoti Go servisą, nurodyti aplinkos kintamąjį `KAFKA_BROKERS`. Stebėti per **Prometheus**.  
5. **Paleisti įvykių išgavimą** – Sukurti Python Docker atvaizdą su `spaCy>=3.7` ir pritaikytu teisės NER modeliu. Prenumeruoti `regulatory_raw` ir publikuoti normalizuotus įvykius į `graph_updates`.  
6. **Grafo atnaujinimas** – Parašyti srautų procesorių (pvz., **Kafka Streams** Java), kuris perkauna `graph_updates`, generuoja Cypher užklausas ir jas vykdo prieš Neo4j. Kiekvieną mutaciją žymėti koreliacijos ID.  
7. **RAG paieškos servisas** – Eksponuoti FastAPI endpointą `/retrieve`. Naudoti semantinį panašumą su **Sentence‑Transformers** (`all-MiniLM-L6-v2`). Servisas atlieka dvigubą kelionę: **Klausimas → Reikalinga kontrolė → Įrodymas**.  
8. **Integruoti su Procurize UI** – Pridėti React komponentą `EvidenceSuggestionPanel`, kuris kviečia `/retrieve` kai klausimo laukas gauna foką. Rodyti rezultatus su žymimais langeliais „Įterpti“.  
9. **LLM orkestracija** – Naudoti OpenAI **Chat Completion** endpointą, perduodant gautus įrodymus kaip sistemos žinutes. Užfiksuoti `model` ir `temperature` parametrus vėlesniam pakartojimui.  
10. **Audito žurnalas** – Parašyti Lambda funkciją, kuri fiksuoja kiekvieną `answer_submitted` įvykį, įrašo į QLDB įrašą su SHA‑256 atsakymo maiša ir nuoroda į grafo momentinį ID (`graphVersion`).  

### 4.3 Geriausios praktikos

- **Versijų fiksavimas** – Visada saugoti tikslią LLM modelio versiją ir grafo momentinį ID prie kiekvieno atsakymo.  
- **Duomenų išsaugojimas** – Laikyti visus reguliavimo duomenų šaltinius ne mažiau kaip **7 metus** atitikties audito reikalavimams.  
- **Saugumas** – Šifruoti Kafka srautus su TLS, įjungti Neo4j prieigos kontrolės vaidmenis ir apriboti QLDB rašymo teises tik auditų Lambda funkcijoms.  
- **Stebėsena** – Nustatyti įspėjimus apie RAG paieškos variklio vėlinimą; tikslas – < 200 ms už užklausą.  

---

## 5. Realus poveikis: atvejo analizė

**Įmonė:** SecureSoft, vidutinė SaaS platforma, dirbanti sveikatos technologijų sektoriuje.

| Rodyklė | Prieš DKGEE | Po DKGEE (3‑mėnesio laikotarpis) |
|----------|--------------|---------------------------------|
| Vidutinis laikas atsakyti į klausimyno punktą | 2,8 val. | 7 min. |
| Rankų darbo įrodymų paieškos darbo valandos | 120 h/mėn. | 18 h/mėn. |
| Reguliavimo neatitikimų skaičius auditų metu | 5 per metus | 0 (neatitikimų nebuvo) |
| Atitikties komandos pasitenkinimas (NPS) | 28 | 72 |
| ROI (skaidant darbo sąnaudų sutaupymą) | — | ~ 210 tūkst. USD |

**Svarbiausi sėkmės veiksniai**

1. **Momentinis reguliavimo kontekstas** – Kai NIST atnaujino SC‑7, grafas iš karto rodyti pranešimą UI, skatinant komandą peržiūrėti susijusius atsakymus.  
2. **Įrodymų kilmės atsekamumas** – Kiekvienas atsakymas rodė nuorodą į konkretų punktą ir versiją, auditoriai galėjo patvirtinti vidurią akimirksniu.  
3. **Duomenų dubliavimo šalinimas** – Žinių grafas ištrynė perteklinius įrodymus tarp produktų linijų, taip sumažindamas saugyklų kaštus **30 %**.  

SecureSoft planuoja išplėsti variklį į **privatumą įtakos įvertinimus (PIA)** ir integruoti jį į savo **CI/CD pipeline**, kad automatizuotų politikos atitiktį kiekvienam išleidimui.

---

## 6. Dažnai užduodami klausimai

**K1: Ar variklis veikia su neanglų kalbos reglamentais?**  
Taip. Įvykių išgavimas įtraukia daugiakalbės modelius; galite pridėti kalbai specifinius srauto surinkėjus (pvz., japonų APPI, Brazilijos LGPD) ir grafas išsaugos kalbos žymas kiekvienam mazgui.

**K2: Kaip sprendžiame prieštaringus reglamentus?**  
Automatiškai sukuriamos `CONFLICTS_WITH` briaunos, kai du mazgai persidengia, bet turi skirtingus reikalavimus. Paieškos variklis reikalauja įrodymų pagal `confidenceScore`, kuris įvertina reguliavimo hierarchiją (pvz., GDPR > nacionalinis įstatymas).

**K3: Ar ši sistema priklauso nuo konkretaus tiekėjo?**  
Ne. Visi pagrindiniai komponentai yra atvirojo kodo (Neo4j, Kafka, FastAPI). Tik LLM API yra trečiosios šalies paslauga, tačiau galite ją pakeisti bet kuriuo modeliu, kuris atitinka OpenAI API specifikaciją.

**K4: Kokia duomenų išsaugojimo politika žinių grafui?**  
Rekomenduojame **laiko kelionės** metodą: išsaugoti kiekvieną mazgo versiją neapribojamai, senesnes momentines nuotraukas perkelti į šaltą saugyklą po 3 metų, tačiau saugoti tik aktyvų vaizdą kasdieniniam naudojimui.

---

## 7. Pradėkite jau šiandien

1. **Paleiskite įkėlimo sluoksnį** – Pasirinkite vieną reguliavimo šaltinį (pvz., [ISO 27001](https://www.iso.org/standard/27001)) ir srauto įkėlimą į testinę Neo4j instanciją.  
2. **Išbandykite paiešką** – Naudokite pateiktą Python skriptą `sample_retrieve.py`, kad paklausiate „Duomenų saugojimo politika ES klientams“. Patikrinkite, ar gaunami įrodymai.  
3. **Integruokite su smėlio aplinkos klausimynu** – Įdiekite UI komponentą „EvidenceSuggestionPanel“ į Procurize testinę aplinką. Leiskite keliems analitikams išbandyti „Taikyti įrodymą“ funkciją.  
4. **Matuokite** – Užfiksuokite pradinius metrikus (laikas per atsakymą, rankų darbo paieškos skaičius) ir palyginkite po dviejų savaičių naudojimo.  

Jei norite gauti praktinę pagalbą, susisiekite su Procurize Profesionalios Paslaugos komanda dėl **30‑dienų spartaus įgyvendinimo** paketo.

---

## 8. Ateities kryptys

- **Federaciniai žinių grafai** – Leisti kelias įmones dalintis anonimizuotais reguliavimo susiejimais, išlaikant duomenų suverenumą.  
- **Nulinio žinojimo įrodymo auditas** – Leisti auditoriams patikrinti, kad atsakymas atitinka reglamentą, neatskleidžiant pačių įrodymų.  
- **Reguliavimo prognozavimas** – Kombinuoti grafiką su laiko eilučių modeliais, kad prognozuotų būsimas reguliavimo pakeitimus ir proaktyviai pasiūlytų politikos atnaujinimus.  

Dinaminis žinių grafas nėra tiesiog saugykla – tai **gyvas atitikties variklis**, kuris auga kartu su reguliavimo kraštovaizdžiu ir maitina AI automatiką mastu.

---

## <span class='highlight-content'>Žiūrėti</span> Also

- [Dinaminio žinių grafiko praturtinimas realaus laiko klausimyno kontekstualizavimui (Video apžvalga)](https://www.youtube.com/watch?v=example)