Série RAG
09 projetos · 471 testes
Do baseline ao deploy. Framework 100% local e 100% privado, com seletor multi-provider — Ollama local, Gemini, Grok ou Groq.
- 01Vanilla RAGO baseline honesto: recuperar e gerar, sem truque.
- 02Memory RAGMemória persistente entre conversas.
- 03Agentic RAGReAct e tool calling — o modelo decide quando buscar.
- 04Corrective RAGCRAG: o sistema avalia a própria recuperação e corrige.
- 05Adaptive RAGRoteamento dinâmico por tipo de pergunta.
- 06GraphRAGRecuperação sobre grafo, com consultas Cypher.
- 07Hybrid RAGBM25 + vetorial, fundidos por RRF.
- 08HyDE RAGDocumento hipotético para melhorar a busca.
- 09Deploy CloudOrquestração em Docker — o que faltava para sair do notebook.
Série MCP & A2A
08 servidores · 212 testes
Os dois protocolos que padronizam como agentes de IA operam sistemas reais. Servidor e cliente escritos à mão sobre stdio, sem framework escondendo o protocolo.
- 01Ping ServerServidor MCP mínimo, com health-check TCP real e latência medida.
- 02Cliente MCPDescobre tools e traduz para function calling; o LLM escolhe.
- 03ResourcesDado estático, arquivo e template com parâmetro na URI.
- 04Prompts + StreamlitPrompt versionado no servidor, selecionado em runtime.
- 05Servidor segurobcrypt como verificador, SHA-256 como índice de API key.
- 06WhatsAppQuatro tools sobre Evolution API — mensagem entregue de verdade.
- 07Text-to-SQLMulti-agente CrewAI em PostgreSQL, com defesa em duas camadas.
- 08Agent-to-AgentDois processos que descobrem a capacidade um do outro em runtime.
O caso que eu levo para entrevista
O validador que aceitava DROP TABLE
No projeto 07, um agente recebe acesso de consulta a um banco relacional. A proteção original verificava se o SQL começava com select. Isso deixava passar:
SELECT 1; DROP TABLE clientes
Começa com select, e o driver do PostgreSQL executa múltiplos comandos numa única chamada. Como o SQL é escrito por um modelo que leu texto do usuário, o vetor de ataque é prompt injection: ninguém precisa de acesso ao banco, basta convencer o modelo.
A correção não foi endurecer o filtro. Foi reconhecer que validar prefixo é validar string, quando o necessário era validar comando — o que exigiu um analisador léxico que separa código de literal e de comentário. E mudou a premissa: o validador na aplicação passou a ser declarado como conveniência; a garantia foi movida para o banco, em transação somente-leitura. Se o código falhar, o PostgreSQL recusa.
Encontrei essa falha no meu próprio código. O teste que a reproduz se chama test_rejeita_o_bypass_original e está no repositório público, junto com os outros 17 defeitos que documentei — inclusive os oito que a suíte de testes não pegava e só apareceram quando eu rodei os sistemas de verdade.