
# Dirbtinio intelekto varoma Retrieval Augmented Generation realaus laiko įrodymų surinkimui saugos klausimynuose

Saugos klausimynai, tiekėjų rizikos vertinimai ir atitikties auditai tapo kasdieniu svertu SaaS įmonėms. Rankinis politikų, auditų ataskaitų ir konfigūracijos momentinių nuotraukų paieškas ne tik švaisto inžinierių valandas, bet ir kelia riziką, kad atsakymai bus pasenę arba nesuderinti.  

Retrieval‑Augmented Generation (RAG) siūlo naują paradigmą: vietoj to, kad būtų naudojamas tik statinis didelis kalbos modelis (LLM), RAG **užklauso metu išgauna labiausiai susijusius dokumentus** ir pateikia juos modeliui sintezei. Rezultatas – **realaus laiko, įrodymais pagrįstas atsakymas**, kurio šaltinis gali būti atsekamas iki originalo, tenkinantis tiek greičio, tiek audito reikalavimus.  

Šiame straipsnyje mes:

* Išskaidyti pagrindinę RAG architektūrą ir paaiškinti, kodėl ji tinka klausimyno darbo eigai.  
* Parodyti, kaip Procurize gali integruoti RAG duomenų srautą neperkeldama esamų procesų.  
* Pateikti žingsnis po žingsnio diegimo vadovą, nuo duomenų įkėlimo iki atsakymo patikrinimo.  
* Aptarti saugumo, privatumo ir atitikties aspektus, būdingus šiam požiūriui.  
* Pabrėžti matuojamą grąžą investicijoms ir būsimas patobulinimus, pvz., nuolatinį mokymąsi ir dinaminį rizikos įvertinimą.

---

## 1. Kodėl tradiciniai LLM nepatenkina saugos klausimynų

| Ribojimas | Poveikis klausimyno automatizavimui |
|------------|--------------------------------------|
| **Statinis žinių apribojimas** | Atsakymai atspindi modelio mokymo momentą, o ne naujausias politikų peržiūras. |
| **Kūrybinės klaidos (hallucinacijos) rizika** | LLM gali generuoti patikimą, tačiau ne pagrįstą tekstą, neturintį jokio pagrindo realioje dokumentacijoje. |
| **Trūksta kilmės (provenance)** | Auditoriai prašo tiesioginės nuorodos į šaltinio artefaktą (politiką, **[SOC 2] ataskaitą**, konfigūracijos failą). |
| **Reguliaciniai apribojimai** | Tam tikros jurisdikcijos reikalauja, kad AI generuotas turinys būtų patikrinamas ir nekintantis. |

Šie trūkumai organizacijas verčia grįžti prie rankinio kopijavimo ir įklijavimo, panaikinant AI pažadėtą efektyvumą.

---

## 2. Retrieval‑Augmented Generation – pagrindinės koncepcijos

Iš esmės, RAG susideda iš trijų judančių dalių:

1. **Retriever** – Indeksas (dažniausiai vektorinės bazės), kuris greitai išrašo labiausiai susijusius dokumentus pagal užklausą.  
2. **Generative Model** – Didelis kalbos modelis, kuris priima išgautas ištraukas ir originalų klausimyno klausimą, kad sukurtų nuoseklų atsakymą.  
3. **Fusion Layer** – Logika, valdanti, kiek ištraukas perduoti, kaip jas surikiuoti ir kaip svoriauti generacijos metu.

### 2.1 Vektorinės saugyklos įrodymų paieškai

Įkoduojant kiekvieną atitikties artefaktą (policies, audit reports, configuration snapshots) į tankų vektorių erdvę, įgyjama semantinė panašumo paieška. Populiarios atviro kodo galimybės:

* **FAISS** – Greita, GPU akceleracija, idealu didelio pralaidumo kanalams.  
* **Milvus** – Debesų natūrali, palaiko hibridinį indeksavimą (skalarinis + vektorinį).  
* **Pinecone** – Valdomas paslaugų teikėjas su įtaisytomis saugumo kontrolėmis.

### 2.2 Promptų (užklausų) kūrimas RAG

Gerai sukonstruotas promptas užtikrina, kad LLM traktuotų išgautą kontekstą kaip *autoritetingus įrodymus*.

```text
Jūs esate atitikties analitikas, atsakantis į saugos klausimyną. Naudokite TIK pateiktus įrodymų ištraukas. Kiekvieną ištrauką nurodykite su šaltinio ID. Jei atsakymas negali būti visiškai pagrįstas, pažymėkite jį rankinei peržiūrai.
```

Promptą galima šablonuoti Procurize, kad kiekvienas klausimyno elementas automatiškai gautų pridėtus įrodymus.

---

## 3. RAG integravimas į Procurize platformą

Žemiau pateikiamas aukšto lygio srauto diagrama, rodanti, kur RAG įsilieja į esamą Procurize darbo eigą.

```mermaid
graph LR
    A["Klausimyno elementas"] --> B["RAG paslauga"]
    B --> C["Retriever (Vektorinė saugykla)"]
    C --> D["Viršutinių k fragmentų įrodymai"]
    D --> E["LLM Generatorius"]
    E --> F["Juodraštinis atsakymas su citatomis"]
    F --> G["Procurize peržiūros UI"]
    G --> H["Galutinis atsakymas saugomas"]
    style B fill:#f9f,stroke:#333,stroke-width:2px
    style G fill:#bbf,stroke:#333,stroke-width:2px
```

**Svarbūs integracijos taškai**

* **Trigger** – Kai vartotojas atidaro neatsakytą klausimyno elementą, Procurize siunčia klausimo tekstą RAG mikroservisui.  
* **Context Enrichment** – Retriever ištraukia iki *k* (dažniausiai 3‑5) labiausiai susijusias įrodymų ištraukas, kiekvieną pažymėtą stabilia identifikacija (pvz., `policy:ISO27001:5.2`).  
* **Answer Draft** – LLM generuoja juodraštį, įskaitant eilutes kaip `[policy:ISO27001:5.2]`.  
* **Human‑in‑the‑Loop** – Peržiūros UI pabrėžia citatas, leidžia redaguoti, patvirtinti arba atmesti. Patvirtinti atsakymai išsaugomi kartu su kilmės metaduomenimis.

---

## 4. Žingsnis po žingsnio diegimo gidas

### 4.1 Paruoškite savo įrodymų korpusą

| Veiksmas | Įrankis | Patarimai |
|----------|---------|-----------|
| **Surinkti** | Vidinė dokumentų saugykla (Confluence, SharePoint) | Laikykite vieną „single source of truth“ aplanką atitikties artefaktams. |
| **Normalizuoti** | Pandoc, savi sukurtos skriptų priemonės | Konvertuokite PDF, DOCX ir markdown į paprastą tekstą; pašalinkite antraštes/pagarbės. |
| **Žymėti** | YAML front‑matter, pasirinktinis metaduomenų servis | Pridėkite laukus, pvz., `type: policy`, `framework: SOC2`, `last_modified`. |
| **Versijuoti** | Git LFS arba DMS su nekintamomis versijomis | Užtikrina įrodymų audito atsekamumą. |

### 4.2 Sukurkite vektorinį indeksą

```python
from sentence_transformers import SentenceTransformer
import faiss, json, glob, os

model = SentenceTransformer('all-MiniLM-L6-v2')
docs = []   # list of (id, text) tuples
for file in glob.glob('compliance_corpus/**/*.md', recursive=True):
    with open(file, 'r') as f:
        content = f.read()
        doc_id = os.path.splitext(os.path.basename(file))[0]
        docs.append((doc_id, content))

ids, texts = zip(*docs)
embeddings = model.encode(texts, show_progress_bar=True)

dim = embeddings.shape[1]
index = faiss.IndexFlatL2(dim)
index.add(embeddings)

faiss.write_index(index, 'compliance.index')
```

*Įrašykite susiejimą tarp vektorių ID ir dokumentų metaduomenų į lengvą NoSQL lentelę greitam paieškos laukui.*

### 4.3 Įdiekite RAG paslaugą

Įprasta mikroserviso struktūra:

* **FastAPI** – apdoroja HTTP užklausas iš Procurize.  
* **FAISS** – vektorinė paieška procese (arba išorinis su gRPC).  
* **OpenAI / Anthropic LLM** – generavimo galutinis taškas (arba savarankiškai talpinama LLaMA).  
* **Redis** – talpina neseniai vykusias užklausas, mažindamas delsą.

```python
from fastapi import FastAPI, Body
import openai, numpy as np

app = FastAPI()

@app.post("/answer")
async def generate_answer(question: str = Body(...)):
    q_emb = model.encode([question])
    distances, idx = index.search(q_emb, k=4)
    snippets = [texts[i] for i in idx[0]]
    prompt = f"""Question: {question}
Evidence:\n{chr(10).join(snippets)}\nAnswer (cite sources):"""
    response = openai.Completion.create(
        model="gpt-4o-mini", prompt=prompt, max_tokens=300)
    return {"answer": response.choices[0].text.strip(),
            "citations": idx[0].tolist()}
```

### 4.4 Susiekite su Procurize UI

*Pridėkite mygtuką „Generuoti su AI“ šalia kiekvieno klausimyno lauko.*

Veiksmai:

1. Rodyti įkėlimo animaciją kol RAG paslauga atsako.  
2. Užpildyti atsakymo teksto laukelį su juodraščiu.  
3. Atvaizduoti citatų žymeles; spustelėjus žymelę, atidaroma šaltinio dokumento peržiūra.  

### 4.5 Patikrinimas ir nuolatinis mokymasis

* **Žmogaus peržiūra** – Privaloma, kad bent vienas atitikties inžinierius patvirtintų kiekvieną AI‑generuotą atsakymą prieš įkeliant į sistemą.  
* **Grįžtamojo ryšio ciklas** – Fiksuokite patvirtinimo / atmesto signalą ir saugokite jį „peržiūros rezultatų“ lentelėje.  
* **Fine‑tuning** – Periodiškai apmokykite LLM ant patvirtintų Q&A porų, kad sumažintumėte halucinacijų tikimybę.

---

## 5. Saugumo ir privatumo aspektai

| Rizika | Priemonės |
|--------|-----------|
| **Duomenų nutekėjimas** – Įterpimai gali atskleisti jautrią informaciją. | Naudokite *vietinius* įterpimo modelius; venkite siųsti neapdorotus dokumentus trečiųjų šalių API. |
| **Modelio injekcija** – Įmanoma, kad kenksminga užklausa sukeltų netinkamą generavimą. | Sanitizuokite įvestį, įgyvendinkite leidžiamų klausimų šablonų baltąjį sąrašą. |
| **Kilmės manipuliavimas** – Šaltinio ID gali būti keičiamas po atsakymo generavimo. | Laikykite šaltinio ID nekintamoje grandinėje (pvz., AWS QLDB arba blokų grandinėje). |
| **Reguliaciniai auditai** – Reikalingas AI‑generuoto turinio patikrinimas ir nekintamumas. | Registruokite kiekvieną RAG užklausą su laiko žymomis, išgautų fragmentų maišos kodais ir LLM versija. |
| **Prieigos kontrolė** – Tik įgalioti naudotojai turi naudoti AI generavimą. | Integruokite su Procurize RBAC; reikalaukite MFA AI generavimo veiksmams. |

---

## 6. Matavimas

Pilotinis projektas, vykdytas vidutinio dydžio SaaS įmonei (≈150 inžinierių), suteikė šiuos rezultatus per 6‑ savaitės periodą:

| Metrika | Prieš RAG | Po RAG | Patobulinimas |
|----------|-----------|--------|----------------|
| Vidutinis atsakymo juodraščio laikas | 12 min | 1.8 min | 85 % sumažėjimas |
| Rankų citatų klaidos | 27 % | 4 % | 85 % sumažėjimas |
| Peržiūros patvirtinimo rodiklis (pirmas peržiūrėjimas) | 58 % | 82 % | +24 pp |
| Ketvirtinis atitikties kaštas | $120k | $78k | $42k sutaupyta |

Šie duomenys rodo, kaip RAG ne tik pagreitina atsakymo laiką, bet ir pagerina atsakymo kokybę, sumažindamas audito trintį.

---

## 7. Ateities plėtiniai

1. **Dinaminis rizikos vertinimas** – Integruokite RAG su rizikos varikliu, kuris remiasi įrodymų „amžiumi“ ir patikimumu.  
2. **Daugialypė (multi‑modal) paieška** – Įtraukite ekrano nuotraukas, konfigūracijos failus ir net Terraform būsenas kaip ištraukas.  
3. **Kryžminis organizacijų žinių grafas** – Susiekite įrodymus tarp dukterinių įmonių, užtikrinant globalų politikų suderinamumą.  
4. **Realio laiko politikos pasikeitimų įspėjimai** – Kai šaltinio dokumentas pasikeičia, automatiškai žymėkite paveiktus klausimyno atsakymus peržiūrai.  

---

## 8. Pradžios kontrolinis sąrašas

- [ ] Surinkti visus atitikties artefaktus į vieną, versijuojamą saugyklą.  
- [ ] Pasirinkti vektorinę saugyklą (FAISS, Milvus, Pinecone) ir sugeneruoti įterpimus.  
- [ ] Įdiegti RAG mikroservisą už vidinio tinklo ribų.  
- [ ] Papildyti Procurize UI mygtuku „Generuoti su AI“ ir citatų žymėmis.  
- [ ] Apibrėžti valdymo politiką žmonių peržiūrai ir grįžtamojo ryšio fiksavimui.  
- [ ] Paleisti pilotą su mažai svarbiais klausimyno elementais; iteruoti remiantis peržiūros atsiliepimais.  

Sekdami šį planą, galėsite perkelti savo organizaciją nuo **reaktyvaus, rankinio** klausimyno proceso prie **proaktyvaus, AI‑augmentuoto** darbo, užtikrinant patikimą įrodymų kūrimą vienu paspaudimu.

---

## Taip pat žiūrėkite

- [Retrieval‑Augmented Generation: The Next Wave of Enterprise AI](https://arxiv.org/abs/2005.11401)  
- [FAISS: Efficient Similarity Search and Clustering of Dense Vectors](https://github.com/facebookresearch/faiss)  
- [OpenAI Cookbook – Prompt Engineering for Retrieval‑Augmented Generation](https://github.com/openai/openai-cookbook)