← Voltar a RAG — Arquitetura de Ingestion e Retrieval
🕐 Freshness e Metadados
RAG — Arquitetura de Ingestion e RetrievalApresentaçã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
| Pergunta | Metadados 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)
| Metadado | Descrição | Exemplo |
|---|---|---|
doc_id | ID do documento | expense_policy |
version | Versão do asset | 3 |
freshness_ts | Timestamp última atualização | 2026-03-23T10:00:00Z |
is_active | Está na vista ativa? | true |
valid_from | Início da janela temporal | 2026-01-01 |
valid_to | Fim (null = ativo) | null |
source_priority | Para resolver conflitos | 1 |
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 NULLfalse→ 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
| Aspeto | Estado | Documento relacionado |
|---|---|---|
| doc_id em chunks | ✅ Implementado | store.py |
| version, freshness_ts, is_active | ❌ Planeado | ingestion/07-RETRIEVAL |
| SQL valid_to | ✅ Possível (schema SCD2) | ingestion/03-PIPELINES |
| Filtros Chroma por metadata | ✅ Suportado pela API | — |
| requires_fresh_data no Analyzer | ❌ Teoria | 01-ARCHITECTURE roadmap |
| Source conflict detection | ❌ Planeado | 01-ARCHITECTURE Bloco 4 |
Zona de prática
Sem perguntas. Clica em Editar para adicionar.