Skip to content

Latest commit

Β 

History

History
400 lines (318 loc) Β· 11.4 KB

File metadata and controls

400 lines (318 loc) Β· 11.4 KB

KBA Drafter - Feature Overview

Status: βœ… Production Ready (MVP)

Was ist der KBA Drafter?

Der KBA Drafter ist ein LLM-unterstΓΌtztes Tool zur automatischen Generierung von Knowledge Base Articles (KBAs) aus IT-Support-Tickets. Er analysiert Ticketdaten aus CSV-Exports und erstellt strukturierte, prΓΌfbare KBA-EntwΓΌrfe in Deutsch.

Warum KBA Drafter?

Problem: IT-Support-Teams verbringen Stunden damit, manuelle KBA-Artikel aus gelΓΆsten Tickets zu erstellen.

LΓΆsung: Der KBA Drafter automatisiert den ersten Entwurf:

  • ⚑ Generiert KBA in ~2-5 Sekunden
  • πŸ“‹ Strukturierte Ausgabe mit Symptomen, Ursache, LΓΆsung
  • ✏️ Editierbar und manuell prΓΌfbar
  • πŸ“š Nutzt Guidelines fΓΌr konsistente QualitΓ€t
  • πŸ”’ VerΓΆffentlichung nur nach Review

Architektur-Übersicht

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   React UI  β”‚ KBADrafterPage.jsx
β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜
       β”‚ REST
       β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Quart API   β”‚ /api/kba/drafts
β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜
       β”‚
       β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ KBAService  β”‚ Business Logic + Validation
β””β”€β”€β”¬β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜
   β”‚    β”‚
   β”‚    └─────────────┐
   β”‚                  β–Ό
   β”‚            β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
   β”‚            β”‚  Ollama     β”‚ LLM (llama3.2:1b)
   β”‚            β”‚  Service    β”‚
   β”‚            β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
   β”‚
   β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
   β”‚             β–Ό
   β”‚       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
   β”‚       β”‚ Guidelines  β”‚ Markdown-Dateien
   β”‚       β”‚ Loader      β”‚ (system/, categories/)
   β”‚       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
   β”‚
   β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
   β”‚             β–Ό
   β”‚       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
   β”‚       β”‚ CSV Ticket  β”‚ data.csv Parser
   β”‚       β”‚ Service     β”‚
   β”‚       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
   β”‚
   └─────────────┐
                 β–Ό
           β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
           β”‚ KB Adapters β”‚ FileSystem, SharePoint, etc.
           β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Komponenten-Stack

Backend (Python/Quart)

Komponente Datei Zweck
KBA Service kba_service.py Hauptlogik fΓΌr Draft-Generierung und Publishing
Ollama Service ollama_service.py HTTP-Client fΓΌr lokales LLM
Structured Output Parser ollama_structured_output.py JSON-Parsing mit Retry und Repair
KB Adapters kb_adapters.py Publishing zu verschiedenen KB-Systemen
Guidelines Loader guidelines_loader.py LΓ€dt Markdown-Guidelines mit Frontmatter
CSV Service csv_data.py Parst Ticket-CSV (BMC Remedy Format)
Audit Service kba_audit.py Logging aller KBA-Aktionen
API Endpoints app.py REST API fΓΌr Frontend

Frontend (React/FluentUI)

Komponente Datei Zweck
KBA Drafter Page KBADrafterPage.jsx Haupt-UI-Komponente
API Service api.js REST-Client-Funktionen

Datenmodelle (Pydantic)

Modell Zweck
KBADraft VollstΓ€ndiger KBA-Entwurf
KBADraftCreate DTO fΓΌr Erstellung
KBADraftUpdate DTO fΓΌr Updates (partial)
KBAPublishRequest DTO fΓΌr Publishing
KBAPublishResult Response vom Publishing

Status-Lifecycle

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ DRAFT  │─────>β”‚ REVIEWED │─────>β”‚ PUBLISHED β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
     β”‚                                    
     └───────────────────────────────────>β”‚
                                      FAILED

Hauptfunktionen

1. KBA Generierung

Eingabe: Ticket-UUID aus CSV
Ausgabe: Strukturierter KBA-Entwurf

Generierte Felder:

  • title: SEO-optimierter Titel
  • symptoms: Liste von Symptomen/Fehlern
  • cause: Root-Cause-Analyse
  • resolution_steps: Schritt-fΓΌr-Schritt-LΓΆsung
  • validation_checks: Verifikations-Schritte
  • warnings: Wichtige Hinweise
  • tags: Suchbegriffe
  • confidence_notes: LLM-Unsicherheiten

Beispiel:

draft = await kba_service.generate_draft(
    KBADraftCreate(
        ticket_id="550e8400-e29b-41d4-a716-446655440000",
        user_id="admin@example.com"
    )
)
# draft.title = "VPN Connection Failed After Windows Update"
# draft.symptoms = ["Cannot connect to VPN", "Error: Connection timeout"]
# draft.llm_generation_time_ms = 2847

2. Strukturiertes Output-Parsing

Problem: LLMs geben manchmal ungΓΌltiges JSON zurΓΌck
LΓΆsung: 4-stufiger Fallback-Parser + automatisches Retry

parser = StructuredOutputParser(schema=KBA_OUTPUT_SCHEMA)

# Versucht automatisch:
# 1. Tool-Call-Format
# 2. Markdown-Code-Block
# 3. JSON-Extraktion aus Text
# 4. Full-Response-Parse

# Bei Fehler: Retry mit Repair-Prompt
result = await parser.parse_with_retry(
    ollama_response=response,
    retry_fn=ollama_retry,
    max_retries=1
)

3. Guidelines-System

Struktur:

docs/kba_guidelines/
β”œβ”€β”€ system/                    # Immer geladen
β”‚   β”œβ”€β”€ 00_system_role.md      # LLM-Persona
β”‚   β”œβ”€β”€ 10_kba_structure.md    # Feldformat
β”‚   β”œβ”€β”€ 20_writing_style.md    # Sprache/Ton
β”‚   β”œβ”€β”€ 30_quality_checks.md   # Validierung
β”‚   └── 40_publish_rules.md    # Workflow
└── categories/                # Selektiv geladen
    β”œβ”€β”€ GENERAL.md
    β”œβ”€β”€ VPN.md
    β”œβ”€β”€ PASSWORD_RESET.md
    └── NETWORK.md

YAML Frontmatter:

---
title: "KBA Structure Guide"
version: "1.0"
enabled: true
priority: 10
---

4. Publishing-System

Adapter-Pattern:

  • FileSystemKBAdapter: Markdown-Dateien (MVP) βœ…
  • SharePointKBAdapter: Microsoft SharePoint (Stub)
  • ITSMKBAdapter: ServiceNow KB (Stub)
  • ConfluenceKBAdapter: Atlassian Confluence (Stub)

Beispiel (FileSystem):

result = await kba_service.publish_draft(
    draft_id=uuid,
    publish_req=KBAPublishRequest(
        target_system="file",
        category="VPN",
        visibility="internal",
        user_id="admin@example.com"
    )
)
# result.published_url = "file:///kb/published/VPN/KB-A1B2C3D4-vpn-connection.md"

5. Audit-Trail

Alle Aktionen werden geloggt:

audit.log_event(
    draft_id=draft_id,
    event_type=KBAAuditEventType.DRAFT_GENERATED,
    user_id="admin@example.com",
    details={
        "ticket_id": "...",
        "generation_time_ms": 2847,
        "guidelines_used": ["system", "VPN"]
    }
)

Retrievable via API:

GET /api/kba/drafts/{draft_id}/audit

API-Endpoints

Endpoint Methode Zweck
/api/kba/health GET Ollama-Status prΓΌfen
/api/kba/drafts POST KBA generieren
/api/kba/drafts GET Drafts auflisten (mit Filtern)
/api/kba/drafts/{id} GET Draft abrufen
/api/kba/drafts/{id} PATCH Draft editieren
/api/kba/drafts/{id}/publish POST Draft verΓΆffentlichen
/api/kba/drafts/{id}/audit GET Audit-Trail abrufen
/api/kba/guidelines GET Alle Guidelines auflisten
/api/kba/guidelines/{category} GET Guideline abrufen

Konfiguration

Ollama

# .env
OLLAMA_BASE_URL=http://localhost:11434
OLLAMA_MODEL=llama3.2:1b
OLLAMA_TIMEOUT=60

Supported Models:

  • llama3.2:1b - Schnell, 1GB RAM (~2s Generation)
  • llama3.2:3b - Balanced, 3GB RAM (~5s)
  • llama3.1:8b - Beste QualitΓ€t, 8GB RAM (~10s)

Knowledge Base

# .env
KB_FILE_BASE_PATH=./kb_published
KB_FILE_CREATE_CATEGORIES=true

Guidelines

# .env
GUIDELINES_PATH=./docs/kba_guidelines

Testing

Unit Tests (Backend)

# Alle KBA Tests
pytest backend/tests/test_kba_publishing.py -v

# Structured Output Parser Tests
pytest backend/tests/test_ollama_structured_output.py -v

# Combined
pytest backend/tests/test_kba*.py backend/tests/test_ollama*.py -v

Coverage: 45/45 Tests βœ…

E2E Tests (Frontend)

# Playwright E2E
npm run test:e2e

Limitation & Known Issues

MVP-Phase

  • β˜‘οΈ Nur FileSystem-Adapter produktiv (SharePoint/ITSM/Confluence sind Stubs)
  • β˜‘οΈ Keine RechteprΓΌfung (TODO: Integration mit Auth-System)
  • β˜‘οΈ Keine Versionierung von publizierten KBAs
  • β˜‘οΈ Kein Un-publish (einmal publiziert = permanent)
  • β˜‘οΈ Single-User (keine Concurrent-Editing-Locks)
  • β˜‘οΈ Deutsch-only (Guidelines sind auf DE optimiert)

Technische Constraints

  • LLM lokal: Ollama muss installiert und laufend sein
  • CSV-Format: Erwartet BMC Remedy ITSM Export-Format
  • UUID-Pflicht: Tickets mΓΌssen UUID als ID haben
  • Synchrone Generation: UI blockiert wΓ€hrend LLM-Generierung (~2-5s)

Performance

Benchmarks (llama3.2:1b auf 8-Core CPU)

Operation Durchschnitt P95
Draft-Generierung 2.8s 5.2s
Draft-Speichern 15ms 35ms
Draft-Laden 8ms 20ms
Publishing (FileSystem) 25ms 60ms
Guidelines-Loading 120ms 200ms

Roadmap

Phase 2 (Q2 2026)

  • SharePoint Adapter (Microsoft Graph API)
  • ITSM/ServiceNow Adapter
  • Rechtemanagement (kba.generate, kba.publish)
  • Versionierung (KBA-History)
  • Un-publish Funktion

Phase 3 (Q3 2026)

  • Mehrsprachigkeit (EN, FR)
  • Bulk-Publishing
  • Auto-Update bei Ticket-Γ„nderungen
  • Quality-Scoring (LLM-Confidence-Metriken)
  • A/B-Testing verschiedener Prompts

Future

  • Confluence Adapter
  • Realtime Collaborative Editing
  • Approval Workflows
  • Template System
  • Analytics Dashboard

Quick Links

Support & Contribution

HΓ€ufige Fragen

Q: Ollama startet nicht?
A: PrΓΌfe ollama serve und Port 11434. Siehe Troubleshooting

Q: KBA-QualitΓ€t schlecht?
A: Guidelines anpassen in docs/kba_guidelines/. Test mit ollama run llama3.2:1b

Q: Wie fΓΌge ich einen neuen KB-Adapter hinzu?
A: Siehe KBA_PUBLISHING.md Sektion "Erweiterung: Neue Adapter"

Q: Kann ich GPT-4 statt Ollama verwenden?
A: Ja, erstelle OpenAIService analog zu OllamaService. API-Kompatibel.

Development

# Backend Tests
pytest backend/tests/test_kba*.py -v

# Type Checking
mypy backend/kba_service.py

# Linting
ruff check backend/kba*.py

# Frontend Tests
cd frontend && npm test

License & Credits

Part of the python-quart-vite-react teaching repository.

  • LLM: Ollama (Meta's Llama 3.2)
  • Backend: Quart, Pydantic, SQLModel
  • Frontend: React, FluentUI v9
  • Architecture: "Grokking Simplicity" + "A Philosophy of Software Design"