AnythingLLM: RAG pronto para produção em ambiente local
O AnythingLLM (Mintplex Labs) é uma plataforma RAG de código aberto que pode ser implantada em poucos minutos via Docker e transforma um backend Ollama local em um assistente documental corporativo. Enquanto um RAG desenvolvido por conta própria exige integrar LlamaIndex + Chroma + uma interface, o AnythingLLM entrega a stack completa: workspaces isolados, suporte a múltiplos usuários, agentes integrados e API REST. Este tutorial de RAG com AnythingLLM mostra a instalação completa via Docker, a conexão com Ollama, a criação de workspaces, os agentes e a exposição da API para suas aplicações.
#Por que AnythingLLM?
AnythingLLM ocupa um nicho específico no ecossistema RAG local: tem escolhas de projeto mais definidas que o Open WebUI na parte documental, é mais simples que um script LlamaIndex feito em casa e mais pronto para produção que uma demonstração Streamlit. O projeto é open source (MIT) e mantido pela Mintplex Labs, uma equipe que faz commits continuamente desde 2023.
- Workspaces isolados
- Cada workspace tem seu próprio corpus de documentos, seu próprio LLM, seus próprios embeddings e seu próprio prompt de sistema. Nunca se mistura o RAG jurídico com o RAG de suporte ao cliente.
- Multiusuário nativo
- Autenticação, papéis (admin / gerente / usuário), permissões por workspace. Não é necessário usar reverse proxy + autenticação básica como no RAG Python bruto.
- Backends LLM intercambiáveis
- Ollama, LM Studio, servidor llama.cpp, vLLM, além das APIs de nuvem (OpenAI, Anthropic, etc.). É possível mudar o motor sem alterar os documentos indexados.
- Agentes integrados
- Web scraping, execução de SQL, cálculos, pesquisa web, salvamento de documentos — invocáveis com @agent no chat. Não é necessário colocar LangChain por cima.
- API REST nativa
- Um endpoint /api/v1/workspace/{slug}/chat permite conectar qualquer aplicação a um workspace específico. Formato de resposta estável e documentado.
#Pré-requisitos
Seus documentos, sua IA: um RAG local confiável para seus PDFs, notas e e-mails — sem enviar nada para a nuvem.
- Espaço online vitalício
- PDF + arquivos
- Atualizações vitalícias
- Docker
- Docker Desktop no Mac/Windows ou Docker Engine no Linux. Compose não é obrigatório — um comando docker run é suficiente para iniciar.
- Ollama instalado e funcionando
- O daemon deve responder em http://localhost:11434. Verifique com o comando ollama list. Se Ollama ainda não estiver instalado, instale-o antes — é o backend padrão deste tutorial.
- Um modelo LLM Ollama
- No mínimo, um modelo de 8-9B como qwen3.5:9b (256k ctx, visão) ou granite4.2:8b. Para obter qualidade em RAG em francês, optar por mistral-small (24B) ou qwen3.8:27b se a VRAM permitir.
- Um modelo de embeddings
- nomic-embed-text (padrão) ou bge-m3 para uso multilíngue de melhor qualidade. Baixar com ollama pull nomic-embed-text.
- RAM / VRAM
- No mínimo 8 GB de RAM para o contêiner; 16 GB para funcionar com folga. Quanto à GPU, depende do modelo Ollama escolhido (≈6-7 GB para um 9B Q4, ≈14 GB para um 24B Q4).
- 4 GB de espaço em disco
- Para o contêiner, a base SQLite interna e a base vetorial (LanceDB por padrão). Aumentar conforme o volume de documentos.
#1. Instalação do Docker
A imagem oficial está publicada no Docker Hub com o nome mintplexlabs/anythingllm. A Mintplex mantém tags estáveis (latest, render) e a imagem inclui tudo: Node.js, o servidor de API, o frontend, LanceDB como banco de dados vetorial e o worker de coleta.
- 01Criar uma pasta de armazenamentoO AnythingLLM armazena tudo de forma persistente (configurações, vetores, documentos) em um volume. Crie uma pasta dedicada no host para não perder nada durante uma atualização da imagem.
- 02Iniciar o contêinerO comando abaixo monta o diretório de armazenamento, expõe a porta 3001 e ativa SYS_ADMIN (necessário para alguns scrapers internos renderizarem PDFs e páginas web).
- 03Abrir a UIApós a inicialização do contêiner, a interface fica disponível em http://localhost:3001. Na primeira execução, um assistente de configuração orienta você na definição da senha de administrador e na configuração do backend LLM.
#2. Conectar Ollama como backend
No primeiro acesso a http://localhost:3001, o AnythingLLM inicia uma configuração guiada que solicita o LLM Provider, o modelo de embeddings, a base vetorial e a criação da conta de administrador. A configuração também pode ser feita posteriormente em Settings.
- 01LLM Provider → OllamaSelecione Ollama na lista. Insira a URL base: http://host.docker.internal:11434 (Mac/Windows) ou http://172.17.0.1:11434 (por padrão no Linux).
- 02Escolher o modelo de chatO menu suspenso lista seus modelos Ollama. Escolha o LLM principal (por exemplo: mistral-small (24B) para um bom equilíbrio entre qualidade e VRAM em francês, ou qwen3.5:9b se a VRAM for mais limitada). Ajuste o tamanho da janela de contexto para 8192 ou 16384, se o modelo o suportar.
- 03Embedding Provider → OllamaO mesmo backend para os embeddings, ou escolher Native (modelo local integrado) se você quiser evitar carregar um modelo de embeddings no Ollama. Para usar o AnythingLLM em francês, nomic-embed-text dá conta do recado; bge-m3 (via Ollama) oferece resultados melhores.
- 04Vector DatabaseMantenha o LanceDB como opção padrão. É um banco de dados embarcado, sem dependências externas, com bom desempenho até várias centenas de milhares de chunks. Se você já gerencia Qdrant ou Chroma em outro ambiente, pode configurá-los aqui.
#3. Workspaces, documentos e embeddings
Um workspace é a unidade fundamental do AnythingLLM. Ele agrupa um corpus documental, um LLM, parâmetros de chat e conversas associadas. Geralmente, cria-se um workspace por área: Jurídico, Suporte, RH, Monitoramento tecnológico.
- 01Criar um workspaceBarra lateral esquerda → New Workspace. Dê um nome claro (ex.: "contratos-2026"). O slug é gerado automaticamente e será usado na URL da API.
- 02Enviar documentosClique no ícone de upload no workspace. O AnythingLLM aceita PDF, DOCX, TXT, MD, CSV, EPUB e muito mais. Também é possível apontar para uma URL web ou um repositório GitHub — um scraper interno recupera o conteúdo.
- 03Move to Workspace + EmbedOs arquivos carregados vão primeiro para o Document Picker (área temporária). Selecione os que deseja indexar e depois use Move to Workspace. O AnythingLLM divide os arquivos em trechos, calcula os embeddings via Ollama e os armazena no LanceDB.
- 04Configurar o prompt de sistemaWorkspace settings → Chat Settings → Prompt. É aqui que se define o papel ("Você é um assistente jurídico. Sempre cite o artigo exato do contrato"). O top-K da recuperação (Document Similarity Threshold) também é ajustado aqui.
- Tamanho do chunk
- Por padrão, 1000 caracteres com 20 de sobreposição. Para contratos jurídicos em que cada cláusula importa, reduzir para 500. Para documentação técnica com blocos de código, aumentar para 1500.
- Modelo de embedding
- nomic-embed-text (768 dimensões) é rápido, mas tem desempenho mediano em francês. bge-m3 (1024 dimensões, multilíngue) ganha 10-15% de precisão em conteúdo francês. mxbai-embed-large é uma boa opção intermediária.
- Modo chat vs query
- Chat utiliza o histórico da conversa + RAG. Query usa estritamente RAG: se não houver nenhuma correspondência nos documentos, o LLM se recusa a responder. Query é a configuração adequada para usos em que a alucinação é proibida.
#4. Agentes integrados
Além do RAG estrito, o AnythingLLM inclui um sistema de agentes: basta chamar @agent no chat e o LLM poderá usar habilidades (ferramentas) para buscar informações fora da base documental. Não é necessário usar LangChain nem escrever chamadas de ferramenta: está integrado.
- web-browsing
- O agente abre uma URL e lê a página (o DOM renderizado, não apenas o HTML bruto). Útil para fazer o assistente responder sobre informações que não estão no RAG.
- web-scraping
- Variante: extrai o conteúdo de uma página e o adiciona como documento ao workspace. Útil para enriquecer o corpus conforme a necessidade.
- save-document
- O agente gera um documento (resumo, síntese) e o salva no workspace. Útil para fluxos de trabalho como 'ler 10 artigos → produzir uma anotação'.
- sql-connector
- Conecte um banco de dados PostgreSQL/MySQL e o agente poderá escrever e executar consultas SQL para responder a perguntas analíticas. Naturalmente, use uma conta SQL com acesso somente de leitura.
- rag-memory
- Memória de longo prazo entre conversas. O agente pode salvar fatos que poderá recuperar em sessões futuras.
#5. Expor a API
Para conectar o AnythingLLM às suas aplicações (chatbot interno, plugin Slack, integração de negócios), a API REST é a interface canônica. Cada workspace se torna um endpoint com escopo para seu corpus.
- 01Gerar uma chave de APISettings → API Keys → Generate New API Key. Anote a chave, pois ela é exibida apenas uma vez. Você pode criar várias, por exemplo, uma por aplicação cliente, e revogá-las individualmente.
- 02Identificar o slug do workspaceEle fica visível na URL quando você está no workspace: .../workspace/contrats-2026 → slug = contrats-2026.
- 03Testar com curlO endpoint principal é POST /api/v1/workspace/{slug}/chat. Cabeçalho Authorization: Bearer YOUR_KEY, corpo JSON com message e mode (chat ou query).
#Solução de problemas
- "Could not reach Ollama at ..."
- Erro mais comum. Verifique a URL: de dentro do contêiner Docker, localhost não aponta para a máquina hospedeira. Use host.docker.internal no Mac/Win, o IP da bridge ou --network host no Linux.
- Embedding muito lento
- O modelo de embeddings roda na CPU por padrão se você não tiver baixado o modelo no Ollama. Force o uso do Ollama como provedor de embeddings e verifique ollama ps durante a indexação para ver a GPU trabalhando.
- O RAG não encontra um trecho evidente
- Três causas comuns: blocos muito grandes (mude de 1000 para 500 caracteres), modelo de embeddings fraco em francês (mude para bge-m3) ou Document Similarity Threshold muito restritivo nas configurações do workspace.
- Agente entra em loop na chamada de ferramenta
- O modelo não é forte o suficiente. Mude para glm-4.7-flash, qwen3.8:27b se possível, ou mistral-small. Evite modelos muito pequenos (2-3B) sem fine-tuning para uso de ferramentas em agentes.
- Contêiner encerrado após algumas horas
- Erro OOM no kernel: o Docker não tem memória suficiente alocada. No Docker Desktop, aumente o limite de RAM para 8–16 GB (Settings → Resources).
- Atualização da imagem
- docker pull mintplexlabs/anythingllm:latest, depois docker rm -f anythingllm e execute novamente o run com os mesmos volumes. Os dados em $HOME/anythingllm são preservados.
#Para se aprofundar
De acordo com a direção que você quer seguir:
- Comparar AnythingLLM com as alternativas sem código
- « RAG local com Ollama sem programar (Open WebUI, AnythingLLM) » apresenta uma comparação direta com o Open WebUI usando o mesmo backend Ollama.
- Otimizar os embeddings FR
- « Os melhores modelos de embeddings FR » compara bge-m3, Solon, E5 e fornece as configurações corretas para AnythingLLM.
- Avançar mais na stack de produção
- « Implantar um LLM em produção com Docker Compose » mostra como combinar o AnythingLLM com um proxy reverso Traefik, Qdrant externo e backups automatizados.
Um comentário, um erro ou uma observação? Avise-nos; isso ajuda a melhorar o guia para todos.