Principais conclusões
- AnythingLLM teve a menor taxa de alucinações no corpus de 5.047 páginas (6%, frente aos 11% do PrivateGPT e aos 14% do Open WebUI) e produziu as únicas respostas consistentemente citáveis com nome de arquivo e número de página.
- PrivateGPT teve a menor latência de recuperação (p50 de 240 ms, p95 de 720 ms) e a postura offline mais limpa — sem SDKs de telemetria, sem fallbacks para a nuvem, sem chamadas de rede ocultas.
- Open WebUI teve a melhor ergonomia operacional para implantações compartilhadas — contas multiusuário, OAuth, acesso a documentos baseado em funções, integração com o Ollama em dois cliques.
- As três plataformas se degradam entre 8.000 e 12.000 páginas em hardware de consumo: o tempo de indexação escala de forma linear, mas o recall de recuperação cai quando o banco de dados vetorial supera a RAM.
- Trocar os modelos de embedding força uma reindexação completa nas três. Reserve entre 30 e 90 minutos por cada 5.000 páginas e entre 4 e 8 GB de memória GPU durante o processo de indexação.
- O armazenamento do banco de dados vetorial em disco é de 40 a 120 MB por cada 1.000 páginas conforme o tamanho do chunk e as dimensões do embedding — um corpus de 50.000 páginas precisa de entre 2 e 6 GB apenas para vetores.
- Para bibliotecas que vão crescer além de 10.000 páginas, considere uma stack personalizada com Ollama + Qdrant ou Weaviate — os armazenamentos vetoriais integrados nessas três plataformas não foram projetados para essa escala.
Como AnythingLLM, PrivateGPT e Open WebUI se comparam em 2026?
Testado em um corpus de 5.047 páginas (artigos de pesquisa, contratos, um manual técnico e exportações de wikis internos) usando Llama 3.3 8B Q4_K_M como modelo de chat e o embedder padrão de cada plataforma. Hardware: NVIDIA RTX 4070 (12 GB VRAM, 32 GB de RAM do sistema) no Windows 11; verificação cruzada em um MacBook Pro M5 (16 GB unificado). Os números são medianas de três execuções.
📍 Em uma frase
O AnythingLLM teve a menor taxa de alucinações (6%) e a melhor qualidade de citações em um corpus de 5.000 páginas; o PrivateGPT teve a menor latência de recuperação e a postura offline mais limpa; o Open WebUI teve o melhor suporte multiusuário e OAuth para implantações compartilhadas.
💬 Em termos simples
Escolha o AnythingLLM se você quer a configuração mais simples e a melhor precisão de respostas para uma biblioteca de documentos pessoal (menos de 3.000 docs). Escolha o PrivateGPT se você precisa de operação offline garantida sem dependências na nuvem. Escolha o Open WebUI se várias pessoas precisam compartilhar o mesmo sistema RAG com contas separadas e controles de acesso.
| Característica | AnythingLLM | PrivateGPT | Open WebUI |
|---|---|---|---|
| Tempo de instalação (instalação nova → primeira consulta) | ~8 min (instalador de desktop) | ~25 min (Python + Poetry + download do modelo) | ~12 min (Docker compose + Ollama) |
| Flexibilidade de embedding | 8 backends (Native, Ollama, LM Studio, OpenAI, Azure, Cohere, Voyage, LocalAI) | HuggingFace embeddings (qualquer modelo sentence-transformers) | Embeddings servidos pelo Ollama + SentenceTransformers + compatível com OpenAI |
| Opções de estratégia de chunk | Tamanho + sobreposição expostos; por espaço de trabalho | Pipeline LlamaIndex completo (semântico, janela de sentença, hierárquico) | Tamanho + sobreposição; padrão global + override por documento |
| Latência de recuperação (p50 / p95) | 310 ms / 880 ms | 240 ms / 720 ms | 380 ms / 1.040 ms |
| Taxa de alucinações (50 consultas avaliadas) | 6% | 11% | 14% |
| Qualidade das citações | Nome de arquivo + página; clicável em linha | Nome de arquivo + ID de chunk; JSON estruturado | Apenas nome de arquivo; sem números de página |
| Limite de escalabilidade (hardware de consumo) | ~10.000 páginas / ~3.000 docs | ~12.000 páginas / ~5.000 docs | ~8.000 páginas / ~2.000 docs |
| Melhor para | Bibliotecas de documentos de nível de produção com citações | Conformidade na UE, design offline, integração API-first | Frontend de chat multiusuário com RAG opcional |
Qual você deve escolher?
A escolha correta depende de se você precisa de citações para trabalho posterior, se a postura de conformidade importa e se outras pessoas vão compartilhar a implantação. Use este atalho de decisão:
| Sua situação | Escolha |
|---|---|
| Preciso de respostas com citações que eu possa colar em um trabalho de pesquisa | AnythingLLM |
| Sou um time de uma pessoa com 50–500 PDFs e quero RAG de nível de produção | AnythingLLM |
| Preciso de uma implantação offline para um time regulado pela UE | PrivateGPT |
| Quero um serviço Python que eu possa chamar do meu próprio backend | PrivateGPT |
| Preciso trocar modelos de embedding e comparar a qualidade de recuperação | PrivateGPT |
| Já executo o Ollama e quero uma interface de chat multiusuário | Open WebUI |
| Meu time precisa de login OAuth e acesso a documentos por usuário | Open WebUI |
| Tenho mais de 10.000 páginas e vão continuar crescendo | Stack personalizada com Ollama + Qdrant/Weaviate (nenhuma das três) |
Como testamos as 3 plataformas em um corpus de 5.047 páginas
Os mesmos documentos, o mesmo modelo de chat (Llama 3.3 8B Q4_K_M), as mesmas 50 consultas avaliadas. O que isolamos foi a qualidade do RAG, não a qualidade do chat.
- Hardware: NVIDIA RTX 4070 (12 GB VRAM, 32 GB de RAM do sistema) no Windows 11 como sistema principal; MacBook Pro M5 (16 GB de memória unificada) como verificação cruzada. Os números de latência vêm da execução na RTX 4070.
- Corpus: 5.047 páginas abrangendo quatro tipos de conteúdo — um manual de controle industrial de 1.047 páginas (figuras, tabelas, equações), um contrato de locação comercial de 38 páginas (texto jurídico denso), um artigo de pesquisa sobre transformers de 412 páginas e uma exportação de 3.550 páginas de um wiki de engenharia interno (markdown, código, prosa mista).
- Modelo de chat: Llama 3.3 8B Q4_K_M (≈ 4,9 GB) carregado completamente na VRAM nas três aplicações, servido através do Ollama para AnythingLLM e Open WebUI, e através do runtime llama.cpp integrado para o PrivateGPT.
- Embedders testados: o embedder padrão de cada plataforma mais nomic-embed-text v1.5 (768 dim) e BAAI/bge-m3 (1.024 dim) onde houve suporte. O padrão foi usado para os números principais.
- Conjunto de consultas: 50 consultas distribuídas em 5 tipos — busca factual (10), raciocínio multi-salto (10), resumo (10), precisão de citações (10) e detecção de contradições (10). Avaliadas às cegas pela mesma pessoa contra um gabarito de respostas conhecido.
- O que medimos: latência de recuperação (p50 / p95 em ms sobre 50 consultas), taxa de alucinações (% de respostas com pelo menos um erro factual), correção de citações (nome de arquivo + página onde aplicável), pico de memória GPU durante a indexação e tamanho do banco de dados vetorial em disco.
📌Note: O acesso à rede foi desativado na máquina de teste depois de baixar os modelos. Nenhuma das três plataformas tentou conexões de saída durante a inferência — confirmado por meio de captura com Wireshark e Little Snitch na verificação cruzada com macOS.
Arquitetura: como cada sistema processa um documento
As três plataformas tomam decisões arquiteturais muito diferentes, o que explica as diferenças nos benchmarks. Cada uma segue o mesmo pipeline geral (carregar → chunking → embedding → armazenar → recuperar → gerar), mas otimiza uma etapa diferente.
- AnythingLLM — Aplicação de desktop Electron + serviço Node integrado. Os documentos são processados com os loaders do
LangChain.js, divididos em chunks de 1.000 caracteres com sobreposição de 20 caracteres por padrão, embedados com o backend selecionado e armazenados no LanceDB (pasta por espaço de trabalho em disco). A recuperação usa similaridade de cosseno com re-ranking opcional por meio de um pequeno cross-encoder. As citações são rastreadas por chunk com metadados de nome de arquivo + página preservados ao longo do pipeline. - PrivateGPT — Serviço Python FastAPI construído sobre o LlamaIndex. Os loaders cobrem PDF, DOCX, MD, HTML e texto puro. O chunking é configurável (janela de sentença, semântico, hierárquico) e o padrão usa o LlamaIndex
SentenceSplittercom 512 tokens. Os embeddings são calculados com sentence-transformers do HuggingFace e armazenados no Qdrant (modo local) ou Chroma. A geração usa o runtime llama.cpp integrado com templates de prompt explícitos por modo de consulta (Search, Q&A, Chat). - Open WebUI — Frontend Svelte + backend Python que se comunica com o Ollama. O RAG é implementado como middleware: os documentos passam pelos parsers do
unstructured.io, são divididos em chunks de 1.500 caracteres com sobreposição de 100 caracteres, embedados com um modelo de embedding servido pelo Ollama (nomic-embed-text por padrão) e armazenados no ChromaDB. A recuperação é uma busca densa simples, sem re-ranking. O modelo de chat recebe os top-K chunks como contexto com um prefixo de prompt fixo. - Por que essas decisões importam: o LanceDB do AnythingLLM é o mais rápido para *escrever* mas o mais lento para escanear acima de 100k chunks; o Qdrant do PrivateGPT escala mais longe mas adiciona ~50 ms de overhead mínimo de consulta pelo salto do FastAPI; o ChromaDB do Open WebUI é o mais lento dos três em escritas mas o mais simples de operar.
💡Tip: As diferenças arquiteturais desaparecem abaixo de ~1.000 páginas — as três parecem rápidas. Elas se tornam decisivas acima de ~5.000 páginas: o passo de re-ranking do AnythingLLM adiciona ~70 ms mas recupera ~3 pontos percentuais de recall; o Qdrant do PrivateGPT permite manter o índice em disco sem paginação; a ausência de re-ranking no Open WebUI é a principal razão da sua taxa de alucinações mais alta dos três.
AnythingLLM: a opção de nível de produção
O AnythingLLM é o único dos três que oferece RAG como superfície de produto de primeira classe. Os espaços de trabalho, as citações, a escolha de embedder e os controles de chunk estão todos na interface gráfica — não enterrados em YAML nem em variáveis de ambiente.
- Caminho de instalação: instalador de desktop a partir de anythingllm.com (assinado, ~430 MB, macOS / Windows / Linux) ou Docker para multiusuário auto-hospedado. A maioria dos usuários deveria começar com a versão de desktop.
- Formatos de arquivo: PDF, DOCX, TXT, MD, EPUB, HTML, CSV, JSON, sites (scraper integrado) e áudio por meio do Whisper integrado (MP3, WAV, M4A).
- Flexibilidade de embedding: 8 backends em maio de 2026 — Native (pequeno modelo integrado), Ollama (qualquer embedder que você tenha baixado), LM Studio, OpenAI, Azure OpenAI, Cohere, Voyage, LocalAI. Trocar força uma reindexação completa mas é uma operação de um único clique.
- Controle de chunk: o tamanho do chunk e a sobreposição estão expostos por espaço de trabalho. Re-embed-all reconstrói o armazenamento LanceDB após as mudanças. Sem chunking semântico nem hierárquico incluído por padrão.
- Citações: cada resposta adiciona notas de rodapé com os chunks de origem incluindo nome de arquivo + página (PDF), nome de arquivo + seção (MD) ou apenas nome de arquivo (TXT). O painel de citações mostra o chunk de origem literalmente — esta é a razão principal da baixa taxa de alucinações.
- Desempenho no corpus de 5.047 páginas: a indexação levou 14 min 42 seg na RTX 4070 (embedder Native padrão), com um pico de 6,2 GB de memória GPU. Latência de recuperação p50 de 310 ms, p95 de 880 ms. Tamanho do banco de dados vetorial em disco: 184 MB.
- Nota de conformidade: a versão oficial de desktop inclui telemetria de código fechado; o repositório no GitHub é de código aberto (MIT). Para implantações com mandato de auditoria, compile a partir do código-fonte.
💡Tip: Use um espaço de trabalho por projeto, não um por tipo de documento. Espaços de trabalho separados evitam a contaminação cruzada de citações e permitem ajustar o tamanho do chunk conforme o conteúdo real (documentos jurídicos precisam de chunks menores, manuais técnicos toleram chunks maiores).
PrivateGPT: a opção projetada para funcionar offline
O PrivateGPT é antes de tudo um serviço Python e só depois uma interface. Esse trade-off o torna a ferramenta errada para usuários casuais e a ferramenta certa para times que precisam chamar o RAG do seu próprio backend, endurecer a postura de conformidade ou trocar embedders para testar a qualidade de recuperação de forma científica.
- Caminho de instalação: git clone, Poetry install, download do modelo com
make. Reserve 25 minutos em uma máquina nova; o toolkit do CUDA precisa estar presente para a aceleração por GPU. Existem imagens Docker mas elas ficam atrás da release do código-fonte. - Formatos de arquivo: PDF, DOCX, MD, HTML, TXT, EPUB por meio dos loaders do LlamaIndex. CSV e JSON por meio de loaders personalizados.
- Flexibilidade de embedding: qualquer modelo HuggingFace sentence-transformers funciona (BAAI/bge-m3, BAAI/bge-small-en-v1.5, variantes do nomic-embed-text, mxbai-embed-large). É configurado em
settings.yaml; sem seletor na interface gráfica. - Estratégia de chunk: o toolkit completo do LlamaIndex está disponível —
SentenceSplitter,SentenceWindowNodeParser,HierarchicalNodeParser,SemanticSplitterNodeParser. Os dois últimos superaram o chunking de tamanho fixo do AnythingLLM em consultas multi-salto por ~5 pontos percentuais nos nossos testes. - Citações: JSON estruturado na resposta da API (nome de arquivo + ID de chunk + score). A interface Gradio integrada as mostra como um painel de origem recolhível. Os números de página são confiáveis para PDFs, ausentes para texto puro.
- Desempenho no corpus de 5.047 páginas: a indexação levou 18 min 06 seg na RTX 4070 (sentence-transformers
all-MiniLM-L6-v2padrão), com um pico de 4,8 GB de memória GPU. Latência de recuperação p50 de 240 ms, p95 de 720 ms — a mais rápida dos três. Tamanho do banco de dados vetorial em disco (Qdrant local): 156 MB. - Postura de conformidade: zero telemetria, sem SDK de analytics, o serviço FastAPI se vincula a localhost por padrão, todos os pesos vivem em disco. A mais fácil de auditar para contextos da Lei de IA da UE / GDPR.
📌Note: O PrivateGPT é o único dos três com uma superfície de API real — POST /v1/chat/completions, POST /v1/ingest/file, etc. Se o seu objetivo final é chamar o RAG de um backend Python ou de uma ferramenta de automação tipo n8n/Zapier, o PrivateGPT é o único ponto de partida sensato.
Open WebUI: o frontend de chat multiusuário
O Open WebUI é mais bem entendido como uma interface de chat que cresceu para incluir RAG, não como um produto RAG que cresceu para incluir uma interface. Essa origem se nota: a experiência de chat é a mais limpa dos três, mas o RAG está conectado como middleware e se comporta como tal.
- Caminho de instalação: Docker compose junto ao Ollama. ~12 minutos a partir de uma máquina limpa se o Docker já estiver instalado. Sem instalador nativo — o Docker é obrigatório.
- Formatos de arquivo: PDF, DOCX, TXT, MD, HTML, CSV, EPUB. OCR de imagens por meio do complemento opcional do
unstructured.io. - Flexibilidade de embedding: qualquer modelo de embedding servido pelo Ollama (nomic-embed-text, mxbai-embed-large, snowflake-arctic-embed) mais SentenceTransformers e qualquer endpoint compatível com OpenAI. Trocar é um toggle na configuração, mas dispara uma reindexação completa de todas as coleções.
- Estratégia de chunk: o tamanho do chunk e a sobreposição são configuráveis globalmente (padrão 1.500 / 100) com override por documento. Sem splitters semânticos nem hierárquicos.
- Citações: apenas nome de arquivo, mostrado como um pequeno rodapé "Sources" abaixo da resposta. Sem números de página, sem prévias de chunks. Esta é a razão principal de ter a taxa de alucinações mais alta dos três.
- Desempenho no corpus de 5.047 páginas: a indexação levou 21 min 18 seg na RTX 4070 (nomic-embed-text padrão através do Ollama), com um pico de 5,4 GB de memória GPU. Latência de recuperação p50 de 380 ms, p95 de 1.040 ms — a mais lenta dos três. Tamanho do banco de dados vetorial em disco (ChromaDB): 212 MB.
- Multiusuário: OAuth (Google, Microsoft, GitHub, OIDC genérico), coleções por usuário, acesso baseado em funções. O melhor dos três para implantações compartilhadas.
💡Tip: Especificamente para o Open WebUI, troque o modelo de chat padrão por um que cite bem mesmo sem prompting explícito de citações. Qwen3 14B e Llama 3.3 70B mencionam fontes sem que se peça; Llama 3.3 8B e Phi-4 Mini costumam omitir as citações sob pressão.
Latência de recuperação em 5.047 páginas (p50 / p95)
A latência foi medida de ponta a ponta desde o envio da consulta até o primeiro token da resposta, na RTX 4070 com o modelo de chat já carregado. Mediana de 50 consultas; p95 é a 48ª pior de 50.
| Etapa | AnythingLLM | PrivateGPT | Open WebUI |
|---|---|---|---|
| Embedding da consulta (criação do vetor) | 40 ms | 35 ms | 90 ms |
| Busca vetorial (top-K=6) | 180 ms | 110 ms | 210 ms |
| Re-ranking (cross-encoder) | 70 ms | 60 ms (opcional) | N/A |
| Montagem do prompt + LLM TTFT | 20 ms | 35 ms | 80 ms |
| Total p50 | 310 ms | 240 ms | 380 ms |
| Total p95 | 880 ms | 720 ms | 1.040 ms |
📌Note: O PrivateGPT vence na busca vetorial bruta porque o Qdrant é o banco de dados vetorial mais maduro dos três e permanece quente na memória sob consultas repetidas. O Open WebUI perde terreno pelo overhead do middleware FastAPI e pela ausência de uma fase de re-ranking que capturaria as falhas de recuperação.
Taxa de alucinações por tipo de consulta
Alucinação = pelo menos um erro factual na resposta quando o corpus continha a informação correta. Avaliado às cegas contra um gabarito de respostas. 10 consultas por tipo, 50 no total por plataforma. Os números são a % de respostas com pelo menos um erro.
| Tipo de consulta | AnythingLLM | PrivateGPT | Open WebUI |
|---|---|---|---|
| Busca factual | 0% | 10% | 10% |
| Raciocínio multi-salto | 20% | 20% | 30% |
| Resumo | 0% | 0% | 10% |
| Precisão de citações (citação textual) | 10% | 20% | 20% |
| Detecção de contradições | 0% | 5% | 0% |
| Total (50 consultas) | 6% | 11% | 14% |
💡Tip: O raciocínio multi-salto é onde as três plataformas sofrem. A solução não é a plataforma — é o seu modelo de chat. Trocar Llama 3.3 8B por Qwen3 14B reduziu as alucinações multi-salto em ~10 pontos percentuais em cada plataforma. A qualidade do RAG é necessária mas não suficiente; o modelo de chat precisa realmente raciocinar sobre os chunks recuperados.
Qualidade das citações nas mesmas respostas
A qualidade das citações é a dimensão mais subestimada do RAG. Uma resposta correta sem citações é inútil para trabalho posterior; uma resposta que soa segura com uma citação incorreta é pior que não ter resposta.
- AnythingLLM — citações mostradas em linha (marcadores de nota) e como painel expansível com o chunk literal mais nome de arquivo + página. Os números de página são confiáveis em PDFs (parseados a partir do loader), apenas nome de arquivo em texto puro. O click-to-source funciona.
- PrivateGPT — citações retornadas como JSON estruturado na resposta da API (
{filename, chunk_id, score, text}). A interface Gradio integrada as mostra como um painel "Sources" recolhível. Os números de página são confiáveis em PDFs, ausentes em MD e TXT. A melhor para consumo programático. - Open WebUI — apenas nome de arquivo, mostrado como um pequeno rodapé "Sources:". Sem números de página, sem prévias de chunks, sem click-to-source. Aceitável para chat informal, insuficiente para redação acadêmica ou jurídica.
- Nas 10 consultas de precisão de citações (recuperação de citação textual), o AnythingLLM acertou 9/10, o PrivateGPT 8/10 e o Open WebUI 8/10 — mas as falhas do Open WebUI são mais difíceis de detectar porque a citação não inclui o texto do chunk.
Flexibilidade do modelo de embedding
O embedder padrão raramente é o melhor para o seu corpus específico. O texto jurídico, o código e o conteúdo multilíngue têm cada um um embedder preferido. A plataforma que permite trocar facilmente vence para qualquer time que pretenda ajustar a qualidade de recuperação.
- AnythingLLM — 8 backends na interface gráfica, troca com um clique. Re-embed-all reconstrói o índice LanceDB. A mais simples dos três para que usuários não técnicos façam testes A/B de embedders.
- PrivateGPT — qualquer modelo HuggingFace sentence-transformers através de
settings.yaml. Maior variedade real (todos os modelosBAAI/bge-*publicados funcionam, incluindobge-m3para multilíngue), mas é preciso editar um arquivo YAML e reiniciar o serviço. - Open WebUI — embedders servidos pelo Ollama + SentenceTransformers + endpoints compatíveis com OpenAI. Toggle na configuração; exige que o modelo de embedding já esteja baixado no Ollama. A reindexação roda em segundo plano.
- Testado no corpus de 5.047 páginas: trocar o embedder padrão por
BAAI/bge-m3melhorou o recall global em 4–7 pontos percentuais nas três plataformas, mas triplicou o tempo de indexação e adicionou ~1 GB de memória GPU durante o processo. - Para corpus multilíngue (alemão, francês, japonês, chinês misturados),
bge-m3é a escolha que supera o padrão nas três plataformas — mas só o pipeline do PrivateGPT o suporta de forma nativa sem passar pelo Ollama.
O limite de escalabilidade: onde as demos falham
As três plataformas funcionam bem abaixo de 1.000 páginas e começam a falhar em algum ponto entre 8.000 e 12.000 páginas em hardware de consumo. O limite não está no tempo de indexação — está no recall de recuperação e na pressão de memória.
- O Open WebUI falha primeiro, em torno das 8.000 páginas — a recuperação densa de uma única etapa sem re-ranking começa a retornar chunks incorretos, e a configuração padrão do ChromaDB pagina muito sob pressão de memória. A taxa de alucinações sobe de 14% (5K páginas) para ~22% (10K páginas) sem outras mudanças.
- O AnythingLLM falha em torno das 10.000 páginas — os escaneamentos do LanceDB ficam mais lentos acima de ~120k chunks e a etapa de re-ranking começa a ser o gargalo. A latência p95 passa de 880 ms para ~1,6 seg. A taxa de alucinações sobe de 6% para ~10%.
- O PrivateGPT falha em torno das 12.000 páginas — o Qdrant em modo local gerencia bem o volume de chunks, mas a configuração padrão do serviço FastAPI (workers do uvicorn, tamanho de batch de embedding) precisa de ajuste. Com a configuração correta, o PrivateGPT escala até ~25.000 páginas em uma máquina com 32 GB de RAM antes de se degradar significativamente.
- Acima de ~25.000 páginas, nenhuma das três é a ferramenta adequada. Passe para uma stack personalizada com Ollama + Qdrant ou Weaviate com busca híbrida explícita (BM25 + densa) e um re-ranker dedicado. Os armazenamentos vetoriais integrados nessas três plataformas não foram projetados para essa escala.
- Sintomas do limite: a latência p95 de recuperação supera os 2 segundos, a taxa de alucinações aumenta sem mudanças no código, atividade de swap do sistema durante as consultas, respostas de "nenhum chunk relevante encontrado" a consultas que funcionavam ontem.
💡Tip: Se você está construindo uma base de conhecimento pessoal ou uma biblioteca de time que poderia crescer além das 10.000 páginas, comece com o PrivateGPT (o teto de escalabilidade mais alto dos três) ou pule direto para uma stack personalizada desde o primeiro dia. O custo de migração é real — medido em dias, não em horas.
Árvore de decisão: qual você deve escolher?
Cinco perguntas binárias em ordem levam a maioria dos leitores à escolha correta.
- 1. Mais de uma pessoa vai usar esta implantação? → Sim: pule para a pergunta 3. Não: continue.
- 2. Você precisa de respostas com citações (nome de arquivo + página)? → Sim: AnythingLLM. Não: continue.
- 3. Você vai chamá-lo de um backend ou ferramenta de automação? → Sim: PrivateGPT. Não: continue.
- 4. Você está em um setor regulado pela UE ou em um contexto de auditoria? → Sim: PrivateGPT. Não: continue.
- 5. Você já executa o Ollama e quer uma interface de chat multiusuário? → Sim: Open WebUI. Não: AnythingLLM (a opção padrão).
- Se você não tem certeza: comece com o AnythingLLM. É o mais fácil de instalar dos três, tem a menor taxa de alucinações e gera citações que você pode colar em outros trabalhos. Migre mais tarde se você o superar.
Erros comuns ao escolher uma plataforma RAG local
- Erro 1: escolher a plataforma antes do embedder. O modelo de embedding domina a qualidade de recuperação mais que qualquer outra decisão. Primeiro decida se você precisa de suporte multilíngue (
bge-m3), para código (bge-code-v1) ou de propósito geral (nomic-embed-text v1.5); depois escolha a plataforma que o suporta de forma nativa. - Erro 2: fazer benchmarks com um corpus pequeno demais. As três plataformas funcionam bem com menos de 1.000 páginas. Faça o benchmark com pelo menos 5.000 páginas do seu conteúdo real — os rankings mudam.
- Erro 3: ignorar o custo da reindexação. Trocar de embedder não é gratuito. Se você quer fazer testes A/B de embedders todo mês, isso são entre 30 e 90 minutos de indexação por troca em hardware de consumo.
- Erro 4: pular a melhoria do modelo de chat. A qualidade do RAG é necessária mas não suficiente. Um pipeline RAG excelente que alimenta um modelo de chat pequeno produz alucinações em consultas multi-salto; o mesmo pipeline com Qwen3 14B reduz os erros multi-salto em ~10 pontos percentuais.
- Erro 5: confiar em uma resposta sem verificar a citação. Mesmo o AnythingLLM com uma taxa de alucinações de 6% erra em ~3 de cada 50 respostas. Para qualquer tema que tenha consequências (jurídico, médico, financeiro), abra o chunk citado e verifique se a resposta está realmente respaldada.
Perguntas frequentes
Qual plataforma RAG gerencia os conjuntos de documentos maiores?
O PrivateGPT escala mais longe em hardware de consumo — confortavelmente até ~25.000 páginas com configuração ajustada (workers do uvicorn, tamanho de batch de embedding, cache do Qdrant) em uma máquina com 32 GB de RAM. O AnythingLLM falha em torno das 10.000 páginas, o Open WebUI em torno das 8.000. Acima de 25.000 páginas, nenhuma das três é a ferramenta adequada — passe para uma stack personalizada com Ollama + Qdrant ou Weaviate.
Posso migrar documentos e embeddings entre essas plataformas?
Os documentos de origem se movem livremente — as três aceitam os mesmos arquivos. Os embeddings não migram. Cada plataforma armazena vetores no seu próprio formato (LanceDB, Qdrant, ChromaDB) com metadados específicos da plataforma, então uma troca sempre implica reindexação. Calcule entre 30 e 90 minutos por cada 5.000 páginas em hardware de consumo.
Qual plataforma tem a melhor precisão de citações?
AnythingLLM. Em 50 consultas avaliadas, citou corretamente o nome de arquivo + página em 9 de cada 10 vezes em consultas de citação textual, frente a 8/10 do PrivateGPT e 8/10 do Open WebUI. O AnythingLLM é também o único dos três que mostra o texto do chunk literal em um painel click-to-source, o que torna a verificação de citações rápida.
Quanta memória GPU cada plataforma precisa durante a indexação?
No corpus de 5.047 páginas com os embedders padrão: o AnythingLLM atingiu um pico de 6,2 GB, o Open WebUI de 5,4 GB e o PrivateGPT de 4,8 GB. Trocar para um embedder maior (BAAI/bge-m3, 1.024 dim) adiciona ~1 GB. Se você já tem um modelo de chat carregado na VRAM, conte que o embedder vai competir com ele — uma placa de 12 GB não consegue indexar enquanto o Llama 3.3 70B estiver residente.
Posso usar o meu próprio modelo de embedding?
O AnythingLLM suporta 8 backends de embedding na interface gráfica (Native, Ollama, LM Studio, OpenAI, Azure, Cohere, Voyage, LocalAI). O PrivateGPT suporta qualquer modelo HuggingFace sentence-transformers através de settings.yaml. O Open WebUI suporta embedders servidos pelo Ollama, SentenceTransformers e endpoints compatíveis com OpenAI. O PrivateGPT tem a maior variedade *real* de escolha; o AnythingLLM tem a experiência de troca mais simples.
Qual plataforma gerencia melhor os documentos multilíngues?
O PrivateGPT, combinado com BAAI/bge-m3 (um embedder multilíngue de 1.024 dim). bge-m3 suporta mais de 100 idiomas sem configuração adicional e supera os embedders só em inglês em 8–15 pontos percentuais em consultas em idiomas misturados. AnythingLLM e Open WebUI também podem usar bge-m3 através do Ollama, mas o PrivateGPT o suporta de forma nativa sem o desvio pelo Ollama.
Como elas gerenciam as tabelas e figuras dos PDFs?
As três extraem texto por meio de parsers de PDF (pypdfium2 para AnythingLLM e Open WebUI, estilo pdfplumber para PrivateGPT). As tabelas são extraídas como texto com a estrutura de linhas/colunas preservada de forma imperfeita — aceitável para tabelas simples, com perdas para layouts complexos. As figuras são extraídas como referências de imagem nos metadados mas não são usadas para a recuperação. Para PDFs com muitas figuras, considere extrair primeiro as tabelas para CSV com uma ferramenta como Tabula ou Camelot.
Qual plataforma é mais fácil de implantar em um servidor?
Open WebUI — Docker compose junto ao Ollama é uma configuração de 12 minutos que inclui OAuth, acesso baseado em funções e coleções por usuário. O PrivateGPT é compatível com servidores mas exige experiência em Python + Poetry. O AnythingLLM tem uma imagem Docker mas a maioria dos usuários realmente executa a aplicação de desktop; a versão multiusuário para servidor fica atrás da de desktop em paridade de funções.
Elas podem ser usadas em produtos comerciais?
O AnythingLLM tem licença MIT (uso comercial permitido; a versão oficial inclui telemetria de código fechado que você pode desativar ou remover compilando a partir do código-fonte). O PrivateGPT é Apache 2.0 (uso comercial permitido, sem telemetria). O Open WebUI é BSD-3 (uso comercial permitido). Verifique sempre a licença no momento da integração — as licenças de código aberto podem mudar.
Qual tem o desenvolvimento mais ativo?
O Open WebUI publica a cada 1–2 semanas e ocasionalmente reescreve o middleware de RAG entre versões — o ritmo mais rápido mas com maior rotatividade nas atualizações. O PrivateGPT atualiza o LlamaIndex aproximadamente todo mês, com mudanças que quebram compatibilidade de forma periódica. O AnythingLLM publica a cada 2–3 semanas e é o mais estável entre versões. Para implantações de produção de longa duração, a cadência de publicação do AnythingLLM é a mais previsível.