Compliance-DB (RAG-Suche)¶
Das Compliance-DB-Modul bietet eine lokale Wissenssuche über Regulatorik-Dokumente mit Retrieval-Augmented Generation (RAG). Es kombiniert SQLite FTS5-Volltextsuche mit einem lokalen Ollama-LLM.
Verzeichnisstruktur¶
compliance_db/
├── __init__.py
├── __main__.py
├── config.py # Ollama-Einstellungen
├── retrieval.py # FTS5-Suche + Kompositazerlegung
├── local_llm.py # Ollama HTTP-Client
└── gui_module.py # Tkinter-GUI (ComplianceDBModuleFrame)
Konfiguration¶
Datei: compliance_db.config.json
| Schlüssel | Standard | Beschreibung |
|---|---|---|
paths.gutachten_db_path |
data/db/gutachten.sqlite |
Quelldatenbank (Gutachten-Inhalte) |
paths.index_db_path |
data/db/compliance_db.sqlite |
FTS5-Suchindex |
llm.provider |
"ollama" |
LLM-Provider |
llm.base_url |
http://localhost:11434 |
Ollama API-Endpunkt |
llm.model |
"llama3.1" |
Ollama-Modell |
llm.timeout_s |
120 |
HTTP-Timeout in Sekunden |
llm.top_k |
8 |
Anzahl Suchergebnisse als Kontext |
Datenfluss (RAG-Pipeline)¶
gutachten.sqlite (Abschnitte)
│
▼
rebuild_index_from_gutachten()
│
▼
compliance_db.sqlite (FTS5)
│
Benutzeranfrage
│
▼
_tokenize()
│
▼
_build_fts_queries()
┌────┴────┐
│ │
Strict Expanded
AND Compounds
└────┬────┘
│
▼
FTS5 BM25-Ranking
│
▼
Top-K SearchHits
│
▼
Ollama (llama3.1)
│
▼
Strukturierte Antwort
Suchalgorithmus¶
compliance_db/retrieval.py
Tokenisierung¶
def _tokenize(user_q: str) -> list[str]:
# Kleinschreibung, Satzzeichen entfernen, Stopwörter filtern
# Gibt bedeutungsträgende Tokens zurück
Kompositazerlegung (Deutsch)¶
def _expand_compound(tok: str) -> list[str]:
# Erkennt Fugen-s: "Datenschutzbeauftragter" → ["Datenschutz", "beauftragter"]
# Erkennt Doppel-s: "Risikomanagement" → ["Risiko", "management"]
# Gibt Teile des Kompositums zurück
Suchreihenfolge¶
- Strict AND: Alle Tokens müssen vorkommen → höchste Präzision
- Expanded Compounds: Komposita zerlegt → bessere Abdeckung
- OR Fallback: Mindestens ein Token → maximale Trefferquote
SearchHit¶
@dataclass
class SearchHit:
rowid: int
framework: str # z.B. "DORA", "NIS2"
doc_name: str # Dokumentname
section_ref: str # z.B. "Art. 5 Abs. 2"
title: str
snippet: str # FTS5-generierter Snippet
score: float # BM25-Score
Ollama-Integration¶
compliance_db/local_llm.py
class OllamaError(RuntimeError):
"""Wird bei Ollama API-Fehlern ausgelöst."""
@dataclass
class ContextItem:
framework: str
doc_name: str
section_ref: str
title: str
text: str
Der Ollama-Client sendet die Top-K-Suchergebnisse als Kontext an das LLM und erhält eine strukturierte, quellenbasierte Antwort.
Voraussetzungen¶
Ollama muss auf dem lokalen System installiert und das Modell heruntergeladen sein:
# Ollama installieren (Windows)
install-ollama.bat
# Ollama installieren (Linux)
./install-ollama.sh
# Modell herunterladen
ollama pull llama3.1
Indexaufbau¶
Der Index wird aus gutachten.sqlite befüllt, d.h. die Gutachten-Frameworks (DORA, NIS2, CRA, etc.) müssen vorher heruntergeladen und eingelesen worden sein:
- Im Gutachten-Modul: Framework-Dokumente herunterladen
- Im Compliance-DB-Modul: Index neu aufbauen
API-Referenz¶
| Funktion | Signatur | Beschreibung |
|---|---|---|
ensure_index_db |
(index_db: Path) -> None |
Erstellt FTS5-Schema |
rebuild_index_from_gutachten |
(gutachten_db, index_db, progress) -> None |
Befüllt FTS5-Index |
search |
(index_db, query, frameworks, limit) -> tuple[list[SearchHit], str] |
Suche + Strategiebeschreibung |
fetch_text |
(index_db, rowid) -> str |
Volltext eines Treffers |
list_frameworks |
(index_db) -> list[str] |
Verfügbare Frameworks |