Pipeline di sintesi — riunire i documenti, scoprire le contraddizioni
La pipeline di sintesi multi-documento prende un insieme di pagine/documenti di un archivio e produce pagine wiki riunite: ogni pagina sintetizza le fonti, segnala dove le fonti non sono d'accordo (contradiction detection), rispetta i budget di token/chi…
La pipeline di sintesi multi-documento prende un insieme di pagine/documenti di un archivio e produce pagine wiki riunite: ogni pagina sintetizza le fonti, segnala dove le fonti non sono d'accordo (contradiction detection), rispetta i budget di token/chiamate/pagine per run, e tocca il filesystem scritto solo dopo l'approvazione selettiva di ciò che si vuole inserire.
Funzione Community (la pipeline gira sulle stesse infrastrutture del chat orchestrator; i limiti di budget per-run). Fonti:docs/SERVICES.md(il domain Synthesis,synthesisPageWriter.ts),README.md:33. Righe di provenienza:FACT-CENSUS.mdF-SYNTH-1.
Come gira la pipeline
La pipeline è orchestrata da runSynthesisPipeline (facade synthesisService.ts; il corpo in synthesis/synthesisStages.ts — runPipelineStages, callSynthesisLLMStage, …):
| Passo | Cosa fa |
|---|---|
| 1. Estrazione entità | dal corpus selezionato (synthesisStages.ts:569) |
| 2. Pagina per archivio | generatePageSummary per pagina (:282) |
| 3-4. Fondo e decisione | i blocchi finali con il system prompt (l'iniezione del blocco wiki: Pass 4 solo sul role SYSTEM, synthesisStages.ts:784-788) |
| Contraddizioni | synthesisContradictionService.ts: candidate pairing via Jaccard (threshold 0.15) + il LLM judge per coppia (judgePairContradiction) + i marker di contraddizione sulle pagine |
| Orfani e wikilink roti | synthesisOrphanService.ts (detectOrphanPages, detectBrokenWikilinks) |
| Scrittura | synthesisPageWriter.ts: applyApprovedChanges persista le modifiche approvate; la frontmatter di fonte (buildSourceFrontmatter) cita gli provenienza |
Budget tracking
BudgetTracker (synthesisBudgetService.ts) vincola token / chiamate LLM / pagine per run (config via loadBudgetConfig): la pipeline si ferma quando il budget esaurisce — l'output già scritto resta valido. Il watchdog di budget è alla pari con quello del chat orchestrator.
Approvazione selettiva
Le modifiche proposte dalla sintesi NON atterrano automaticamente nel wiki: passano dal flusso di approvazione (applyApprovedChanges persista solo ciò che l'utente/approver ha confermato). La preview deterministica (la stessa macchina di wikiWriteService) precede ogni scrittura; le pagine proposte portano la frontmatter di fonte.
Contradiction detection
Le coppie candidate si formano per similarità (Jaccard, threshold 0.15) e le coppie sospette passano al LLM judge (judgePairContradiction): il risultato = i marker di contraddizione sulle pagine coinvolte (buildContradictionMarker) + il riassunto della claim (extractClaimSummary). La fidelity del processo è campionata settimanalmente (runFidelitySample, domenica 03:00 — synthesisFidelityService.ts).
Trigger e code di lavoro
- Post-OCR: la coda
synthesisTriggerService(onOcrJobCompleted) accoda i run di sintesi dopo il completamento dell'OCR, con cooldown (isCooldownActive). - Reaper: lo scheduler
synthesisReaperJob(ogni 15 minuti) flippa le runPROCESSINGorfane inFAILED.
Questa guida copre la superficie operativa della pipeline di sintesi; l'approfondimento tecnico vive nel post gemello:
Provenance
| Sezione | Fonte |
|---|---|
| Facade / stages / budget / contraddizioni | docs/SERVICES.md (§ Synthesis + i moduli synthesis*) — F-SYNTH-1 |
| Trigger / reaper | docs/SERVICES.md (§ Schedulers & jobs — synthesisTriggerService, synthesisReaperJob) |
| La linea README | README.md:33 (la linea del synthesis) — F-SYNTH-1 |
| Iniezione wiki / Pass 4 | docs/WIKI_SCHEMA_LAYER.md (§ Injection seams — synthesisStages.ts:784-788) |
---
Riferimento operativo — Simmetric Chat v0.28.1 (docs aggiornate 2026-10-02, census SHA `aca5b8ff`).