feat(pipeline): pipeline_version v2, migration 062, docs + 71 tests
- Add PIPELINE_VERSION=2 constant and pipeline_version column to canonical_controls and canonical_processed_chunks (migration 062) - Anthropic API decides chunk relevance via null-returns (skip_prefilter) - Annex/appendix chunks explicitly protected in prompts - Fix 6 failing tests (CRYP domain, _process_batch tuple return) - Add TestPipelineVersion + TestRegulationFilter test classes (10 new tests) - Add MkDocs page: control-generator-pipeline.md (541 lines) - Update canonical-control-library.md with v2 pipeline diagram - Update testing.md with 71-test breakdown table Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -244,44 +244,36 @@ Der Validator (`scripts/validate-controls.py`) prueft bei jedem Commit:
|
||||
Automatische Generierung von Controls aus dem gesamten RAG-Korpus (~105.000 Chunks aus Gesetzen, Verordnungen und Standards).
|
||||
Aktueller Stand: **~4.738 Controls** generiert.
|
||||
|
||||
### 9-Stufen-Pipeline
|
||||
!!! tip "Ausfuehrliche Dokumentation"
|
||||
Siehe **[Control Generator Pipeline](control-generator-pipeline.md)** fuer die vollstaendige Referenz inkl. API-Endpoints, Konfiguration, Kosten und Pipeline-Versionen.
|
||||
|
||||
### 7-Stufen-Pipeline (v2)
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A[1. RAG Scroll] -->|max_chunks| B[2. Prefilter - Lokales LLM]
|
||||
B -->|Irrelevant| C[Als processed markieren]
|
||||
B -->|Relevant| D[3. License Classify]
|
||||
D -->|Batch sammeln| E[4. Batch Processing - 5 Chunks/API-Call]
|
||||
E -->|Rule 1/2| F[4a. Structure Batch - Anthropic]
|
||||
E -->|Rule 3| G[4b. Reform Batch - Anthropic]
|
||||
F --> QA[5. QA Validation - Lokales LLM]
|
||||
G --> QA
|
||||
QA -->|Mismatch| QAF[Auto-Fix Category/Domain]
|
||||
QA -->|OK| H[6. Harmonization - Embeddings]
|
||||
QAF --> H
|
||||
H -->|Duplikat| I[Als Duplikat speichern]
|
||||
H -->|Neu| J[7. Anchor Search]
|
||||
J --> K[8. Store Control]
|
||||
K --> L[9. Mark Processed]
|
||||
A[1. RAG Scan] -->|Alle Chunks laden| B[2. License Classify]
|
||||
B -->|Rule 1/2| C[3a. Structure Batch]
|
||||
B -->|Rule 3| D[3b. Reform Batch]
|
||||
C --> E[4. Harmonize]
|
||||
D --> E
|
||||
E -->|Duplikat| F[Als Duplikat markieren]
|
||||
E -->|Neu| G[5. Anchor Search]
|
||||
G --> H[6. Store Control]
|
||||
H --> I[7. Mark Processed]
|
||||
```
|
||||
|
||||
### Stufe 1: RAG Scroll (Vollstaendig)
|
||||
!!! info "Pipeline-Version v2 (seit 2026-03-17)"
|
||||
- **Kein lokaler Vorfilter mehr** — Anthropic API entscheidet selbst ueber Chunk-Relevanz via null-Returns
|
||||
- **Annexe geschuetzt** — Technische Anforderungen in Anhaengen werden nicht mehr uebersprungen
|
||||
- **`pipeline_version`** Spalte in DB unterscheidet v1- von v2-Controls
|
||||
|
||||
Scrollt durch **ALLE** Chunks in allen RAG-Collections mittels Qdrant Scroll-API.
|
||||
Kein Limit — jeder Chunk wird verarbeitet, um keine gesetzlichen Anforderungen zu uebersehen.
|
||||
### Stufe 1: RAG Scan
|
||||
|
||||
Scrollt durch **ALLE** Chunks in den konfigurierten RAG-Collections mittels Qdrant Scroll-API.
|
||||
Optionaler `regulation_filter` beschraenkt auf bestimmte Regulierungen per Prefix-Matching.
|
||||
|
||||
Bereits verarbeitete Chunks werden per SHA-256-Hash uebersprungen (`canonical_processed_chunks`).
|
||||
|
||||
### Stufe 2: Lokaler LLM-Vorfilter (Qwen 30B)
|
||||
|
||||
**Kostenoptimierung:** Bevor ein Chunk an die Anthropic API geht, prueft das lokale Qwen-Modell (`qwen3:30b-a3b` auf Mac Mini), ob der Chunk eine konkrete Anforderung enthaelt.
|
||||
|
||||
- **Relevant:** Pflichten ("muss", "soll"), technische Massnahmen, Datenschutz-Vorgaben
|
||||
- **Irrelevant:** Definitionen, Inhaltsverzeichnisse, Begriffsbestimmungen, Uebergangsvorschriften
|
||||
|
||||
Irrelevante Chunks werden als `prefilter_skip` markiert und nie wieder verarbeitet.
|
||||
Dies spart >50% der Anthropic-API-Kosten.
|
||||
|
||||
### Stufe 3: Lizenz-Klassifikation (3-Regel-System)
|
||||
|
||||
| Regel | Lizenz | Original erlaubt? | Beispiel |
|
||||
|
||||
Reference in New Issue
Block a user