Perspectivas de engenharia
Dados enterprise prontos para IA: governação, qualidade, linhagem, RAG e acesso seguro
Porque a pesquisa vectorial falha sem ownership, classificação e autorização no retrieval.
25 de junho de 2026 · 27 min de leitura
A geração aumentada por recuperação e agentes empresariais falham silenciosamente quando os dados estão duplicados, obsoletos, mal classificados ou legalmente frágeis. A governação de dados prontos para IA liga metadados de catálogo, regras de qualidade, controlo de acesso, linhagem e retenção aos embeddings e documentos que os seus modelos consomem. Organizações europeias enfrentam RGPD, reguladores sectoriais e auditorias de clientes que perguntam não só o que o modelo disse, mas que registos informaram a resposta. Este guia define princípios de dados prontos para IA, arquitectura de pipeline RAG, integração de catálogo, listas de verificação de qualidade e modelos operacionais para proprietários de dados e equipas de plataforma. Liga a arquitectura agentica de IA empresarial e segurança de IA empresarial. A Damascode, Digital Agency, Lda assiste no desenho de plataformas de dados através de consultoria de TI e implementação via desenvolvimento de software nearshore.
Índice
- O que significa dados prontos para IA
- Governação vs capacitação
- Domínios de dados e classificação
- Arquitectura de dados RAG de referência
- Catálogo, linhagem e propriedade
- Estratégias de ingestão e chunking
- Controlo de acesso para vectores
- Dimensões de qualidade e SLAs
- PII, categorias especiais e base legal
- Actualidade, versionamento e eliminação
- Conjuntos de avaliação e perguntas douradas
- Modelo operacional e RACI
- Exemplos de implementação
- Lista de verificação de migração
- FAQ
- Referências
O que significa dados prontos para IA
Dados prontos para IA são descobríveis, classificados, permitidos para um propósito declarado, tecnicamente adequados para embedding e recuperação, e removíveis quando a retenção expira ou titulares exercem direitos de apagamento. Não é «despejar tudo numa base de dados vectorial».
| Pilar | Pergunta respondida |
|---|---|
| Legal | Podemos usar isto para assistência IA? |
| Segurança | Quem pode recuperar que chunks? |
| Qualidade | Os factos estão actuais e consistentes? |
| Operações | Quão rápido index e deletes propagam? |
| Economia | Quanto custam armazenamento e re-embedding? (FinOps) |
Sem pilares, o RAG torna-se cópia sombra de dados de produção com controlos mais fracos que os sistemas de origem.
Governação vs capacitação
Equipas de governação por vezes receiam bloquear inovação. Enquadre a governação como guardrails que aceleram entrega:
- Conjuntos de dados aprovados encurtam revisão legal por funcionalidade.
- Chunking e metadados standard melhoram precisão de recuperação.
- Hooks automatizados de eliminação reduzem risco de incidente RGPD.
Platform engineering entrega pipelines de ingestão self-service na plataforma interna de programadores; stewards de dados possuem definições e políticas de acesso.
Domínios de dados e classificação
Mapeie domínios antes de tooling:
| Domínio | Exemplos | Classificação típica |
|---|---|---|
| Marketing público | Website, brochuras | Público |
| Ops internas | Runbooks, ADRs de arquitectura | Interno |
| Cliente | Tickets, contratos | Confidencial |
| RH / saúde | Avaliações, notas médicas | Restrito / categoria especial |
A classificação conduz: requisitos de encriptação, se dados podem entrar em APIs de modelos partilhados, visibilidade de chunks em índices multi-inquilino e verbosidade de logging.
+----------------+ +------------------+ +----------------+
| Source systems | --> | Ingestion zone | --> | Curated corpus |
| (CRM, wiki, | | (ETL, PII scan) | | (per domain) |
| data lake) | +------------------+ +-------+--------+
+----------------+ |
v
+--------+---------+
| Vector index + |
| metadata store |
+--------+---------+
|
v
+--------+---------+
| RAG / Agent apps |
+------------------+Arquitectura de dados RAG de referência
Componentes lógicos:
- Camada de conectores: sync incremental de fontes (API, CDC, object storage).
- Normalização: HTML para texto, OCR, detecção de idioma.
- Enriquecimento: título, URL de origem, proprietário, classificação, valid_from/to.
- Chunking: divisões conscientes de estrutura (headings, tabelas).
- Job de embedding: batch ou streaming com versão de modelo registada.
- Índice: vector DB mais keyword (pesquisa híbrida recomendada).
- API de serving: query com contexto de utilizador para filtro ACL.
Comparação de recuperação híbrida:
| Modo | Força | Fraqueza |
|---|---|---|
| Só vector | Match semântico | Falha SKUs, IDs exactos |
| Só keyword | Tokens exactos | Lacuna de sinónimos |
| Híbrido + rerank | Melhor default empresarial | Maior latência/custo |
Catálogo, linhagem e propriedade
Integre com catálogos como OpenMetadata, DataHub ou soluções cloud-native. Metadados mínimos por dataset de IA:
dataset_id, nome de negócio, descrição- e-mails de data owner e steward
- base legal (RGPD Art. 6) e referência DPIA se necessário
- ID de política de retenção
- casos de uso permitidos (
support_bot,engineering_copilot) - versão do modelo de embedding
- IDs de sistemas de origem upstream
A linhagem deve mostrar: tabela ou ficheiro de origem -> job de transformação -> chunk ID -> vector ID. Quando um cliente elimina perfil, a linhagem encontra todos os chunks derivados.
Exemplo de registo de linhagem (YAML):
lineage:
chunk_id: chk_8f2a91
source:
system: confluence
page_id: "4429182"
version: 17
transforms:
- job: normalize_html_v3
at: "2026-10-01T08:00:00Z"
- job: embed_text-embedding-3-large
at: "2026-10-01T08:05:00Z"
vector_ids: [vec_9912, vec_9913]
classification: internal
owner: platform-docs@example.comEstratégias de ingestão e chunking
Chunking fraco causa respostas erradas com mais frequência do que modelos fracos.
| Tipo de conteúdo | Estratégia de chunk |
|---|---|
| Políticas | Dividir em H2, manter prefixo de título do artigo |
| Docs API | Um endpoint por chunk com method + path |
| Tickets | Resumo de thread + chunk de último estado |
| Tabelas | Grupos de linhas com linha de cabeçalho repetida |
Ilustração Python para chunking consciente de estrutura:
from dataclasses import dataclass
@dataclass
class Chunk:
text: str
metadata: dict
def chunk_markdown_sections(md: str, max_chars: int = 1200) -> list[Chunk]:
sections = md.split("\n## ")
out: list[Chunk] = []
for i, sec in enumerate(sections):
body = sec if i == 0 else "## " + sec
while len(body) > max_chars:
out.append(Chunk(body[:max_chars], {"part": "split"}))
body = body[max_chars:]
out.append(Chunk(body, {"part": "whole"}))
return outGuarde source_version em cada chunk para a recuperação preferir versão mais recente em conflitos.
Controlo de acesso para vectores
Vectores não são fronteiras mágicas de segurança. Implemente filtro no momento da query:
type QueryContext = { userId: string; groups: string[]; clearance: string };
export function buildMetadataFilter(ctx: QueryContext): Record<string, unknown> {
return {
$and: [
{ classification: { $lte: ctx.clearance } },
{ allowed_groups: { $in: ctx.groups } },
{ valid_to: { $gte: new Date().toISOString() } },
],
};
}Sincronize membros de grupos do identity provider em schedule; falhe fechado se sync estiver obsoleto além do SLA.
Para SaaS multi-inquilino, isolamento físico ou lógico de índice por inquilino previne fugas de nearest neighbor aproximado cross-tenant.
Dimensões de qualidade e SLAs
Defina qualidade mensurável para corpora de IA:
| Dimensão | Métrica | SLA de exemplo |
|---|---|---|
| Actualidade | Lag origem para índice | < 4 horas wiki interna |
| Completude | % docs ingeridos vs catálogo | > 99% conjunto aprovado |
| Precisão | Eval humana em golden set | > 85% atribuição correcta |
| Consistência | Taxa de chunks duplicados | < 2% |
| Segurança | Ocorrências PII no índice | 0 achados críticos |
Automatize scans: regex e NER para IBAN, e-mail, termos de saúde em domínios errados.
PII, categorias especiais e base legal
RGPD e leis similares exigem clareza:
- Limitação de finalidade: não reutilize transcrições de suporte para embeddings de marketing sem base.
- Minimização: redija nomes onde não necessários para respostas.
- Apagamento: propague deletes ao vector store dentro de prazo documentado.
- Dados de categoria especial: negar por defeito em copilotos gerais salvo via legal explícita.
Documente decisões no registo de IA. Envolva DPO cedo ao ligar fontes RH ou saúde.
Actualidade, versionamento e eliminação
Versionamento: quando página Confluence actualiza, marque chunks antigos superseded antes do job de embed novo completar; camada de serving exclui superseded salvo modo histórico explícito.
API de eliminação:
def delete_subject_data(subject_id: str, index_client) -> int:
chunk_ids = index_client.find_chunks(metadata={"subject_id": subject_id})
index_client.delete_vectors([c.vector_id for c in chunk_ids])
index_client.delete_metadata(chunk_ids)
return len(chunk_ids)Teste apagamento trimestralmente com titulares sintéticos.
Conjuntos de avaliação e perguntas douradas
Construa um conjunto golden Q&A por domínio com:
- texto da pergunta
- fragmentos de resposta esperados
- IDs de documentos de origem obrigatórios
- testes negativos (pergunta deve recusar)
Execute eval em cada mudança de modelo de embedding ou refactor major de ingestão. Acompanhe precision@k e precisão de citação.
| Tipo eval | Detecta |
|---|---|
| Só recuperação | Chunk errado seleccionado |
| End-to-end | Alucinação do modelo apesar de boa recuperação |
| Recusa | Responder em excesso a partir de docs restritos |
Ligue falhas de eval a stewards, não apenas a prompt engineers.
Modelo operacional e RACI
| Actividade | Data owner | Plataforma | Segurança | Legal |
|---|---|---|---|---|
| Aprovar nova fonte | A | C | C | I |
| Construir conector | I | R | C | I |
| Classificação | A | I | C | C |
| Incidente de fuga | I | R | A | C |
R = responsible, A = accountable, C = consulted, I = informed.
Revisão trimestral de corpus: remover projectos obsoletos, refrescar classificações, validar que proprietários ainda estão empregados.
Exemplos de implementação
Fragmento DAG estilo Airflow (conceptual)
def ingest_wiki_domain(domain: str, **context):
docs = fetch_wiki(domain)
normalized = [normalize(d) for d in docs]
chunks = flatten(chunk_doc(d) for d in normalized)
embed_and_upsert(chunks, model="text-embedding-3-large")Teste dbt para alinhamento de catálogo
-- fail if orphaned chunks exist without catalog entry
select c.chunk_id
from ai_chunks c
left join catalog.datasets d on c.dataset_id = d.id
where d.id is null;HCL para tags de módulo Terraform (ilustração)
resource "aws_s3_bucket" "ai_corpus" {
bucket = "corp-ai-corpus-prod"
tags = {
DataClassification = "internal"
DataOwner = "platform-docs"
RetentionDays = "365"
AIUseCase = "engineering_copilot"
}
}Etiquete objectos cloud e colecções de índice consistentemente para chargeback FinOps.
Contratos com fornecedores de modelos e SaaS
A governação de dados prontos para IA estende-se a contratos com fornecedores:
- Especificar tipos de dados permitidos (sem categoria especial sem adenda).
- Definir retenção e eliminação em logs de fornecedor.
- Clarificar proibição de uso para treino ou opt-out.
- Exigir prazos de notificação de violação compatíveis com RGPD Artigo 33.
Mantenha registo mapeando cada corpus a DPAs de fornecedor. Bloqueie jobs de ingestão se estado DPA expirado.
Corpora multilingues e multimodais
Empresas europeias servem vários idiomas. Implicações de governação:
| Aspecto | Prática |
|---|---|
| Tags de idioma | Guardar lang em chunks para recuperação filtrada |
| Tradução | Documentar se traduções são geradas por máquina |
| Qualidade OCR | Score de confiança; excluir scans de saúde baixa confiança |
| Áudio/vídeo | Transcrições precisam consentimento de orador e regras de retenção |
Use conjuntos golden eval por idioma; não assuma que métricas só em inglês preveem qualidade de suporte em francês.
Resolução de conflitos quando fontes discordam
Sistemas RAG quebram confiança quando wiki e CRM discordam. Implemente regras de precedência em metadados:
SOURCE_PRECEDENCE = {"crm": 100, "policy_pdf": 90, "wiki": 50, "chat_log": 10}
def rank_chunks(chunks: list[dict]) -> list[dict]:
return sorted(
chunks,
key=lambda c: (SOURCE_PRECEDENCE.get(c["source_type"], 0), c["updated_at"]),
reverse=True,
)Mostre citações na UI para utilizadores julgarem conflitos. Agentes não devem fundir silenciosamente valores financeiros contraditórios.
Observabilidade para pipelines de dados
Monitorize ingestão como qualquer serviço crítico:
| Métrica | Limiar de alerta (exemplo) |
|---|---|
| ingest_lag_seconds | > SLA para domínio |
| embed_failures_rate | > 1% em 15m |
| acl_filter_empty_results | pico vs baseline |
| delete_job_backlog | > 1000 titulares pendentes |
Dashboards pertencem à stack de observabilidade de plataforma; alertas ligados a rotação on-call de data owner para contexto de negócio.
Trabalhar com parceiros de entrega externos
Ao alargar equipas via desenvolvimento nearshore ou outsourcing, forneça:
- Lista de datasets aprovados e fontes proibidas
- Regras de tratamento de classificação na Definition of Done
- Requisito de correr golden eval antes de merge
Parceiros não devem criar índices sombra em contas cloud pessoais. Todos os jobs de embed correm em infra controlada pelo inquilino com o mesmo modelo ACL que produção.
Lista de verificação de migração
Descoberta
- Inventariar fontes propostas para RAG
- Classificar cada fonte; negar restritos até revisão
- Mapear base legal e retenção
Construção
- Entradas de catálogo e jobs de linhagem
- Scan PII no caminho de ingestão
- Filtros ACL testados com utilizadores de amostra
- Recuperação híbrida configurada
Operação
- Suite golden eval em CI
- Fluxos de eliminação e supersede testados
- Monitorização de lag e taxas de erro
- Runbook para documento envenenado (artigo de segurança)
Escala
- Template self-service no IDP para domínios aprovados
- Dashboards de custo para jobs de embed
- Squads parceiras onboarded via outsourcing de desenvolvimento de software se necessário
Questões sobre desenho de corpus: contact ou sobre nós.
FAQ
Podemos usar réplicas de BD de produção directamente?
Evite réplicas brutas salvo se row-level security replicar perfeitamente em filtros. Prefira exportações curadas com minimização.
Um índice grande ou muitos?
Muitos índices ou namespaces por domínio/classificação simplificam ACL e raio de explosão.
Com que frequência re-embed tudo?
Apenas quando modelo de embedding muda ou estratégia de chunking muda materialmente; caso contrário actualizações incrementais.
O RGPD bloqueia APIs cloud de embedding?
Depende de DPA, região e conteúdo. Algumas equipas embed on-prem ou usam regiões UE com texto pseudonimizado.
Quem é dono de respostas erradas?
Produto gere UX; data owner gere qualidade de corpus; plataforma gere SLOs de pipeline. Documente em RACI.
Como interage a governação com agentes?
Agentes multiplicam chamadas de recuperação; corpora obsoletos ou demasiado amplos aumentam risco de injecção. Alinhe com arquitectura agentica.
Qual corpus realista para MVP?
Docs de engenharia internos ou macros de suporte aprovados: alto valor, classificação gerível, proprietários claros.
Como tratamos aquisições?
Congele ingest de sistemas adquiridos até classificação e estado DPA confirmados. Corra namespace de índice paralelo durante integração.
Clientes devem opt-in a treino IA nos seus tickets?
Default não para treino em conteúdo de cliente; linguagem contratual deve coincidir com controlos técnicos (sem fine-tune em background em dados de inquilino).
Quem paga re-embedding após mudança de modelo?
Atribua centro de custo à equipa que pediu upgrade de modelo; FinOps acompanha custo de job (guia FinOps).
Agenda de workshop de stewards (meio dia)
Use esta agenda ao arrancar dados prontos para IA num domínio:
- Inventariar fontes e classificar (90 minutos).
- Definir base legal e retenção (60 minutos).
- Esboçar chunking e RACI de proprietário (60 minutos).
- Acordar perguntas golden para eval (45 minutos).
- Atribuir acções para MVP de conector (15 minutos).
Facilitadores: data steward, engenheiro de plataforma, liaison de segurança. Output: charter de dataset assinado no catálogo.
Máquina de estados do ciclo de vida de documentos
Modele documentos de corpus explicitamente:
DRAFT --> APPROVED --> INDEXED --> ACTIVE
| |
v v
REJECTED SUPERSEDED --> ARCHIVED --> DELETEDTransições disparadas por aprovação de steward, sucesso de ingestão, nova versão de fonte, job de retenção ou pedido de apagamento. Agentes devem recuperar apenas ACTIVE salvo modo histórico activado para UI de auditoria interna.
Automatize transições em motor de workflow; tracking manual em folha de cálculo falha acima de dez fontes.
Referência de esquema de metadados
Campos mínimos de metadados de chunk:
| Campo | Tipo | Obrigatório | Notas |
|---|---|---|---|
| chunk_id | string | sim | Identificador estável |
| dataset_id | string | sim | Chave estrangeira catálogo |
| source_type | enum | sim | wiki, crm, pdf, etc. |
| source_version | string | sim | ID versão fornecedor |
| classification | enum | sim | public/internal/confidential |
| allowed_groups | string[] | sim | Grupos IAM |
| lawful_basis | string | sim | Referência RGPD Art. 6 |
| valid_from | datetime | sim | ISO-8601 |
| valid_to | datetime | não | null se aberto |
| embedding_model | string | sim | ID modelo versionado |
| language | string | sim | Tag BCP 47 |
Valide esquema no pipeline de ingestão; rejeite chunks sem campos obrigatórios em vez de default permissivo.
Template de reporting para administração
Resumo trimestral de uma página para executivos:
- Contagem de datasets de IA aprovados e proprietários
- Lag médio de ingestão vs SLA
- Tendência de score golden eval
- Achados abertos de revisões segurança/privacidade
- Expansões de corpus planeadas e estimativa de custo
Ligue métricas a resultados de negócio: deflexão de suporte, sucesso self-serve de engenheiros, não só contagens de embedding.
Lista de verificação de endurecimento de conectores
Antes de ligar novo sistema de origem:
- Conta de serviço usa scopes de leitura de menor privilégio
- Credenciais em vault, rotação em schedule
- Caminho de rede documentado (VPC peering, private link)
- Limites de taxa respeitam quotas API de origem
- Sync incremental usa change tokens ou CDC, não scrape completo horário
- Tratamento de erros dead-letters para fila ops com redacção de payload
Conectores falhados não devem indexar parcialmente chunks corruptos; use batches transaccionais por documento onde vector store suporta upsert idempotente.
Tratamento de dados de amostra para não-produção
Programadores pedem testes RAG realistas sem copiar produção. Plataforma fornece packs de corpus sintético: tickets gerados, nomes de clientes fictícios e casos extremos etiquetados incluindo fixtures de injecção indirecta para formação de segurança. Refresque packs trimestralmente; nunca refresque copiando prod sem sign-off de pipeline de anonimização.
Índices de staging devem usar namespaces e credenciais separados de produção. Jobs eval CI leem apenas packs sintéticos salvo aprovação break-glass explícita para subconjuntos mascarados.
Quando product managers pedem «copiar prod para demos melhores», redireccione para packs sintéticos mais conjunto golden curado manualmente aprovado por stewards. O ganho incremental de qualidade raramente justifica risco de privacidade e segurança de cópias bulk prod em ambientes inferiores.
Planeamento de capacidade de índice
Tamanho de índice vectorial conduz custo e latência de query. Estime:
- Tamanho médio de chunk em tokens e dimensão de embedding.
- Número de documentos e crescimento esperado para três anos.
- Contagem de réplicas para alta disponibilidade.
Ilustração hipotética: Um milhão de vectores a 1536 dimensões com metadados pode ocupar da ordem de dezenas de gigabytes incluindo índices (depende de fornecedor; meça em prova de conceito). Planeie re-sharding antes de p95 de query degradar. FinOps deve ver crescimento de índice junto a custos de jobs de embed no mesmo dashboard.
Agende certificação anual de corpus: stewards re-atestam classificação, base legal e estado de emprego de proprietário para cada dataset de produção. Datasets decertificados movem para arquivo só leitura até remediados ou eliminados.
Registe resultados de certificação no log de auditoria do catálogo para pedidos de regulador e revisões internas de qualidade.
Atribua sponsor executivo aos três corpora face ao cliente principais para existirem caminhos de escalada claros quando stewards e produto discordam de scope.
Referências
- Texto integral RGPD (EUR-Lex): https://eur-lex.europa.eu/eli/reg/2016/679/oj
- Orientação ICO sobre IA e protecção de dados (UK): https://ico.org.uk/for-organisations/uk-gdpr-guidance-and-resources/artificial-intelligence/
- NIST Privacy Framework: https://www.nist.gov/privacy-framework
- DAMA-DMBOK (body of knowledge de gestão de dados): https://www.dama.org/cpages/body-of-knowledge
- OpenMetadata: https://open-metadata.org/
- DataHub: https://datahubproject.io/
- OWASP LLM Top 10 (divulgação de dados): https://owasp.org/www-project-top-10-for-large-language-model-applications/
- Insights relacionados: IA agentica, segurança IA, FinOps, platform engineering
A planear um projeto em Portugal?
Indique stack, prazos e equipa. Respondemos em dias úteis.
