Pipeline de síntese — reunir os documentos, descobrir as contradições
A pipeline de síntese multi-documento toma um conjunto de páginas/documentos de um arquivo e produz páginas wiki reunidas: cada página sintetiza as fontes, sinaliza onde as fontes não estão de acordo (contradiction detection), respeita as quotas de token…
A pipeline de síntese multi-documento toma um conjunto de páginas/documentos de um arquivo e produz páginas wiki reunidas: cada página sintetiza as fontes, sinaliza onde as fontes não estão de acordo (contradiction detection), respeita as quotas de tokens/chamadas/páginas por corrida, e toca o sistema de ficheiros só depois da aprovação seletiva daquilo que se quer inserir.
Funcionalidade Community (a pipeline corre nas mesmas infraestruturas do chat orchestrator; os limites de orçamento por corrida). Fontes:docs/SERVICES.md(o domínio Synthesis,synthesisPageWriter.ts),README.md:33. Linhas de proveniência:FACT-CENSUS.mdF-SYNTH-1.
Como corre a pipeline
A pipeline é orquestrada por runSynthesisPipeline (fachada synthesisService.ts; o corpo em synthesis/synthesisStages.ts — runPipelineStages, callSynthesisLLMStage, …):
| Passo | O que faz |
|---|---|
| 1. Extração de entidades | do corpus selecionado (synthesisStages.ts:569) |
| 2. Página por arquivo | generatePageSummary por página (:282) |
| 3-4. O fundo e a decisão | os blocos finais com o system prompt (a injeção do bloco wiki: Pass 4 só no papel SYSTEM, synthesisStages.ts:784-788) |
| Contradições | synthesisContradictionService.ts: o emparcer das candidatas via Jaccard (limiar 0.15) + o juiz LLM por par (judgePairContradiction) + os marcadores de contradição nas páginas |
| Órfãs e wikilinks partidos | synthesisOrphanService.ts (detectOrphanPages, detectBrokenWikilinks) |
| Escrita | synthesisPageWriter.ts: applyApprovedChanges persiste as alterações aprovadas; o frontmatter de fonte (buildSourceFrontmatter) cita a proveniência |
Seguimento do orçamento
BudgetTracker (synthesisBudgetService.ts) limita tokens / chamadas LLM / páginas por corrida (a configuração via loadBudgetConfig): a pipeline pára quando o orçamente esgota — a saída já escrita fica válida. O cão de guarda do orçamento está em paridade com o do chat orchestrator.
A aprovação seletiva
As alterações propostas pela síntese NÃO aterram automaticamente na wiki: passam pelo fluxo de aprovação (applyApprovedChanges persiste só aquilo que quem aprova confirmou). A pré-visualização determinista (a mesma máquina de wikiWriteService) precede cada escrita; as páginas propostas levam o frontmatter de fonte.
Deteção de contradições
Os pares candidatos formam-se por similaridade (Jaccard, limiar 0.15) e os pares suspeitos passam ao juiz LLM (judgePairContradiction): o resultado = os marcadores de contradição nas páginas envolvidas (buildContradictionMarker) + o resumo da afirmação (extractClaimSummary). A fidelidade do processo é amostrada semanalmente (runFidelitySample, domingo 03:00 — synthesisFidelityService.ts).
Gatilhos e filas de trabalho
- Pós-OCR: a fila
synthesisTriggerService(onOcrJobCompleted) põe em fila as corridas de síntese após a conclusão do OCR, com arrefecimento (isCooldownActive). - Reaper: o scheduler
synthesisReaperJob(a cada 15 minutos) troca as corridasPROCESSINGórfãs paraFAILED.
Este guia cobre a superfície operacional do pipeline de síntese; a profundidade técnica vive no post gémeo:
Provenance
| Secção | Fonte |
|---|---|
| Fachada / passos / orçamento / contradições | docs/SERVICES.md (§ Synthesis + os módulos synthesis*) — F-SYNTH-1 |
| Gatilhos / reaper | docs/SERVICES.md (§ Schedulers & jobs — synthesisTriggerService, synthesisReaperJob) |
| A linha do README | README.md:33 (a linha do synthesis) — F-SYNTH-1 |
| A injeção wiki / Pass 4 | docs/WIKI_SCHEMA_LAYER.md (§ Injection seams — synthesisStages.ts:784-788) |
---
Referência operativa — Simmetric Chat v0.28.1 (documentos atualizados a 2026-10-02, SHA do census `aca5b8ff`).