
# AI poháňaný riešiteľ konfliktov v reálnom čase pre súlad s kontrafaktuálnymi vysvetleniami

## Úvod

Podniky, ktoré pôsobia v rôznych jurisdikciách, čelia neustálemu prúdu regulačných aktualizácií. Keď nová pravidlá o ochrane osobných údajov v EÚ vstúpia do konfliktu s existujúcim bezpečnostným štandardom v Spojených štátoch, tímy súladu sa snažia konflikt vyriešiť skôr, než budú ohrozené uvedenie produktov na trh alebo zmluvy s dodávateľmi. Tradičné manuálne revízie sú pomalé, náchylné na chyby a často postrádajú transparentnosť – zainteresované strany dostanú „opravenú“ politiku bez pochopenia kompromisov, ktoré viedli k rozhodnutiu.

**AI poháňaný riešiteľ konfliktov v reálnom čase pre súlad (CRR)** zapĺňa túto medzeru. Neustále prijíma dokumenty politík, špecifikácie produktov a zmluvy s dodávateľmi, vytvára jednotný graf znalostí o súlade a spúšťa engine na riešenie obmedzení, ktorý deteguje protichodnosti. Keď je konflikt identifikovaný, systém generuje **kontrafaktuálne vysvetlenia** – jasné, naratívne „čo‑ak“ scenáre, ktoré ukazujú, ako by alternatívne rozhodnutia ovplyvnili postoj k súladu. Táto kombinácia automatizácie a vysvetliteľnosti mení súlad z reaktívneho úzkeho hrdla na proaktívnu podporu rozhodovania.

V tomto článku si ukážeme:

1. Architektonické komponenty CRR.
2. Detekčný pipeline konfliktov a úlohu grafových neurónových sietí (GNN).
3. Ako sa generujú kontrafaktuálne vysvetlenia pomocou retrieval‑augmented generation (RAG) a kauzálnej inferencie.
4. Praktického sprievodcu implementáciou s ukážkami kódu a diagramom Mermaid.
5. Prevádzkové úvahy, bezpečnosť a budúce rozšírenia.

## 1. Architektonický prehľad

CRR je postavený ako sada voľne spájaných mikro‑služieb, ktoré komunikujú cez event‑driven message bus (napr. Kafka). Obrázok 1 ilustruje vysokú úroveň dátového toku.

```mermaid
flowchart TD
    A["Služba na príjem politík"] --> B["Úložisko jednotného grafu znalostí"]
    C["Služba produktovej cesty"] --> B
    D["Služba zmlúv s dodávateľmi"] --> B
    B --> E["Engine na detekciu konfliktov"]
    E --> F["Optimalizátor riešení"]
    F --> G["Generátor kontrafaktuálnych vysvetlení"]
    G --> H["Dashboard súladu"]
    E --> I["Služba upozornení a ticketov"]
```

* **Služba na príjem politík** parsuje regulačné texty (PDF, HTML, XML) pomocou Document AI, extrahuje klauzuly a normalizuje ich do kanonickej ontológie.  
* **Úložisko jednotného grafu znalostí** (Neo4j alebo JanusGraph) uchováva entity ako *Regulation*, *Control*, *ProductFeature*, *VendorClause* a vzťahy *requires*, *conflictsWith*, *appliesTo*.  
* **Engine na detekciu konfliktov** spúšťa SAT/SMT riešiteľ (napr. Z3) nad graf‑zakódovanými obmedzeniami, aby odhalil protichodnosti.  
* **Optimalizátor riešení** vyhodnocuje realizovateľné nápravné akcie pomocou viac‑cieľového nákladového modelu (riziko, čas, finančný dopad).  
* **Generátor kontrafaktuálnych vysvetlení** využíva jemne doladený LLM (napr. Llama‑2‑70B) kombinovaný s kauzálnym grafom na tvorbu ľudsky čitateľných „čo‑ak“ naratívov.  
* **Dashboard súladu** vizualizuje konflikty, navrhované riešenia a priradené vysvetlenia v reálnom čase.  

## 2. Detekcia konfliktov pomocou grafových neurónových sietí

Zatiaľ čo čistý SAT riešiteľ dokáže identifikovať logické nekonzistencie, má problémy s nejednoznačnými klauzulami v prirodzenom jazyku. Na zvýšenie recall používame **grafovú neurónovú sieť**, ktorá zakóduje každý uzol a hranu a je trénovaná na označenom datasete známych konfliktov. GNN poskytuje pravdepodobnostné skóre konfliktu pre každú dvojicu hrán.

### 2.1 Pipeline pre vkladanie uzlov

```python
import torch
from torch_geometric.nn import GraphSAGE
from transformers import AutoTokenizer, AutoModel

tokenizer = AutoTokenizer.from_pretrained("sentence-transformers/all-MiniLM-L6-v2")
text_encoder = AutoModel.from_pretrained("sentence-transformers/all-MiniLM-L6-v2")

def encode_clause(text):
    inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=128)
    with torch.no_grad():
        embedding = text_encoder(**inputs).last_hidden_state.mean(dim=1)
    return embedding.squeeze()

# Príklad: zakódovať klauzulu regulácie
reg_clause = "Personal data must be deleted within 30 days of request."
reg_vec = encode_clause(reg_clause)
```

Vektor `reg_vec` sa stane počiatočnou vlastnosťou uzla pre GNN. Po niekoľkých vrstvách message‑passing sa model naučí kontextové reprezentácie, ktoré zachytávajú sémantické prekrývanie medzi klauzulami.

### 2.2 Skórovanie konfliktov

```python
class ConflictScorer(torch.nn.Module):
    def __init__(self, hidden_dim=128):
        super().__init__()
        self.sage = GraphSAGE(in_channels=768, hidden_channels=hidden_dim, num_layers=2)
        self.classifier = torch.nn.Linear(hidden_dim, 1)

    def forward(self, x, edge_index):
        h = self.sage(x, edge_index)
        # Pairwise dot product for candidate edges
        scores = torch.sigmoid(self.classifier(h))
        return scores
```

Počas inferencie sú hrany so skóre > 0.85 označené na hlbšiu SAT analýzu. Tento hybridný prístup znižuje falošné pozitíva pri zachovaní pokrytia.

## 3. Generovanie kontrafaktuálnych vysvetlení

Po potvrdení konfliktu musí systém odpovedať na dve otázky:

1. **Aká je hlavná príčina?** – Identifikovať minimálnu množinu klauzúl, ktoré spoločne spôsobujú nekonzistenciu.  
2. **Čo by sa stalo, keby sme zmenili X?** – Poskytnúť naratív, ktorý opisuje dopad alternatívnych nápravných akcií.

### 3.1 Konštrukcia kauzálneho grafu

Vytvoríme **kauzálny graf**, kde uzly sú klauzuly politík a hrany predstavujú logické závislosti (napr. *requires*, *excludes*). Pomocou Pearl‑ovho do‑kalkulu môžeme simulovať intervencie.

```mermaid
graph LR
    A["\"EU [GDPR](https://gdpr.eu/) Art.17\""] -->|vyžaduje| B["\"Uchovávanie dát ≤ 30 dní\""]
    C["\"US CCPA\""] -->|vylučuje| B
    D["\"Navrhovaná politika uchovávania\""] -->|konfliktuje s| C
```

V tomto príklade odstránenie požiadavky *Uchovávanie dát ≤ 30 dní* (operácia do) eliminuje konflikt s CCPA.

### 3.2 Retrieval‑Augmented Generation (RAG)

Relevantné úryvky politík načítame z grafu a podáme ich jemne doladenému LLM, ktorý bol trénovaný na šablóny vysvetlení pre súlad.

```python
from langchain.chains import RetrievalQA
from langchain.vectorstores import FAISS
from langchain.llms import LlamaCpp

vector_store = FAISS.from_documents(policy_documents, embedding_function=encode_clause)
retriever = vector_store.as_retriever(search_kwargs={"k": 5})

llm = LlamaCpp(model_path="llama-2-70b.ggmlv3.q4_0.bin", temperature=0.2)
qa_chain = RetrievalQA.from_chain_type(llm=llm, retriever=retriever)

question = "Vysvetlite, prečo požiadavka GDPR EU na vymazanie dát je v konflikte s navrhovanou politikou uchovávania 45 dní a navrhnite súladnú alternatívu."
explanation = qa_chain.run(question)
print(explanation)
```

Výstup je stručný, odrážkový naratív:

```
- GDPR EU (Art.17) vyžaduje vymazanie do 30 dní.
- Navrhovaná politika predlžuje obdobie na 45 dní, čím porušuje Art.17.
- Kontrafaktuál: Ak by sa doba uchovávania znížila na 30 dní, konflikt zmizne.
- Odporúčaná náprava: Zaviesť vrstvený model uchovávania, kde citlivé osobné údaje podliehajú pravidlu 30 dní, zatiaľ čo neosobné logy môžu byť uchovávané 45 dní pod samostatnou klasifikáciou.
```

### 3.3 Modelovanie nákladov s viacerými cieľmi

Optimalizátor vyhodnocuje každú nápravnú akciu podľa nákladového vektora **C = (riziko, úsilie, finančný dopad, čas‑do‑trhu)**. Prezentuje Pareto front, z ktorého si compliance manažéri môžu vybrať najvhodnejší kompromis.

```python
import numpy as np

actions = ["Znížiť dobu uchovávania", "Pridať anonymizáciu dát", "Vytvoriť samostatný dataset"]
costs = np.array([
    [0.2, 0.1, 0.05, 0.1],   # Znížiť dobu uchovávania
    [0.1, 0.3, 0.2, 0.2],    # Pridať anonymizáciu dát
    [0.15, 0.2, 0.1, 0.05]   # Vytvoriť samostatný dataset
])

# Jednoduchý vážený súčet (váhy možno prispôsobiť organizácii)
weights = np.array([0.4, 0.3, 0.2, 0.1])
scores = costs @ weights
best_action = actions[np.argmin(scores)]
print(f"Najlepšia náprava: {best_action}")
```

Vybraná akcia sa následne odovzdá generátoru kontrafaktuálnych vysvetlení, ktorý vytvorí finálnu, akčnú správu.

## 4. Sprievodca implementáciou

Nižšie je kontrolný zoznam krokov pre vybudovanie CRR v cloud‑native prostredí.

| Krok | Popis | Odporúčaná technológia |
|------|-------|------------------------|
| 1 | **Príjem dokumentov** – OCR, NLP, extrakcia klauzúl | Azure Form Recognizer, spaCy |
| 2 | **Definícia ontológie** – Vytvorenie schémy súladu | OWL/RDF, Protégé |
| 3 | **Ukladanie grafu** – Persistovanie entít a vzťahov | Neo4j Aura, Amazon Neptune |
| 4 | **Generovanie vkladov** – Sentence transformers | `sentence-transformers/all-MiniLM-L6-v2` |
| 5 | **Tréning GNN** – Model pravdepodobnosti konfliktu | PyTorch Geometric |
| 6 | **Riešenie obmedzení** – Detekcia logických protichodov | Z3 SMT Solver |
| 7 | **Kauzálny graf & do‑kalkul** – Simulácia kontrafaktuálov | DoWhy, CausalNex |
| 8 | **RAG pipeline** – Retrieval + LLM generovanie | LangChain + Llama‑2 |
| 9 | **Optimalizácia nákladov** – Viac‑cieľové skórovanie | SciPy, PuLP |
|10| **Dashboard & upozornenia** – UI v reálnom čase | React + D3, Grafana, Slack webhook |

### Ukážka Docker Compose

```yaml
version: "3.9"
services:
  neo4j:
    image: neo4j:5
    environment:
      - NEO4J_AUTH=neo4j/password
    ports: ["7474:7474", "7687:7687"]
  z3:
    image: z3prover/z3
    command: ["--solver"]
  rag:
    build: ./rag-service
    ports: ["8000:8000"]
  dashboard:
    build: ./dashboard
    ports: ["3000:3000"]
```

Nasadiť príkazom `docker compose up -d`. Každá služba loguje do centralizovaného ELK stacku pre observabilitu.

## 5. Prevádzkové úvahy

### 5.1 Ochrana údajov

Všetky dokumenty politík sú považované za **dôverné**. Systém šifruje dáta v pokoji (AES‑256) aj pri prenose (TLS 1.3). Vkladové vektory sú uložené v **súkromnom vektorovom úložisku**, ktoré podporuje pridanie šumu pre diferenciálnu ochranu súkromia.

### 5.2 Audity vysvetliteľnosti

Regulátori čoraz viac požadujú **explainable AI**. CRR zaznamenáva každý krok inferencie, vrátane:

* ID surových klauzúl.
* Dôkazový sled SAT riešiteľa.
* Detaily kontrafaktuálnej intervencie.
* Páry prompt‑response z LLM.

Tieto logy je možné exportovať ako nemenné JSON záznamy do auditného ledgeru (napr. blockchain‑based Hyperledger Fabric).

### 5.3 Kontinuálne učenie

GNN a LLM sa periodicky pretrénujú na **ľudsky validovaných riešeniach konfliktov**. Spätná väzba zachytáva signály akceptácie/odmietnutia od tímov súladu a vracia ich do tréningového pipeline cez **reinforcement learning from human feedback (RLHF)** slučku.

## 6. Budúce rozšírenia

1. **Multimodálny dôkaz** – Pridať snímky obrazovky, architektonické diagramy a úryvky kódu ako ďalšie dôkazové uzly.  
2. **Edge AI** – Nasadiť ľahký detektor konfliktov na edge zariadenia pre on‑premise kontroly súladu.  
3. **Predikcia regulácií** – Kombinovať riešiteľ konfliktov s Monte‑Carlo modelom dopadu regulácií, aby sa predvídali budúce protichodnosti skôr, než nastanú.  
4. **Zdieľanie znalostí naprieč odvetviami** – Umožniť federované učenie medzi partnerskými organizáciami pri zachovaní suverenity dát.

## Záver

AI poháňaný riešiteľ konfliktov v reálnom čase pre súlad mení tradičný reaktívny, manuálny proces na automatizovaný, transparentný systém podpory rozhodovania. Spojením riešenia obmedzení, grafových neurónových sietí a kontrafaktuálnych vysvetlení motor nielen okamžite identifikuje protichodnosti, ale aj poskytuje zainteresovaným stranám jasné, akčné príbehy. Organizácie, ktoré adoptujú túto technológiu, môžu znížiť latenciu súladu, znížiť auditné riziká a udržať si konkurenčnú výhodu v silne regulovaných trhoch.

## Ďalšie informácie

- [Z3 Theorem Prover: Efficient Constraint Solving for Policy Conflicts](https://github.com/Z3Prover/z3)
- [DoWhy – Causal Inference for Counterfactual Explanations](https://github.com/microsoft/dowhy)
- [LangChain Retrieval‑Augmented Generation Documentation](https://python.langchain.com/docs/use_cases/question_answering/)