Curso
Uma dúvida comum no universo de IA autogerenciada é como conversar com documentos privados sem enviá-los para uma API na nuvem.
AnythingLLM é uma resposta popular. Ele cuida de tudo (upload de documentos, embedding, busca e chat) em uma única interface e se conecta a uma ampla variedade de provedores de LLM. Assim, você cria fluxos de IA privados sem depender de serviços em nuvem.
Neste guia, vou explicar o que é o AnythingLLM, detalhar sua arquitetura, mostrar como instalar com Docker e Ollama, e demonstrar um pipeline de Retrieval-Augmented Generation (RAG) funcionando. Também vou compará-lo com Open WebUI e ChatGPT.
O que é o AnythingLLM?
AnythingLLM é um aplicativo open source criado pela Mintplex Labs sob a licença MIT. Tem uma comunidade ativa no GitHub, lançamentos frequentes e é amplamente usado no ecossistema de IA autogerenciada.
O que ele faz: transforma seus documentos em contexto que um large language model (LLM) pode usar durante as conversas. Você faz upload de arquivos, o sistema processa e armazena, e então o LLM responde com base nos seus dados. O projeto cresceu rápido, com comunidade ativa no Discord e atualizações mensais que adicionam novos provedores e recursos.
Duas coisas importantes desde já. Primeiro: AnythingLLM não é um modelo. Ele é uma ponte para provedores externos de LLM, sejam locais (como o Ollama) ou na nuvem (como OpenAI ou Anthropic).
Segundo: a plataforma organiza tudo em workspaces. Pense neles como salas separadas para projetos diferentes. Cada workspace tem seus próprios documentos e conversas, que ficam isolados a menos que você configure para compartilhar.

Interface do workspace do AnythingLLM com documentos. Imagem do autor.
AnythingLLM no desktop vs. Docker
O app para desktop (macOS, Windows, Linux) é para um único usuário rodando tudo localmente. Vem com engine de LLM embutido, embedder baseado em CPU e LanceDB incluído. Instalação em um clique, sem configuração.
A versão Docker é feita para times e servidores. Ela adiciona controle de acesso com papéis de Admin, Manager e Default, além de widgets de chat incorporáveis em sites e white-label. Se você precisa de acesso em equipe ou widgets de chat públicos, Docker é a sua única opção.
|
Recurso |
Desktop |
Docker |
|
Suporte multiusuário |
Não |
Sim (papeis Admin, Manager, Default) |
|
Engine de LLM embutido |
Sim |
Não (conecta a provedores externos) |
|
Widgets de chat incorporáveis |
Não |
Sim |
|
White-label |
Não |
Sim |
|
Complexidade de setup |
Instalação em um clique |
Requer conhecimento de Docker |
Principais recursos do AnythingLLM
Agora que você já sabe o que é o AnythingLLM e como escolher entre Desktop e Docker, vamos ver os recursos que tornam a ferramenta útil para fluxos de IA baseados em documentos.
Ingestão de documentos
Funciona com PDF, DOCX, TXT, Markdown, CSV, XLSX, PPTX, HTML, mais de 50 tipos de arquivos de código e arquivos de áudio (usando transcrição Whisper). Você também pode puxar conteúdo direto de repositórios do GitHub, transcrições do YouTube, páginas do Confluence e sites usando o scraper embutido.
Banco de dados vetorial
O LanceDB já vem integrado e não requer configuração. Se precisar de recursos enterprise, dá para trocar para Chroma, Milvus, Pinecone, Qdrant, Weaviate, Zilliz, AstraDB ou PGVector.
Suporte a múltiplos LLMs
Suporta diversos provedores, incluindo Ollama, LM Studio, OpenAI, Anthropic, Azure OpenAI, Google Gemini, AWS Bedrock, Groq e DeepSeek. Você escolhe os modelos por workspace, então um workspace pode usar um modelo local do Ollama para dados sensíveis enquanto outro usa GPT-4o via OpenAI.
Agentes de IA
Digite @agent em qualquer chat para ativar o construtor de agentes no-code. Ele já traz habilidades para busca em documentos, sumarização e web scraping. O Agent Flows oferece um canvas visual para encadear chamadas de API, instruções para LLM e operações em arquivos. Também há suporte a Model Context Protocol (MCP) para conectar ferramentas externas.
Acesso via API
A API para desenvolvedores fica em /api/docs (documentação Swagger). Você pode gerenciar workspaces, incorporar documentos e enviar mensagens de chat programaticamente.
Como o AnythingLLM funciona (visão da arquitetura)
O app tem três partes: o frontend (React/ViteJS) oferece a interface com a qual você interage. O servidor (backend em Express) lida com as interações com LLM, o trabalho no banco vetorial e as requisições de API. Ele usa SQLite para armazenar a configuração. O collector é um serviço separado que faz o parsing e processa os documentos enviados. Quando você faz upload de um PDF, o collector extrai o texto, e então o servidor divide, faz o embedding e armazena.
O pipeline de RAG
O pipeline funciona em duas fases.
Ingestão: seus documentos vão para o collector, que extrai o texto. O servidor então divide esse texto em chunks (até 1.000 caracteres, com pequena sobreposição para manter contexto). Cada chunk é convertido em vetor pelo modelo de embedding e armazenado no banco vetorial. A pasta vector-cache/ reduz re-embeddings desnecessários em muitos casos.
Consulta: sua pergunta é convertida em vetor usando o mesmo modelo de embedding. Em seguida, o sistema busca os chunks mais semelhantes (geralmente de quatro a seis). Após filtrar por score de similaridade, o texto correspondente é adicionado ao prompt do LLM junto com sua pergunta e o histórico do chat. O LLM lê tudo isso (instruções do sistema, contexto recuperado, sua pergunta e mensagens anteriores) e gera a resposta.

Visão geral da arquitetura do pipeline RAG do AnythingLLM. Imagem do autor.
Instalando o AnythingLLM com Docker
Como você verá no FAQ, AnythingLLM é leve: cerca de 2 GB de RAM, CPU de 2 núcleos e uns 5 GB de storage. Rodar um LLM local junto dele exige mais (um modelo 7B normalmente precisa de 8 GB+ de RAM/VRAM). Para este tutorial, uso um modelo 3B que funciona em hardware limitado. Certifique-se de ter o Docker instalado e rodando antes de começar. No Windows, também é preciso WSL.
Passo 1: instale o Ollama e baixe os modelos
Baixe o Ollama em ollama.com/download e depois puxe um modelo de chat e um de embedding:
ollama pull llama3.2:3b
ollama pull nomic-embed-text
ollama serve
Eu uso llama3.2:3b porque roda bem em máquinas com VRAM limitada (como uma RTX 3050 com 6 GB). Para melhor qualidade, tente llama3.2:8b ou deepseek-r1:7b se o seu hardware permitir. Confira nosso guia sobre rodar LLMs localmente para mais opções de modelos.
Passo 2: crie o arquivo Docker Compose
mkdir anythingllm-setup && cd anythingllm-setup
touch .env
Crie o docker-compose.yml:
services:
anythingllm:
image: mintplexlabs/anythingllm:latest
container_name: anythingllm
ports:
- "3001:3001"
cap_add:
- SYS_ADMIN
volumes:
- anythingllm_storage:/app/server/storage
- ./.env:/app/server/.env
environment:
- STORAGE_DIR=/app/server/storage
extra_hosts:
- "host.docker.internal:host-gateway"
restart: unless-stopped
volumes:
anythingllm_storage:
Alguns pontos sobre essa configuração. A flag cap_add: SYS_ADMIN é necessária para o scraper web embutido em PuppeteerJS, que usa um Chromium em sandbox.
A linha extra_hosts resolve o problema de rede mais comum no Docker: permite que o contêiner acesse o Ollama rodando na máquina host. Sem isso, qualquer tentativa de conectar a localhost:11434 de dentro do contêiner vai falhar, pois contêineres Docker têm seu próprio namespace de rede.
Uso um volume nomeado do Docker (anythingllm_storage) em vez de bind mount para melhor compatibilidade entre plataformas, especialmente no Windows e macOS, onde permissões de bind mount podem dar dor de cabeça.
Passo 3: iniciar e configurar
Espere cerca de 30 segundos para o contêiner inicializar e abra http://localhost:3001. Você verá o assistente de primeira execução. Mas antes, rode este comando:
docker compose up -d

Assistente de setup inicial do AnythingLLM no Docker. Imagem do autor.
Durante o assistente, selecione Ollama como provedor de LLM e de embedding, defina a base URL como http://host.docker.internal:11434, escolha llama3.2:3b como modelo de chat e nomic-embed-text como embedder. Mantenha o LanceDB como banco vetorial padrão.
Para a alternativa Desktop, baixe o app em anythingllm.com. Ele já traz tudo pronto e funciona na hora, sem configuração. É ideal para uso pessoal, mas, como mencionado antes, não tem os recursos multiusuário e enterprise disponíveis no Docker.
Conectando provedores de LLM
Além do Ollama, você pode conectar provedores em nuvem pelas Configurações (como mencionado no FAQ 1, isso é útil se seu hardware for limitado).
OpenAI
Escolha OpenAI como provedor de LLM, insira sua chave de API de platform.openai.com e escolha um modelo (GPT-4o, GPT-4o-mini, etc.). Sua conta precisa ter billing configurado, senão não funciona (e a mensagem de erro não é clara).
Anthropic
Insira sua chave de console.anthropic.com. Todos os modelos Claude funcionam para chat, mas a Anthropic não possui modelos de embedding, então você ainda precisa de um embedder separado, como o nomic-embed-text do Ollama.
Configuração do Ollama
Se você configurou o Ollama durante a instalação como mostrado acima, já está pronto. Para outros cenários, use http://host.docker.internal:11434 no Windows/macOS ou http://172.17.0.1:11434 no Linux. Se o Ollama estiver inacessível, defina OLLAMA_HOST=0.0.0.0:11434 antes de iniciá-lo.
Usando o AnythingLLM para chat com documentos
Clique em "New Workspace" na barra lateral e dê um nome. Envie arquivos pelo botão de upload na barra lateral ou arraste e solte.
O AnythingLLM oferece dois modos de documento. Attach (arrastar para o chat) coloca o texto completo na conversa, mas apenas naquela thread específica. O modelo vê tudo, porém você fica limitado pela capacidade de tokens. Embedding (a abordagem padrão de RAG) divide o documento em chunks, converte em vetores e armazena no workspace. Depois de incorporados, os documentos funcionam em todos os seus chats naquele workspace. Na maioria dos casos, embedding é a melhor escolha. Clique em "Move to Workspace" para iniciar o processo de embedding.
Ajustando a qualidade da busca
Digite sua pergunta e o sistema encontra automaticamente os chunks relevantes e os envia para o LLM. Se as respostas não estiverem boas, ajuste estas configurações:
Limite de similaridade
Como dito no FAQ 5, comece com "No Restriction" se estiver com problemas e depois aumente gradualmente para filtrar ruído.
Máximo de trechos no contexto
O padrão é de quatro a seis chunks. Suba para 10 ou 12 em modelos com janelas de contexto grandes, como Claude.
Preferência de busca
"Accuracy Optimized" no LanceDB ativa reranking, o que melhora os resultados mas pode aumentar a latência dependendo do modelo e do hardware.
Fixar documentos
Fixe documentos críticos para pular o chunking. O texto completo é adicionado a toda consulta (desde que caiba no limite de tokens).
AnythingLLM vs. Open WebUI
Ambas as ferramentas são ótimas, mas foram criadas para públicos diferentes.
|
Dimensão |
AnythingLLM |
Open WebUI |
|
Público principal |
Usuários de negócios, times pequenos |
Desenvolvedores, usuários técnicos |
|
App para desktop |
Sim (macOS, Windows, Linux) |
Não (apenas web) |
|
Complexidade de setup |
Desktop: um clique; Docker: direto |
Requer Docker ou setup de servidor |
|
Implementação de RAG |
Nativa, com suporte a múltiplos DBs vetoriais e reranking |
RAG extensivo, extensibilidade via plugins |
|
Multiusuário |
Somente no Docker; três papéis RBAC |
Recursos de colaboração limitados |
|
Ecossistema de plugins |
Em crescimento; skills customizadas via Node.js |
Mais maduro e amplo |
|
Licença |
MIT |
BSD-3-Clause modificado com proteção de marca desde a v0.6.6 |
AnythingLLM costuma atender times que priorizam gestão de workspaces e widgets incorporáveis, enquanto o Open WebUI costuma atender usuários que querem um ecossistema de plugins maior e mais extensibilidade voltada a desenvolvedores. Alguns times usam ambos: Open WebUI para devs que querem controle fino e AnythingLLM para usuários de negócio que precisam de workspaces rápidos de documentos.
AnythingLLM vs. ChatGPT
Essa comparação é sobre prioridades, não sobre qual féramenta é "melhor".
|
Dimensão |
AnythingLLM |
ChatGPT |
|
Privacidade dos dados |
Total controle com modelos locais |
Dados enviados para servidores da OpenAI |
|
Custo |
Grátis (self-hosted); nuvem a partir de US$ 50/mês |
Plano grátis; Plus US$ 20/mês; Pro US$ 200/mês |
|
Customização |
Qualquer LLM, embedder, DB vetorial, agentes |
Limitado aos modelos da OpenAI |
|
Capacidade offline |
Sim (com modelos locais) |
Não |
|
Esforço de setup |
Requer instalação |
Sem setup, via navegador |
|
Chat com documentos |
Controle total do RAG (limiares, chunking, reranking) |
Upload de arquivos com limites de uso |
ChatGPT prioriza uma experiência totalmente hospedada e alta qualidade padrão de modelo, enquanto o AnythingLLM prioriza privacidade, flexibilidade e controle das configurações de RAG. Você também pode conectar o GPT-4o ao AnythingLLM via API da OpenAI. Assim, você tem a qualidade do ChatGPT com os recursos de workspace e RAG do AnythingLLM.
Casos de uso do AnythingLLM
Onde o AnythingLLM funciona melhor:
Bases de conhecimento internas
Colaboradores podem tirar dúvidas sobre documentos da empresa sem vasculhar pastas. Envie políticas, procedimentos e documentação — e permita buscas em linguagem natural.
Fluxos de pesquisa
Acadêmicos podem pesquisar centenas de artigos instantaneamente. Incorpore sua biblioteca de pesquisa e encontre evidências relevantes sem depender de palavras-chave manuais.
Implantações privadas em empresas
Saúde, finanças e jurídico podem usar IA mantendo todos os dados em servidores próprios. Comum em setores regulados onde os dados precisam ficar on-premises.
Testes para desenvolvedores
Experimente diferentes LLMs (Ollama, OpenAI, Claude) nos mesmos documentos alternando os modelos por workspace. Sem mudanças na infraestrutura.
Widgets de chat para clientes
Incorpore um chat no seu site usando Docker. Configure allowlists de domínio e limites por sessão para uso público.
Transcrição de reuniões
O recurso Meeting Assistant funciona como ferramentas de anotações na nuvem, mas roda localmente. Requer cerca de 16 GB de RAM para operar com fluidez.
Limitações
Como já discutimos, Desktop e Docker têm recursos diferentes, o que pode confundir novos usuários.
A qualidade do RAG exige ajuste fino (cobri as configurações principais) porque a busca por similaridade é baseada em matemática e não entende de fato o significado.
O sistema de plugins é menor que o do Open WebUI, e criar skills de agentes personalizados requer conhecimento de Node.js.
Por fim, não há fine-tuning nativo. A personalização acontece via prompts de sistema, temperatura e limites de tokens.
Segurança e privacidade no AnythingLLM
A execução local mantém todos os dados no seu dispositivo. (Trago mais detalhes no terceiro FAQ abaixo.) Ao usar provedores em nuvem, apenas os prompts e o contexto recuperado são enviados durante a inferência. Vetores e embeddings ficam no seu servidor. Seja criterioso ao escolher quais workspaces usam modelos na nuvem versus locais.
A versão Docker inclui Simple SSO via SIMPLE_SSO_ENABLED, que cria tokens de acesso temporários. Chaves de API dão acesso total sem permissões granulares, então trate-as como senhas de admin e troque-as regularmente. Se você expor o AnythingLLM na internet, coloque um Nginx como reverse proxy com SSL na frente (o app não lida com HTTPS sozinho). A telemetria pode ser desativada com DISABLE_TELEMETRY=true no seu arquivo .env.
Conclusão
AnythingLLM resolve um problema real no universo de IA autogerenciada. Ele oferece uma interface para conversar com seus documentos, conecta a praticamente qualquer provedor de LLM e mantém seus dados sob seu controle. Como discutido, escolha Desktop para uso pessoal ou Docker para implantações em equipe.
Como qualquer ferramenta, há trade-offs. A qualidade do RAG depende da configuração, e as diferenças entre Desktop/Docker podem confundir quem está começando.
Como próximo passo, confira nossa trilha AI Fundamentals ou o tutorial sobre construir IA local com Docker e n8n.
Sou engenheiro de dados e criador de comunidades que trabalha com pipelines de dados, nuvem e ferramentas de IA, além de escrever tutoriais práticos e de alto impacto para o DataCamp e desenvolvedores iniciantes.
FAQs
Posso rodar isso no meu notebook antigo sem GPU?
Sim! O AnythingLLM em si é leve: cerca de 2 GB de RAM, CPU de 2 núcleos e uns 5 GB de armazenamento. A parte pesada é rodar o LLM localmente via Ollama. Se seu hardware é limitado, conecte a um provedor em nuvem como OpenAI ou Groq. Você mantém os mesmos recursos de workspace e RAG, mas a inferência ocorre na nuvem. Em outras palavras, o AnythingLLM gerencia o fluxo de trabalho, e você escolhe se o modelo roda localmente ou na nuvem.
O que acontece se eu trocar meu banco de dados vetorial depois?
Planeje isso com antecedência. Não há migração automática entre bancos vetoriais. Trocar de LanceDB para Pinecone significa reprocessar o embedding de todos os documentos. Seus arquivos originais ficam seguros, mas os vetores precisam ser regenerados. Nota prática: fique com o LanceDB, a menos que tenha uma necessidade enterprise específica. Ele costuma exigir pouca configuração e atende bem muitas implantações de times pequenos.
Meus dados ficam realmente privados se eu usar a OpenAI como LLM?
Ponto-chave: seus documentos e embeddings nunca saem do seu servidor. Mas quando você faz perguntas, os trechos de texto recuperados e seu prompt são enviados para a API da OpenAI para inferência. Para dados realmente sensíveis, use o Ollama. Aí tudo fica local. Para documentos de trabalho em geral, AnythingLLM com OpenAI ainda é mais privado do que enviar arquivos diretamente ao ChatGPT.
Meu time pode compartilhar uma única instalação do AnythingLLM?
Sim, mas somente com a versão Docker. Ela suporta multiusuário com três papéis: Admin, Manager e Default. O app Desktop é apenas para um usuário. Importante: o modo multiusuário é pensado como uma mudança de configuração em uma direção. Decida se precisa de acesso em equipe antes de habilitar.
Por que às vezes ele ignora meus documentos ao responder?
Geralmente por três motivos: limite de similaridade muito alto, perguntas vagas ou documentos em outro idioma com o embedder padrão em inglês. Correção rápida: tente "No Restriction" no limite primeiro. Se seus docs não estão em inglês, troque para um modelo de embedding multilíngue disponível no Ollama (por exemplo, algum da família e5) para resultados bem melhores.
