Construindo um Agente LLM com N8N e Open-WebUI
O Que São Soluções de Low-Code
Soluções de low-code têm crescido em popularidade, especialmente com o aumento dos Grandes Modelos de Linguagem (LLMs). Simplificando, plataformas de low-code são ferramentas que permitem que os usuários criem aplicações ou fluxos de trabalho com um esforço mínimo de codificação. Em vez de escrever código linha por linha, os usuários podem interagir com essas plataformas usando funcionalidade de arrastar e soltar. Elas vêm equipadas com templates e componentes pré-construídos que simplificam o processo de criação e integração de aplicações.
Essas plataformas também oferecem a flexibilidade de conectar com aplicativos e serviços populares. Para aqueles que precisam de capacidades avançadas, algumas soluções de low-code até integram com LLMs de código aberto através de serviços hospedados localmente, como Ollama, ou utilizando bancos de dados vetoriais.
Casos de Uso Empresariais
Após pesquisar as aplicações mais populares, não é surpreendente ver que soluções de low-code são amplamente utilizadas para
- Automatizar processos de negócios repetitivos
- Criar chatbots e assistentes virtuais com suporte a LLMs
- Implementar fluxos de trabalho de Geração Aumentada por Recuperação (RAG)
- Automatizar suporte ao cliente e fluxos de trabalho de marketing
Agentes de IA
Agentes de IA são sistemas que conectam modelos de IA, como o GPT-4, a ferramentas e bancos de dados vetoriais. Quando uma solicitação é enviada para o sistema de agentes de IA, em vez de fornecer uma resposta imediata, o modelo de IA pode selecionar e usar as ferramentas apropriadas para completar a tarefa.
Soluções de low-code têm integrado agentes de IA, tornando-se uma tendência crescente entre desenvolvedores e não desenvolvedores. Explorei duas bibliotecas populares de low-code: N8N e Open-WebUI. Neste post, compartilharei minha experiência com essas ferramentas, fornecerei feedback e oferecer dicas para usá-las de forma eficaz. Finalmente, abordarei a grande questão: As soluções de low-code realmente economizam tempo para não desenvolvedores?
N8N
N8N, originalmente chamado de Nodemation, é uma ferramenta de código aberto, auto-hospedada, construída em torno do conceito de um grafo. Um grafo consiste em nós e arestas. No N8N, os nós são os componentes principais, cada um projetado para lidar com tarefas específicas, como recuperar dados, transformá-los ou enviá-los para um banco de dados.
Conectando nós em sequência, você pode criar um fluxo de trabalho. Esses fluxos de trabalho automatizam tarefas, como carregar, transformar e transferir dados. Tudo isso acontece em uma tela visual onde você pode arrastar e soltar os nós para projetar a automação em uma sequência lógica. Essa abordagem intuitiva facilita a representação e o gerenciamento das tarefas que você deseja automatizar.
Templates de Fluxos de Trabalho do N8N
N8N oferece muitos templates de fluxo de trabalho e casos de uso para ajudá-lo a começar. Testei um dos fluxos de trabalho localmente em meu Macbook Pro com um chip M4, seguindo o guia de início rápido do N8N, que explica como usar o Docker Compose para auto-hospedar o N8N juntamente com o Vector DB (Qdrant), PostgresSQL e serviços de Ollama.
Após executar Docker Compose, o N8N hospedado localmente está disponível em http://localhost:5678. Ao mesmo tempo, o Docker Compose também configura o banco de dados vetorial (Qdrant), banco de dados de armazenamento (PostgresSQL) e os serviços de LLMs hospedados localmente (Ollama).
Chatbot RAGs
Usando a tela do N8N e vários nós, você pode criar um chatbot com um RAG e um LLM. Os nós Webhook
e Responder ao Webhook
permitem que você faça solicitações HTTP para buscar dados de qualquer aplicativo ou serviço com uma API REST. Mais adiante, usarei esses nós para permitir que outros serviços interajam com o sistema de chatbot construído no N8N. Até este ponto, nenhuma linha de código foi escrita, e o sistema de chatbot está completo!
Credenciais de Serviços
Algumas configurações de credenciais são necessárias para o serviço N8N se comunicar com outros serviços. Para o serviço Ollama, você deve usar a seguinte URL, porque o Ollama é implantado como um contêiner com sua porta encaminhada para 11434: http://host.docker.internal:11434/.
Da mesma forma, para a credencial do Qdrant, a chave da API é sua escolha, já que está hospedada localmente. A URL a ser usada é http://qdrant:6333, conforme mostrado abaixo.
Por fim, para a credencial do Postgres, use o DB, nome de usuário e senha do .env
. O host é postgres
.
Conhecimento para RAGs
Criamos um documento de conhecimento conforme o seguinte:
Eu mencionei os chips Blackwell que têm 4x a velocidade de inferência comparados com os chips Hopper.
Para inserir o documento no Qdrant, começa fazendo o download de um arquivo, seguido da extração do texto do documento. O texto extraído é então processado usando um nó Divisor de Texto Recursivo
, que divide o texto em segmentos menores antes de serem incorporados. O texto dividido é carregado usando o Carregador de Dados Padrão
e, em seguida, processado pelo modelo de incorporação do Ollama. Finalmente, as incorporações são inseridas no banco de dados vetorial.
Acionar fluxo de trabalho N8N
O fluxo de trabalho do sistema de chatbot de IA baseado em RAGs pode ser acionado tanto por uma mensagem de chat quanto por uma solicitação de webhook recebida. Nesta seção, o texto é enviado para o Agente de IA
via mensagem de chat, que usa o Modelo de Chat do Ollama
para gerar respostas. O histórico da conversa é armazenado usando Memória de Chat do Postgres
para que os LLMs retenham o histórico do chat. O Agente de IA
também interage com a Loja Vetorial Qdrant
para RAGs. Finalmente, a resposta da IA é enviada de volta através do nó Responder ao Webhook
.
Teste uma pergunta: “Quais chips foram mencionados?” Como você pode ver, mostra uma sequência passo a passo do nó Agente de IA
em ação, processando através de todos os serviços previamente provisionados.
Ótimo! O sistema chatbot de IA está funcionando. No entanto, como expliquei anteriormente, e se eu quisesse chamar esse sistema de fora do serviço N8N? Para fazer isso, clique no nó Webhook
e copie a URL de produção para uso posterior. Voltarei para explicar como o serviço N8N é chamado usando esta URL.
Comentários sobre o N8N
N8N é ótimo para aqueles que desejam prototipar rapidamente sem escrever muito código. Seus extensos templates de fluxo de trabalho fornecem um ponto de partida decente. Posso imaginar que até pessoas com pouca experiência em codificação consigam conectar algumas APIs de terceiros para criar um fluxo de trabalho Agente. No entanto, enquanto o N8N parece ser uma ferramenta de low-code, seu princípio de design ainda gira em torno de chamadas de API REST. Por essa razão, eu sugeriria que usuários sem muito conhecimento de REST API dediquem algum tempo para entender o básico. Isso ajudará você a apreciar e entender como diferentes aplicações se integram com LLMs e por que funcionam juntas da maneira que o fazem. Além disso, às vezes, se você quiser fazer algo simples, como alterar o prompt do sistema do LLM, você precisará ir até os nós e atualizar o prompt lá, o que pode ser desafiador se você não souber onde encontrar a opção.
Open-WebUI
Outra solução de low-code que explorei é o Open-WebUI. Sua interface de usuário chama minha atenção porque se assemelha ao design de chat da OpenAI, tornando-a intuitiva e fácil de usar. Esta biblioteca é de código aberto e auto-hospedada, oferecendo flexibilidade e controle sobre seus projetos.
Ela suporta várias bibliotecas LLM auto-hospedadas, incluindo Ollama, e também funciona com APIs compatíveis com OpenAI. Além disso, possui um mecanismo de inferência embutido para RAGs.
Pipeline Open-WebUI
Siga as instruções do site oficial do Open-WebUI. Você pode instalá-lo usando Docker, uv
ou pip
, embora uv
seja fortemente recomendado segundo o guia. Após a instalação do pacote, inicie o servidor e você poderá acessar o Open-WebUI na porta hospedada localmente, http://localhost:8080
. Se você tiver o Ollama instalado, o Open-WebUI detectará automaticamente os modelos de Ollama baixados e permitirá que você escolha um para chat. Aqui, forneci uma captura de tela do Open-WebUI rodando com deepseek-r1:14b
hospedado localmente pelo Ollama.
open-webui serve
Além das funcionalidades básicas de chat, o recurso Pipelines do Open WebUI é uma estrutura flexível que permite aos usuários criar fluxos de trabalho modulares para aprimorar e personalizar as capacidades da plataforma. Esses fluxos de trabalho podem interceptar, processar e modificar dados (geralmente mensagens de texto de chat) à medida que se movem pelo sistema, habilitando uma variedade de funcionalidades. Um dos principais componentes dos Pipelines são os Filtros, onde ele atua como moderadores de entrada de chat antes que a entrada possa alcançar o LLM ou atua como barreiras de saída antes que a saída possa chegar aos usuários.
Para usar o pipeline, primeiro clone o repositório do Github do Pipeline para seu disco local. Vá até a raiz do repositório e execute o script de shell para lançar o pipeline.
sh ./start.sh
Plugin de terceiros via API OpenAI
O guia de instalação detalhado para o Pipeline está aqui. Em seguida, você precisa estabelecer uma conexão entre o Open-WebUI e o módulo Pipeline usando a conexão da API OpenAI. Como iniciei o Pipeline com um ambiente Conda, o servidor do Pipeline está hospedado localmente em http://localhost:9099
. Para conectá-lo, vá para Configurações e Conexões no Open-WebUI e insira o endereço do host local como a URL da API OpenAI. A chave da API é fornecida no README.
Depois disso, você deve ver os Pipelines disponíveis quando clicar em Pipelines nas Configurações.
Os Pipelines são plugins que podem executar código arbitrário. Portanto, você deve usar somente o código-fonte que confia!
Filtro de mensagens tóxicas Pipeline
Para esta demonstração, instalarei um filtro de mensagens tóxicas, usando um dos exemplos de Pipelines.
A classe Pipeline
requer um objeto da classe Valves
, que actua como um botão para os usuários configurarem o Pipeline. Para um filtro de toxicidade, os botões são atributos pipelines
e priority
, onde o primeiro se refere a quais LLMs o filtro de toxicidade se aplica, e o último determina a prioridade deste filtro. A filtragem real acontece na função inlet
, onde o body
representa a mensagem do usuário. Com base em se uma mensagem é detectada como tóxica, uma operação pode ser aplicada de acordo.
from typing import List, Optional from pydantic import BaseModel from detoxify import Detoxify class Pipeline: class Valves(BaseModel): pipelines: List[str] = [] # Quais modelos LLM você está aplicando? priority: int = 0 def __init__(self): self.type = "filter" self.name = "Filtro Detoxify" pass async def on_startup(self): # Carregar o modelo de toxicidade pass async def inlet(self, body: dict, user: Optional[dict] = None) -> dict: # Este filtro é aplicado aos dados do formulário antes de ser enviado para a API OpenAI. pass
Vamos ver como o Filtro Detoxify funciona. Digitei intencionalmente uma palavra ofensiva no chatbot. O filtro a detectou e sinalizou com uma mensagem dizendo “Mensagem tóxica detectada”.
Como você pode ver, o código do plugin de terceiros também pode incluir frameworks populares, como RAGs, permitindo que LLMs busquem e usem contexto de bancos de dados ou outras fontes de dados. O repositório Pipelines fornece vários exemplos de código introdutórios que se integram com bibliotecas de RAGs de código aberto populares, incluindo Haystack, LlamaIndex, etc.
Finalmente, também se integra a outras bibliotecas de low-code populares, incluindo Dify e N8N!
Comentários sobre o Open-WebUI
Com base no que aprendi e na minha experiência pessoal, o Open-WebUI é mais amigável para desenvolvedores porque, como desenvolvedor, posso trabalhar diretamente com o código do plugin de terceiros, dando controle total sobre o fluxo de trabalho Agente usando código. Comparado ao N8N, que foca em uma abordagem baseada na interface do usuário, com arrastar e soltar, o Pipeline do Open-WebUI parece menos uma caixa-preta e é mais flexível e extensível, facilitando a integração com outros plugins via conexões da API OpenAI.
Integração do N8N e Open-WebUI
Lembre-se no começo quando construímos um sistema de chatbot de IA usando N8N? Existem alguns plugins Pipelines existentes que você pode escolher na comunidade do Open-WebUI para chamar o serviço N8N. Com isso, você agora pode chamar diretamente o sistema implantado no N8N de dentro do Open-WebUI, conforme mostrado abaixo.
Como explicado anteriormente, uma vez que o serviço N8N é executado como um contêiner Docker implantado com sua porta sendo encaminhada para 5678. A URL do serviço N8N deve ser (ou seja, o link da URL de produção que copiei anteriormente, mas substituindo localhost
pelo nome do contêiner, n8n
): http://n8n:5678/webhook-test/n8n_ai_chatbot. E usando o nó Webhook
da seção anterior, o serviço Open-WebUI pode chamar o sistema de chatbot de IA hospedado no N8N, como mostrado abaixo.
Pensamento Final
Como um profissional de Machine Learning, enquanto o N8N oferece uma abordagem limpa e fácil de arrastar e soltar para criar agentes de IA, eu ainda prefiro usar os Pipelines no Open-WebUI porque posso controlar e entender o fluxo de trabalho através do código. Dito isso, o N8N merece crédito por tornar a criação de agentes de IA possível com uma codificação mínima. No entanto, para personalizar nós, você ainda precisa entender REST APIs e às vezes escrever JavaScript em sua interface de usuário de nós. No final das contas, esse é um compromisso que você tem que decidir por si mesmo:
No N8N, você troca facilidade de início por uma personalização mais difícil.
Com o Open WebUI, você troca facilidade de personalização por uma curva de aprendizado mais acentuada para começar.
Conclusão
Neste post do blog, demonstrei que N8N e Open-WebUI oferecem duas abordagens distintas para construir e implantar fluxos de trabalho Agentes. O N8N se destaca em fornecer uma interface de low-code e arrastar e soltar, facilitando a prototipagem de agentes de IA e a integração de vários serviços. No entanto, a personalização pode ainda exigir conhecimento de API REST e scripting em JavaScript.
Por outro lado, o Open-WebUI requer mais codificação, oferecendo controle sobre o fluxo de trabalho Agente. Seus Pipelines possibilitam a execução direta de plugins, tornando-o adaptável e extensível. No entanto, essa flexibilidade vem com uma curva de aprendizado mais acentuada em comparação com a abordagem do N8N.
Em última análise, a escolha entre N8N e Open-WebUI depende da sua preferência. Ambas as plataformas, quando combinadas, oferecem uma abordagem equilibrada, permitindo que os usuários construam sistemas de IA Agentes de forma eficiente. Espero que você ache minha experiência e opinião pertinentes e sinta-se à vontade para entrar em contato ou comentar – estou ansioso para aprender com sua experiência também! 🙂
Referências
https://www.youtube.com/watch?v=E2GIZrsDvuM
https://blog.n8n.io/rag-chatbot/
Compartilhe
Publicar comentário