← Voltar a RAG — Arquitetura de Ingestion e Retrieval

🕐 Freshness e Metadados

RAG — Arquitetura de Ingestion e Retrieval

Apresentação

7. Freshness e Metadados — Ligação Ingestion ↔ Retrieval

O retrieval deve poder responder a queries que dependem de dados atualizados. Isto exige metadados vindos da ingestion e filtros no retrieval.


4.1 Perguntas que o Retrieval Deve Poder Responder

PerguntaMetadados necessários
Qual a versão ativa do documento?current_version, active_version
Que assets estão atualizados?last_ingested_at, status
Esta resposta deve usar latest only?valid_to = null, is_active
Há conflito entre versões?version, valid_from
Que fonte tem prioridade?source_priority

4.2 Metadados para Freshness-Aware Retrieval

Nos Chunks (Vector Store)

MetadadoDescriçãoExemplo
doc_idID do documentoexpense_policy
versionVersão do asset3
freshness_tsTimestamp última atualização2026-03-23T10:00:00Z
is_activeEstá na vista ativa?true
valid_fromInício da janela temporal2026-01-01
valid_toFim (null = ativo)null
source_priorityPara resolver conflitos1

Estado: doc_id implementado; restantes planeados (ver ingestion/07-RETRIEVAL).

Nas Queries SQL

-- Só linhas ativas (SCD Type 2)
SELECT * FROM budgets
WHERE valid_to IS NULL;

-- Query temporal: dados válidos num determinado momento
SELECT * FROM budgets
WHERE valid_from <= :query_ts
  AND (valid_to IS NULL OR valid_to > :query_ts);

No Graph

Apenas relações com valid_to IS NULL ou is_active = true na projection ativa.


4.3 Fluxo Ingestion → Retrieval

Ingestion (asset registry, versioning, lineage)
    |
    +-- DocumentPipeline → chunks com metadata (version, freshness_ts)
    +-- SQLPipeline → views com valid_from, valid_to
    +-- GraphPipeline → projections ativas
    |
    v
Registry (current_version, status, last_ingested_at)
    |
    v
Retrieval
    |
    +-- Vector: filtros opcionais por version, is_active, freshness_ts
    +-- SQL: WHERE valid_to IS NULL
    +-- Graph: apenas relações ativas
    |
    v
Resposta com citações versionadas

4.4 Filtros no Chroma (Teoria)

Chroma suporta where em queries:

results = collection.query(
    query_embeddings=[embedding],
    n_results=10,
    where={"is_active": True, "version": 3}
)

Para freshness-aware: filtrar freshness_ts >= cutoff_date ou version == current_version.


4.5 Query Analyzer e Freshness

No Analyzer, poderia existir requires_fresh_data: bool:

  • true → retrieval usa só version=latest, valid_to IS NULL
  • false → pode incluir histórico se útil (ex.: "como era a policy em 2024?")

Estado: Não implementado. Teoria para artigo.


4.6 Conflito entre Fontes

Quando docs e SQL contradizem-se (ex.: policy diz 500€, tabela diz 600€):

  • source_priority: definir prioridade (ex.: SQL sobre documento gerado)
  • Validação (bloco planeado): detetar source conflict, escalar ou clarificar
  • Timestamp: preferir fonte mais recente por freshness_ts

4.7 Resumo

AspetoEstadoDocumento relacionado
doc_id em chunks✅ Implementadostore.py
version, freshness_ts, is_active❌ Planeadoingestion/07-RETRIEVAL
SQL valid_to✅ Possível (schema SCD2)ingestion/03-PIPELINES
Filtros Chroma por metadata✅ Suportado pela API
requires_fresh_data no Analyzer❌ Teoria01-ARCHITECTURE roadmap
Source conflict detection❌ Planeado01-ARCHITECTURE Bloco 4

Zona de prática

Sem perguntas. Clica em Editar para adicionar.