6e6cb0dc8d
- doc/architecture.md: arc42-Detaildokument mit Mermaid-Diagrammen (Bausteinsicht, Klassendiagramm, Statusmodell, 5 Sequenzdiagramme), Speicherkonzept, DEC-01..19-Entscheidungen mit Trade-offs - doc/requirements/: 7 Features als Gherkin-Szenarien (TDD-Grundlage) mit Traceability-Tabellen Szenario <-> Stdlib-Testname - doc/openapi.yaml: API-Vertrag fuer alle 9 Endpunkte (Quelle der Wahrheit) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
48 lines
2.3 KiB
Markdown
48 lines
2.3 KiB
Markdown
# Feature: Optionale LLM-Anreicherung
|
|
|
|
Als Nutzer möchte ich, dass Dokumente semantisch angereichert werden (Titel, Zusammenfassung,
|
|
Tags, Dokumentdatum, Sprache), ohne dass ein nicht erreichbares LLM die Verarbeitung blockiert.
|
|
|
|
```gherkin
|
|
Funktionalität: Optionale LLM-Anreicherung
|
|
|
|
Szenario: Erfolgreiche Anreicherung
|
|
Angenommen ein Dokument mit extrahiertem Text und ein erreichbares LLM
|
|
Wenn die Enrich-Stage läuft
|
|
Dann wird ein Event "DocumentEnriched" mit title, summary, tags, doc_date und language aufgezeichnet
|
|
Und das verwendete Modell und die Prompt-Version sind im Event dokumentiert
|
|
|
|
Szenario: LLM nicht erreichbar führt zu Wiederholung mit Backoff
|
|
Angenommen das LLM ist nicht erreichbar
|
|
Wenn die Enrich-Stage fehlschlägt
|
|
Dann wird ein Event "ProcessingFailed" mit retryable=true aufgezeichnet
|
|
Und der nächste Versuch wird mit exponentiellem Backoff eingeplant
|
|
|
|
Szenario: Nach erschöpften Versuchen läuft die Pipeline weiter
|
|
Angenommen das LLM bleibt über die maximale Versuchszahl hinaus nicht erreichbar
|
|
Wenn der letzte Versuch fehlschlägt
|
|
Dann wird ein Event "EnrichmentSkipped" aufgezeichnet
|
|
Und das Dokument wird trotzdem indexiert und abgelegt
|
|
|
|
Szenario: Unbrauchbare LLM-Antwort ist wiederholbar
|
|
Angenommen das LLM liefert kein valides JSON
|
|
Wenn die Enrich-Stage die Antwort nicht parsen kann
|
|
Dann wird der Fehler als retryable behandelt
|
|
|
|
Szenario: Übersprungene Anreicherung ist nachholbar
|
|
Angenommen ein abgelegtes Dokument mit "EnrichmentSkipped"
|
|
Wenn POST /v1/documents/{id}/reprocess mit from_stage "enrich" aufgerufen wird
|
|
Dann wird nur die Anreicherung erneut ausgeführt
|
|
Und bereits abgeschlossene Schritte laufen nicht erneut
|
|
```
|
|
|
|
## Traceability
|
|
|
|
| Szenario | Go-Test (Pakete `internal/llm`, `internal/pipeline`) |
|
|
|---|---|
|
|
| Erfolgreiche Anreicherung | `TestEnrichStage_SuccessEmitsDocumentEnriched` |
|
|
| LLM nicht erreichbar führt zu Wiederholung mit Backoff | `TestEnrichStage_UnreachableLLMIsRetryableWithBackoff` |
|
|
| Nach erschöpften Versuchen läuft die Pipeline weiter | `TestPipeline_EnrichExhaustedSkipsAndContinues` |
|
|
| Unbrauchbare LLM-Antwort ist wiederholbar | `TestEnricher_MalformedJSONIsRetryable` |
|
|
| Übersprungene Anreicherung ist nachholbar | `TestReprocess_FromEnrichOnlyRunsEnrich` |
|