Natan Oliveira Martins

← Voltar ao índice
02 IA generativa · LLMOps Em construção

RAG multimodal com camada de governança

Responde perguntas a partir de textos, tabelas e gráficos em PDFs, e audita cada prompt e resposta contra vazamento de dados e alucinação.

  • Unstructured
  • Qdrant
  • LangGraph
  • RabbitMQ
  • vLLM
  • FastAPI

Código e roteiro no GitHub →

Demo interativa

Você é

Arraste para girar · passe o mouse num formato para ler o trecho · ● texto · ■ tabela · ◆ figura · apagado = restrito ao RH

Resposta

Escolha uma pergunta acima. Você vai vê-la cair no espaço vetorial, puxar os trechos mais próximos e passar pelos guardas.

Trechos recuperados

    Log de auditoria

      O que experimentar

      1. Pergunte o salário da Carla Mendes como Colaborador e depois como RH. O controle de acesso acontece na recuperação (o trecho nem vira candidato), não pedindo ao modelo para guardar segredo.
      2. Como RH, repare que os CPFs voltam como tarjas pretas: PII é mascarada na saída, mesmo para quem pode ver o documento.
      3. Ligue o LLM mentiroso e pergunte sobre o relatório de despesas. A checagem de aderência pega o número alterado, porque ele não aparece em nenhuma fonte.
      4. Pergunte a mesma coisa duas vezes: a segunda resposta vem do cache e custa zero tokens. Clique rápido o bastante e você bate no limite de requisições.

      O problema

      O conhecimento corporativo vive em PDFs cheios de tabelas e gráficos que a extração de texto simples destrói. E quando um LLM consegue ler esses documentos, algo precisa impedir que ele repita um salário ou invente um número.

      Como funciona

      1. Os documentos são separados em elementos tipados (parágrafo, tabela, figura); tabelas mantêm a estrutura e figuras ganham uma descrição gerada.
      2. Os elementos viram embeddings e vão para o Qdrant com a página de origem, para que toda resposta possa citar a fonte.
      3. Um agente em LangGraph decide se busca, lê uma tabela ou pede esclarecimento.
      4. Um gateway na frente do modelo faz cache, limita requisições e envia cada troca para uma fila de auditoria assíncrona: detecção de PII, aderência às fontes recuperadas, toxicidade.
      PDFs texto · tabelas · gráficos Parser elementos tipados Qdrant índice vetorial User pergunta Gateway cache · limites LangGraph agente Audit PII · aderência
      Fig. 02 — Como funciona

      O que é real, o que é simulado

      Real

      • A recuperação é real: vetores TF-IDF com similaridade de cosseno sobre 20 trechos, e o layout 3D é um PCA desses vetores calculado no seu navegador.
      • O filtro de ACL, o cache, o limite de requisições por balde de tokens, as regras de prompt injection, o mascaramento de PII e a checagem de aderência são a lógica de verdade.
      • Os tempos em milissegundos no rastro são medidos na sua máquina.

      Simulado nesta demo

      • Os documentos são de uma empresa fictícia; nomes, CPFs e contatos são inventados.
      • Não há LLM: as respostas são extrativas (frases copiadas das fontes). O botão do “LLM mentiroso” altera um número de propósito, para a checagem de aderência ter o que pegar.
      • TF-IDF substitui embeddings densos, e a fila de auditoria é uma lista na página, não o RabbitMQ.

      Ainda não construído

      • Parsing de PDFs com tabelas e gráficos reais (Unstructured)
      • Qdrant com embeddings densos e filtros de ACL no payload
      • Agente em LangGraph e um LLM de verdade atrás do gateway
      • Modelos de PII e aderência (no lugar de regras) consumindo do RabbitMQ