Synthese-Pipeline — Dokumente vereinen, Widersprüche aufdecken
Die Multi-Dokument-Synthese-Pipeline nimmt einen Satz Seiten/Dokumente aus einem Archiv und erzeugt vereinte Wiki-Seiten: jede Seite synthetisiert die Quellen, meldet, wo die Quellen nicht übereinstimmen (contradiction detection), respektiert die Budgets…
Die Multi-Dokument-Synthese-Pipeline nimmt einen Satz Seiten/Dokumente aus einem Archiv und erzeugt vereinte Wiki-Seiten: jede Seite synthetisiert die Quellen, meldet, wo die Quellen nicht übereinstimmen (contradiction detection), respektiert die Budgets für Token/Aufrufe/Seiten pro Lauf, und berührt das Dateisystem erst nach der selektiven Freigabe dessen, was man einbringen will.
Community-Funktion (die Pipeline läuft auf denselben Infrastrukturen des Chat-Orchestrators; die Budget-Limits pro Lauf). Quellen:docs/SERVICES.md(die Domäne Synthesis,synthesisPageWriter.ts),README.md:33. Provenienz-Zeilen:FACT-CENSUS.mdF-SYNTH-1.
Wie die Pipeline läuft
Orchestriert von runSynthesisPipeline (Fassade synthesisService.ts; der Körper in synthesis/synthesisStages.ts — runPipelineStages, callSynthesisLLMStage, …):
| Schritt | Was geschieht |
|---|---|
| 1. Entitäten-Extraktion | aus dem gewählten Corpus (synthesisStages.ts:569) |
| 2. Seite pro Archiv | generatePageSummary pro Seite (:282) |
| 3-4. Fond und Entscheidung | die Schlussblöcke mit dem System-Prompt (die Wiki-Block-Einspritzung: Pass 4 nur auf der Rolle SYSTEM, synthesisStages.ts:784-788) |
| Widersprüche | synthesisContradictionService.ts: das Kandidatenpaaren via Jaccard (Schwelle 0.15) + der LLM-Bewerter pro Paar (judgePairContradiction) + die Widerspruchsmarker auf den Seiten |
| Verwaiste und tote Wikilinks | synthesisOrphanService.ts (detectOrphanPages, detectBrokenWikilinks) |
| Schreiben | synthesisPageWriter.ts: applyApprovedChanges persistiert die freigegebenen Änderungen; das Quell-Frontmatter (buildSourceFrontmatter) zitiert die Provenienz |
Budget-Tracking
BudgetTracker (synthesisBudgetService.ts) begrenzt Tokens / LLM-Aufrufe / Seiten pro Lauf (die Konfiguration via loadBudgetConfig): die Pipeline hält, wenn das Budget aufgebraucht ist — die bereits geschriebene Ausgabe bleibt gültig. Der Budget-Wachhund steht auf Augenhöhe mit dem des Chat-Orchestrators.
Die selektive Freigabe
Die von der Synthese vorgeschlagenen Änderungen landed nicht automatisch im Wiki: sie durchlaufen den Freigabe-Fluss (applyApprovedChanges persistiert nur das, was der freigebende Benutzer bestätigt hat). Die deterministische Vorschau (dieselbe Maschine von wikiWriteService) geht jeder Schreiboperation voraus; die Vorschlagsseiten tragen das Quell-Frontmatter.
Widerspruchs-Erkennung
Die Kandidatenpaare entstehen per Ähnlichkeit (Jaccard, Schwelle 0.15) und die verdächtigen Paare gehen an den LLM-Bewerter (judgePairContradiction): das Ergebnis = die Widerspruchsmarker auf den betroffenen Seiten (buildContradictionMarker) + die Aussage-Zusammenfassung (extractClaimSummary). Die Fidelity des Prozesses wird wöchentlich gestichprobt (runFidelitySample, sonntags 03:00 — synthesisFidelityService.ts).
Auslöser und Arbeits-Warteschlangen
- Post-OCR: die Warteschlange
synthesisTriggerService(onOcrJobCompleted) stellt die Synthese-Läufe nach dem OCR-Abschluss in die Warteschlange, mit Abklingzeit (isCooldownActive). - Reaper: der Scheduler
synthesisReaperJob(alle 15 Minuten) schaltet verwaistePROCESSING-Läufe aufFAILED.
Diese Anleitung behandelt die Betriebsoberfläche der Synthese-Pipeline; die technische Tiefe steckt im Zwillingsbeitrag:
Provenance
| Abschnitt | Quelle |
|---|---|
| Fassade / Stufen / Budget / Widersprüche | docs/SERVICES.md (§ Synthesis + die synthesis*-Module) — F-SYNTH-1 |
| Auslöser / Reaper | docs/SERVICES.md (§ Schedulers & jobs — synthesisTriggerService, synthesisReaperJob) |
| Die README-Zeile | README.md:33 (die Synthese-Zeile) — F-SYNTH-1 |
| Die Wiki-Einspritzung / Pass 4 | docs/WIKI_SCHEMA_LAYER.md (§ Injection seams — synthesisStages.ts:784-788) |
---
Betreiber-Referenz — Simmetric Chat v0.28.1 (Dokumente aktualisiert am 2026-10-02, Census-SHA `aca5b8ff`).