Como Administrar um LLM Localmente para Interagir com Seus Documentos
- Como Administrar um LLM Localmente para Interagir com Seus Documentos
A maioria das ferramentas de IA exige que você envie seus prompts e arquivos para servidores de terceiros. Isso não é uma opção se seus dados incluírem periódicos privados, anotações de pesquisa ou documentos comerciais sensíveis (contratos, apresentações de conselho, arquivos de RH, finanças). A boa notícia: você pode rodar LLMs capazes localmente (em um laptop ou no seu próprio servidor) e consultar seus documentos sem enviar um único byte para a nuvem.
Neste tutorial, você aprenderá como rodar um LLM local e privadamente, para poder pesquisar e conversar com periódicos sensíveis e documentos de negócios na sua própria máquina. Vamos instalar Ollama e OpenWebUI, escolher um modelo que se encaixe no seu hardware, ativar a busca privada de documentos com nomic-embed-text e criar uma base de conhecimento local para que tudo fique no disco.
Pré-requisitos
Você vai precisar de um terminal (todos os sistemas — Windows, Mac, Linux — incluem um, e você pode encontrar o seu com uma busca rápida), e Python e pip ou Docker, dependendo do seu método de instalação preferido para o OpenWebUI.
Instalação
Você vai precisar do Ollama e do OpenWebUI. A Ollama roda os modelos, enquanto o OpenWebUI oferece uma interface de navegador para interagir com seu LLM local, como você faria com o ChatGPT.
Passo 1: Instalar o Ollama
Baixe e instale o Ollama em seu site oficial. Instaladores estão disponíveis para macOS, Linux e Windows. Depois de instalado, verifique se está rodando abrindo um terminal e executando:
ollama list
Se o Ollama estiver rodando, isso retornará uma lista de modelos ativos (ou uma lista vazia).
Passo 2: Instale o OpenWebUI
Você pode instalar o OpenWebUI tanto com Python (pip) quanto com Docker. Aqui, vamos mostrar como fazer isso com pip, mas você pode encontrar instruções para o Docker na documentação oficial do openwebui.
Instale o OpenWebUI com o seguinte comando:
pip install open-webui
Isso funciona no macOS, Linux e Windows, desde que você tenha Python ≥ 3.9 instalado.
Em seguida, inicie o servidor:
open-webui serve
Depois, abra seu navegador e vá para:
http://localhost:8080
Passo 3: Instale um modelo
Escolha um modelo da lista de modelos Ollama e extraia-o localmente copiando o comando fornecido.

Por exemplo:
ollama pull gemma3:4b
Se você não tem certeza de qual modelo sua máquina pode suportar, peça para uma IA recomendar um baseado no seu hardware. Modelos menores (1B–4B) são mais seguros em laptops.
Eu recomendaria o Gemma3 como um jogo inicial (você pode baixar vários modelos e alternar facilmente entre eles). Escolha o número do parâmetro no final (":4b", ":1b", e assim por diante) com base neste guia:
- Nível 1 (laptops pequenos ou computadores fracos): RAM ≤8 GB ou sem GPU → 1B–2B.
- Nível 2: RAM 16 GB, GPU fraca → 2B–4B.
- Nível 3: RAM ≥16 GB, 6–8 GB VRAM → 4B–9B.
- Nível 4: RAM ≥32 GB, 12 GB+ VRAM → 12B+.
Depois de instalar o Ollama e o modelo desejado, confirme que eles estão ativos rodando a lista Ollama no terminal:

Execute o WebOpenUI para abrir a interface do navegador com:
open-webui serve
Depois vá até http://localhost:8080/. Agora você está pronto para começar a usar seu LLM localmente!
Nota: ele vai pedir credenciais de login, mas elas não importam muito se você pretende usar apenas localmente.

Configurações para Documentos
Agora vamos configurar tudo o que precisamos para interagir com nossos documentos locais. Primeiramente, precisamos instalar o modelo nomic-embed-text para processar nossos documentos. Instale-o com:
ollama pull nomic-embed-text
Nota: Se você está se perguntando por que precisamos de outro modelo (nomic-embed-text) além do principal:
-
O modelo de embedding (nomic-embedd-text) mapeia cada bloco de texto dos seus documentos para um vetor numérico, para que o OpenWebUI possa rapidamente encontrar trechos semanticamente semelhantes quando você faz uma pergunta.
-
O modelo de chat (por exemplo, gemma3:1b) recebe sua pergunta mais esses trechos recuperados como contexto e gera a resposta em linguagem natural.
Em seguida, você deve ativar o recurso de "memória" se quiser que o LLM lembre o contexto das suas conversas passadas nas futuras.
Baixe a função de memória adaptativa aqui. Funções são como plug-ins.

Agora vamos atualizar nossas configurações para habilitar esses recursos. Clique no seu nome no canto inferior esquerdo, depois em "Configurações".

Clique na primeira, depois vá em "Personalização" e ative "Memória".

Agora vamos acessar o outro painel de configurações ("Painel de Administração"). Clique novamente no seu nome no canto inferior esquerdo e vá até o Painel de Administração → Configurações → Documentos.

Nesta seção (Painel de Administração → Configurações → Documentos), encontre a seção "Embedding", vá até "Embedding Model Engine" e escolha Ollama (encontre o selecionável à direita). Deixe a chave API em branco.
Agora, em "Embedding Model", escreva nomic-embed-text. Depois, vá em "Recuperação" → ative o "Modo Contexto Completo".
Configurações de chunking
Você também deve definir o tamanho do pedaço e sobrepor-se. O OpenWebUI divide documentos em partes menores antes de indexá-los, já que modelos não conseguem incorporar ou recuperar textos muito longos em uma única peça.
Um bom padrão é de 128–512 tokens por bloco, com sobreposição de 10–20%. Blocos maiores preservam mais contexto, mas são mais lentos e consomem mais memória, enquanto blocos menores são mais rápidos, mas podem perder significado de nível superior. A sobreposição ajuda a evitar que contextos importantes sejam cortados quando o texto é dividido.
Aqui está uma tabela orientadora, mas recomendo obter os valores recomendados para seu caso de uso específico e configurá-los compartilhando (incluindo modelo de GPU ou laptop, armazenamento, RAM e assim por diante) com um LLM como ChatGPT ou Claude, pois mudar os valores de chunk/sobreposição depois exige reenviar os documentos.
Chunk/sobreposição sugerida por nível
| Cenário / Uso | Hardware típico | Tamanho do chunk (tokens) | Overlap (%) | Observações |
|---|---|---|---|---|
| Tier 1 – restrito | ≤ 8 GB RAM, sem GPU ou GPU fraca | 128–256 | 10–15 | Prioriza velocidade e baixo uso de memória |
| Tier 2 – intermediário | 16 GB RAM, GPU modesta ou CPU forte | 256–384 | 15–20 | Equilíbrio entre contexto e performance |
| Tier 3 – confortável | ≥ 16 GB RAM, 6–8 GB VRAM | 384–512 | 15–20 | Mais semântica por chunk, ainda prático |
| PDFs técnicos densos / documentos legais | Qualquer (especialmente Tier 2–3) | 384–512 | 15–20 | Mantém parágrafos e argumentos intactos |
| Notas curtas, tickets, e-mails | Qualquer | 128–256 | 10–15 | Itens pequenos, chunks grandes não são necessários |
| Queries muito longas, muitos chunks recuperados | Qualquer com janela de contexto maior | 256–384 | 10–15 | Chunks menores permitem mais partes no contexto |
Como Enviar Seus Documentos
Agora, o passo final: enviar seus documentos! Vá para "Workspace" no painel lateral, depois "Conhecimento" e crie uma nova coleção (banco de dados). Você pode começar a enviar arquivos aqui.

Certifique-se de verificar se há algum erro durante o upload. Infelizmente, eles aparecem apenas como pop-ups temporários. Alguns erros podem ser causados pelo formato dos seus arquivos, então certifique-se de verificar o console para mais registros de erros.
Depois, dentro de "Workspace", mude para a aba "Models" e crie um novo modelo personalizado. Criar um modelo personalizado e anexar sua base de conhecimento diz ao OpenWebUI para pesquisar automaticamente sua coleção de documentos e incluir os trechos mais relevantes como contexto sempre que você fizer uma pergunta.

Aqui, certifique-se de selecionar seu modelo (no meu caso "gemma3:1b") e anexe sua base de conhecimento.


(Opcional) Adicionando um prompt do sistema
Ao criar seu modelo personalizado no Workspace → Models, você pode definir um prompt do sistema que o modelo usará para contextualizar em todas as suas conversas.
Aqui estão alguns exemplos de informações que você pode querer adicionar:
-
Contexto sobre você ("Sou um estudante de bioengenharia de 20 anos interessado em...")
-
Seu estilo de comunicação preferido ("sem enrolação", "seja direto", "seja analítico"...)
-
Contexto sobre como seus dados são estruturados
Exemplo de prompt do sistema:
Você é uma assistente analítica e ponderada que me ajuda a explorar padrões e insights em meus diários pessoais. Seja direto, evite especulações e distinga claramente entre fatos dos documentos e da interpretação.
Este prompt se aplicará automaticamente a todas as conversas que utilizam esse modelo personalizado, ajudando a manter as respostas consistentes e alinhadas com seus objetivos.
Como Administrar Seu LLM Localmente
Agora abra um novo chat e certifique-se de selecionar seu modelo personalizado:

Agora você está pronto para conversar com seus próprios médicos em um ambiente local e privado!
Nota: Por padrão, o frontend/navegador para de transmitir a resposta após cinco minutos, mesmo que continue processando sua consulta em segundo plano. Isso significa que, se sua consulta demorar mais de cinco minutos para ser processada, ela não será exibida no navegador. Você pode recarregar a página e clicar em "continuar resposta" para obter a última resposta.
Recomendo instalar a função Enhanced Context Tracker (plugin) para ter mais visibilidade sobre o progresso da sua consulta.
Conclusão
Agora você tem uma pilha privada de LLM (Ollama para modelos, OpenWebUI para a interface e nomic-embed-text para embeddings) conectada à sua base de conhecimento no disco. Seus diários e documentos comerciais permanecem locais; Nada é enviado para terceiros. Os principais mostradores são simples: escolha um modelo que se encaixe no seu hardware, ative a recuperação de memória e contexto completo, use blocos/sobreposições sensíveis e verifique o console quando o jogo trava.
Se precisar de mais margem, implante a mesma configuração no seu próprio servidor e mantenha as garantias de privacidade. A partir daqui, itere na escolha do modelo, chunking e prompts, e adicione as funções opcionais se precisar de maior visibilidade durante trabalhos longos.