{"id":2327,"date":"2025-02-26T11:05:00","date_gmt":"2025-02-26T10:05:00","guid":{"rendered":"https:\/\/pletzenauer.com\/?p=2327"},"modified":"2026-08-05T17:24:42","modified_gmt":"2026-08-05T15:24:42","slug":"agentic-rag-n8n-base-de-conhecimento","status":"publish","type":"post","link":"https:\/\/pletzenauer.com\/pt-pt\/2025\/02\/26\/agentic-rag-n8n-base-de-conhecimento\/","title":{"rendered":"Agentic RAG no n8n: porque o RAG cl\u00e1ssico falha muitas vezes \u2013 e como fazer melhor"},"content":{"rendered":"<p>Muitas empresas apostam hoje em assistentes de IA que devem responder a perguntas sobre os seus pr\u00f3prios documentos \u2013 atas de reuni\u00f5es, tabelas de indicadores ou feedback de clientes. O procedimento habitual por tr\u00e1s disso chama-se Retrieval Augmented Generation (RAG). Est\u00e1 difundido, \u00e9 bem suportado e implementa-se depressa em ferramentas no-code como o n8n. S\u00f3 que, na pr\u00e1tica, o RAG cl\u00e1ssico d\u00e1 respostas erradas ou incompletas com uma frequ\u00eancia surpreendente. Cole Medin mostra no seu v\u00eddeo a que se deve isso e como uma configura\u00e7\u00e3o de Agentic RAG contorna as fraquezas t\u00edpicas. Resumo aqui os pontos mais importantes de forma s\u00f3bria.<\/p>\n<div style=\"background:#FFE6D6;border-left:4px solid #F26A21;padding:16px 20px;border-radius:6px;margin:24px 0;\"><strong>O essencial em poucas linhas<\/strong><\/p>\n<ul>\n<li>O RAG cl\u00e1ssico falha sobretudo em duas coisas: n\u00e3o consegue \u00abafastar o zoom\u00bb para documentos inteiros e n\u00e3o consegue fazer verdadeira an\u00e1lise de dados sobre tabelas.<\/li>\n<li>O Agentic RAG d\u00e1 ao agente de IA v\u00e1rias ferramentas em vez de uma \u00fanica pesquisa \u2013 \u00e9 ele que decide como pesquisa a base de conhecimento.<\/li>\n<li>As tabelas (CSV\/Excel) s\u00e3o guardadas em separado, de forma a poderem ser consultadas por SQL \u2013 sem criar uma tabela pr\u00f3pria para cada ficheiro.<\/li>\n<li>O agente consegue listar documentos, obter ficheiros inteiros, citar fontes e, se for preciso, melhorar a pesquisa.<\/li>\n<li>A configura\u00e7\u00e3o de n8n apresentada \u00e9 um modelo ampli\u00e1vel, n\u00e3o um produto acabado \u2013 os prompts e as ferramentas t\u00eam de ser adaptados ao caso de uso concreto.<\/li>\n<\/ul>\n<\/div>\n<figure style=\"margin:28px 0;\"><img decoding=\"async\" src=\"https:\/\/pletzenauer.com\/wp-content\/uploads\/2026\/06\/1487-1.png\" alt=\"Compara\u00e7\u00e3o em duas colunas entre o RAG cl\u00e1ssico e o Agentic RAG, com quatro pontos de cada lado\" style=\"width:100%;height:auto;border-radius:8px;border:1px solid #E5E2DE;\"\/><figcaption style=\"font-size:0.9em;color:#6b6b6b;margin-top:8px;\">O Agentic RAG d\u00e1 ao agente de IA v\u00e1rias ferramentas em vez de uma \u00fanica pesquisa.<\/figcaption><\/figure>\n<h2>Porque o RAG cl\u00e1ssico desilude na pr\u00e1tica<\/h2>\n<p>O RAG funciona por pesquisa de semelhan\u00e7a: a pergunta \u00e9 comparada com peda\u00e7os de texto guardados (\u00abchunks\u00bb) e os mais adequados s\u00e3o passados ao modelo de linguagem. O problema est\u00e1 na sele\u00e7\u00e3o. Ela ignora com regularidade contexto importante.<\/p>\n<p>Medin aponta duas fragilidades concretas:<\/p>\n<ul>\n<li><strong>Nenhuma vis\u00e3o sobre documentos inteiros:<\/strong> o RAG recorre apenas a excertos isolados. Quem quiser analisar tend\u00eancias numa tabela talvez receba s\u00f3 um quarto das linhas \u2013 e, com isso, um resultado errado.<\/li>\n<li><strong>Nenhuma an\u00e1lise de dados a s\u00e9rio:<\/strong> somas ou valores m\u00e1ximos ao longo de uma tabela n\u00e3o se calculam de forma fi\u00e1vel com uma pesquisa puramente textual.<\/li>\n<\/ul>\n<p>A isto junta-se um aborrecimento pr\u00e1tico: se se perguntar pela ata de uma determinada data, o RAG vai por vezes buscar o documento do dia errado \u2013 embora a data esteja no t\u00edtulo. E ligar documentos diferentes entre si, para estabelecer um contexto mais amplo, raramente resulta.<\/p>\n<h2>O que o Agentic RAG faz de diferente<\/h2>\n<p>A ideia central \u00e9 simples: em vez de dar ao agente de IA uma \u00fanica ferramenta de pesquisa, d\u00e3o-se-lhe v\u00e1rias \u2013 e deixa-se que ele pr\u00f3prio decida como aborda a base de conhecimento. Medin define assim o Agentic RAG:<\/p>\n<blockquote><p>Agentic RAG significa dar ao agente a capacidade de refletir sobre <strong>como<\/strong> pesquisa a base de conhecimento \u2013 em vez de o prender a uma \u00fanica ferramenta.<\/p><\/blockquote>\n<p>Em concreto, isso permite-lhe melhorar as suas consultas, escolher outra ferramenta quando for preciso e experimentar v\u00e1rios caminhos at\u00e9 ter uma resposta s\u00f3lida. Se a pesquisa RAG pura falhar, ele deixa de ficar bloqueado.<\/p>\n<h3>As quatro ferramentas do agente<\/h3>\n<p>No fluxo de trabalho n8n o agente disp\u00f5e das seguintes ferramentas:<\/p>\n<ul>\n<li><strong>Pesquisa RAG<\/strong> \u2013 a cl\u00e1ssica pesquisa de semelhan\u00e7a, na vers\u00e3o melhorada j\u00e1 com indica\u00e7\u00e3o da fonte.<\/li>\n<li><strong>Listar documentos<\/strong> \u2013 o agente obt\u00e9m todos os documentos com t\u00edtulos e IDs e pondera quais poder\u00e3o ser relevantes.<\/li>\n<li><strong>Obter o conte\u00fado de um ficheiro<\/strong> \u2013 atrav\u00e9s do ID do ficheiro vai buscar o texto completo de um documento espec\u00edfico (por exemplo, a ata de 23 de fevereiro, identific\u00e1vel pelo t\u00edtulo).<\/li>\n<li><strong>Consulta SQL sobre tabelas<\/strong> \u2013 os ficheiros CSV e Excel s\u00e3o consultados como tabelas SQL, para tornar poss\u00edveis somas, m\u00e1ximos e an\u00e1lises semelhantes.<\/li>\n<\/ul>\n<p>No prompt de sistema, o agente \u00e9 instru\u00eddo a come\u00e7ar pelo RAG e a recorrer \u00e0s restantes ferramentas apenas quando a pesquisa n\u00e3o devolver o que \u00e9 preciso. Uma indica\u00e7\u00e3o importante do v\u00eddeo: pedir explicitamente honestidade ao agente \u2013 ou seja, que diga abertamente quando n\u00e3o encontrou resposta \u2013 reduz de forma sens\u00edvel as alucina\u00e7\u00f5es.<\/p>\n<h2>Como s\u00e3o guardados os dados de tabelas<\/h2>\n<p>A parte tecnicamente mais interessante diz respeito \u00e0s tabelas. Para isso s\u00e3o criadas no Supabase tr\u00eas tabelas:<\/p>\n<ul>\n<li><strong>documents<\/strong> \u2013 cont\u00e9m os embeddings para o RAG, os metadados e os conte\u00fados de cada chunk.<\/li>\n<li><strong>document_metadata<\/strong> \u2013 guarda informa\u00e7\u00e3o de n\u00edvel superior: t\u00edtulos, URLs para indica\u00e7\u00e3o de fontes e \u2013 no caso das tabelas \u2013 o esquema (ou seja, os nomes das colunas).<\/li>\n<li><strong>document_rows<\/strong> \u2013 armazena as linhas das tabelas. Os dados propriamente ditos v\u00e3o para uma coluna <strong>JSONB<\/strong> flex\u00edvel chamada <code>row_data<\/code>.<\/li>\n<\/ul>\n<p>O truque: com JSONB \u00e9 poss\u00edvel guardar quaisquer estruturas de colunas, sem ter de criar uma tabela SQL pr\u00f3pria para cada ficheiro CSV ou Excel. O agente l\u00ea primeiro o esquema a partir dos metadados, percebe que colunas est\u00e3o dispon\u00edveis e formula depois uma consulta SQL contra <code>row_data<\/code>. Medin sublinha expressamente que esta configura\u00e7\u00e3o \u00e9 simplificada \u2013 o esquema nada diz, por exemplo, sobre tipos de dados, pelo que uma soma sobre uma coluna com cifr\u00f5es pode falhar. O que lhe interessa \u00e9 o conceito, n\u00e3o uma implementa\u00e7\u00e3o perfeita.<\/p>\n<h2>O pipeline de RAG: do Google Drive para o Supabase<\/h2>\n<p>Antes de o agente poder trabalhar, \u00e9 preciso encher a base de conhecimento. O pipeline decorre em v\u00e1rios passos:<\/p>\n<ul>\n<li><strong>Acionador:<\/strong> um acionador do Google Drive verifica a cada minuto se h\u00e1 ficheiros novos ou alterados. Em alternativa funcionam o Dropbox ou um acionador de ficheiros local. Os ficheiros eliminados, por\u00e9m, n\u00e3o s\u00e3o detetados.<\/li>\n<li><strong>V\u00e1rios ficheiros ao mesmo tempo:<\/strong> um ciclo rec\u00e9m-acrescentado processa agora tamb\u00e9m v\u00e1rios ficheiros que chegam no mesmo intervalo de polling \u2013 uma falha conhecida da vers\u00e3o anterior.<\/li>\n<li><strong>Eliminar dados antigos:<\/strong> antes de cada importa\u00e7\u00e3o s\u00e3o removidos os registos existentes para o respetivo ID de ficheiro. Assim n\u00e3o fica para tr\u00e1s nenhum chunk desatualizado quando um documento ficou mais curto.<\/li>\n<li><strong>Extrair o conte\u00fado:<\/strong> um n\u00f3 Switch ramifica consoante o tipo de ficheiro \u2013 PDF, Google Doc, texto ou tabela s\u00e3o lidos de maneiras diferentes. Outros formatos, como JSON ou HTML, podem ser acrescentados atrav\u00e9s de n\u00f3s adicionais.<\/li>\n<li><strong>Guardar as tabelas em duplicado:<\/strong> os ficheiros CSV s\u00e3o, por um lado, preparados como documento de texto para o RAG e, por outro, guardados linha a linha em <code>document_rows<\/code> para consultas SQL.<\/li>\n<\/ul>\n<p>Um obst\u00e1culo pr\u00e1tico na configura\u00e7\u00e3o: segundo o v\u00eddeo, para a liga\u00e7\u00e3o Postgres ao Supabase tem de se usar o <strong>transaction pooler<\/strong> (porta 6543) e n\u00e3o a liga\u00e7\u00e3o direta. A documenta\u00e7\u00e3o do n8n seria pouco clara neste ponto.<\/p>\n<h3>Modelos utilizados<\/h3>\n<p>Para os embeddings \u00e9 usado o <code>text-embedding-3<\/code> da OpenAI e, como modelo de linguagem, o <code>GPT-4o mini<\/code> \u2013 escolhidos deliberadamente por serem baratos e r\u00e1pidos. Para casos mais exigentes, Medin recomenda modelos mais potentes, como o GPT-4o ou o Claude Sonnet 4. Importante: na inser\u00e7\u00e3o e na consulta tem de se usar o mesmo modelo de embedding, com o mesmo n\u00famero de dimens\u00f5es.<\/p>\n<h2>Tr\u00eas exemplos do v\u00eddeo<\/h2>\n<p>Medin demonstra como o agente escolhe ferramentas diferentes consoante a pergunta:<\/p>\n<ul>\n<li><strong>Pergunta sobre tabelas:<\/strong> perante \u00abem que m\u00eas tivemos mais clientes novos?\u00bb, o agente escreve uma consulta SQL e devolve o resultado correto (dezembro, 129 clientes novos) \u2013 em vez de confiar em chunks incompletos.<\/li>\n<li><strong>Pergunta puramente de RAG:<\/strong> perante \u00abonde podemos melhorar?\u00bb, a pesquisa de semelhan\u00e7a encontra o documento de feedback, apesar de a palavra \u00abmelhoria\u00bb n\u00e3o ter sido usada de prop\u00f3sito.<\/li>\n<li><strong>Obten\u00e7\u00e3o de ficheiro com fonte:<\/strong> ao obter uma ata de reuni\u00e3o completa, o agente devolve os action items e, se lhe for pedido, uma liga\u00e7\u00e3o clic\u00e1vel para a fonte.<\/li>\n<\/ul>\n<h2>Conclus\u00e3o<\/h2>\n<p>O artigo mostra de forma s\u00f3bria porque o RAG ing\u00e9nuo n\u00e3o chega para muitas aplica\u00e7\u00f5es de neg\u00f3cio: ignora contexto e n\u00e3o sabe calcular com tabelas. A abordagem agentic resolve isso de forma pragm\u00e1tica, dando ao agente de IA v\u00e1rias ferramentas e margem de decis\u00e3o. Para quem decide numa PME e pondera um assistente de documentos, esta \u00e9 uma conclus\u00e3o importante: a qualidade n\u00e3o depende apenas do modelo, mas da arquitetura por tr\u00e1s dele. Quem adotar a configura\u00e7\u00e3o de n8n apresentada deve entend\u00ea-la como ponto de partida \u2013 os prompts, as ferramentas e o modelo de dados t\u00eam de ser adaptados ao pr\u00f3prio acervo de dados. Precisamente a consulta SQL sobre tabelas e o tratamento dos tipos de dados deixam espa\u00e7o para melhorias.<\/p>\n<p><strong>Fonte:<\/strong> Cole Medin \u2013 \u201eI Built the ULTIMATE n8n RAG AI Agent Template&#8221;, <a href=\"https:\/\/www.youtube.com\/watch?v=mQt1hOjBH9o\">https:\/\/www.youtube.com\/watch?v=mQt1hOjBH9o<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>O RAG cl\u00e1ssico ignora muitas vezes o contexto e os dados de tabelas. Como uma configura\u00e7\u00e3o de Agentic RAG no n8n pesquisa bases de conhecimento de forma mais fi\u00e1vel \u2013 explicado de forma pr\u00e1tica.<\/p>\n","protected":false},"author":0,"featured_media":1507,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-2327","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-unkategorisiert"],"_links":{"self":[{"href":"https:\/\/pletzenauer.com\/pt-pt\/wp-json\/wp\/v2\/posts\/2327","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pletzenauer.com\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pletzenauer.com\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/pletzenauer.com\/pt-pt\/wp-json\/wp\/v2\/comments?post=2327"}],"version-history":[{"count":1,"href":"https:\/\/pletzenauer.com\/pt-pt\/wp-json\/wp\/v2\/posts\/2327\/revisions"}],"predecessor-version":[{"id":2917,"href":"https:\/\/pletzenauer.com\/pt-pt\/wp-json\/wp\/v2\/posts\/2327\/revisions\/2917"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/pletzenauer.com\/pt-pt\/wp-json\/wp\/v2\/media\/1507"}],"wp:attachment":[{"href":"https:\/\/pletzenauer.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=2327"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pletzenauer.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=2327"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pletzenauer.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=2327"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}