Skip to content

Contexto para IA

O GeradorContextoDeIA escreve o banco analisado em JSON, dividido em um index.json leve e um arquivo por tabela. Pensado para um agente de IA consumir sem abrir conexão com o banco fonte, porque o contexto necessário para responder sobre o schema já está no artefato, em vez de exigir uma consulta ao vivo.

Por que dividido em vários arquivos

Um único JSON com o banco inteiro serializado obrigaria um agente a carregar tudo, mesmo quando a tarefa só envolve uma ou duas tabelas. O ddf separa um index.json que só lista as tabelas existentes e como elas se relacionam, do conteúdo detalhado de cada tabela, que fica em um arquivo próprio. Um agente consegue então carregar só o subconjunto do schema relevante à tarefa, prática conhecida como schema linking.

Estrutura gerada

.
├── index.json
└── tabelas/
    └── <escopo>/
        └── <tabela>.json

Diferente do projeto dbt, aqui não há prefixo de escopo no nome do arquivo: a própria subpasta tabelas/<escopo>/ já desambigua uma tabela homônima entre escopos diferentes.

index.json

O ponto de entrada do artefato. Traz o timestamp de geração, a lista de todas as tabelas do lote com o caminho do arquivo de cada uma, e o grafo de relacionamentos entre elas.

O grafo é bidirecional: cada tabela lista as chaves estrangeiras que ela declara (referencia) e as tabelas que apontam para ela (referenciado_por). referencia é sempre completo, porque vem direto da chave estrangeira real da própria tabela, mesmo quando a tabela referenciada não faz parte do lote analisado. referenciado_por só enxerga o que está no lote, porque se ele for um recorte do banco, uma tabela de fora que também referencia a tabela atual fica invisível ali. O index.json carrega uma nota fixa avisando dessa limitação, em vez de tentar sinalizar caso a caso.

Arquivo de uma tabela

Cada tabelas/<escopo>/<tabela>.json traz o conteúdo completo de uma tabela: nome, escopo, papel de negócio e regras de negócio (vindos do override, ver Curadoria), total de linhas e os metadados da amostra usada.

Quando a análise já calculou as métricas da tabela, o JSON também traz completude e o nível de confiança estatística da amostra, ao lado de uma flag indicando se a amostra estava vazia. Sem essa flag, um agente não teria como distinguir "100% de completude confirmada" de "nenhuma linha inspecionada", já que os dois casos produzem o mesmo número.

Restrições UNIQUE compostas e chaves estrangeiras compostas da tabela aparecem como listas próprias, quando existirem. Cada coluna é serializada com seu tipo de dado, se é chave primária ou estrangeira, suas referências, se aceita nulo, se é única, papel de negócio, regras de negócio e as métricas calculadas pela análise (percentual de nulo, percentual de único, valores frequentes, mínimo, máximo e formato detectado).

Esquema de consulta

Quando pelo menos uma coluna da tabela sustenta um filtro de enumeração fechada, o JSON inclui uma seção esquema_de_consulta com a lista dessas colunas: o nome, os valores possíveis e a cobertura amostral daquela lista de valores sobre o total observado. É a mesma pergunta que decide o teste accepted_values do projeto dbt (ver Projeto dbt), aqui reaproveitada para sugerir a um agente que colunas fazem sentido como filtro em uma consulta, em vez de texto livre.