Criar um agente de IA local com Python, LangChain e Ollama
Um agente de IA local em Python com LangChain e Ollama não é apenas um chatbot: é um programa que decide sozinho quando chamar uma função, ler um arquivo ou encadear várias etapas para responder. Este guia constrói passo a passo um agente funcional em cerca de vinte minutos, com um modelo Qwen 3.5 9B que roda inteiramente na sua máquina. Nenhuma chave de API, nenhum dado enviado a terceiros.
#Por que um agente de IA local em Python?
Um agente, no sentido do LangChain, é um laço simples: o LLM recebe uma pergunta e a lista de suas ferramentas, escolhe chamar uma delas (ou não), lê o resultado e repete até conseguir responder. Toda a mecânica de “decisão” reside na capacidade do modelo de emitir uma chamada estruturada de ferramenta.
Fazer isso localmente, com Ollama, muda duas coisas concretas: seus dados nunca saem da máquina e cada chamada custa zero euro. É a diferença entre prototipar com a OpenAI e receber uma fatura de 50 € ao final da semana e iterar sem se preocupar com a conta.
- Privacidade
- Os arquivos que o agente lê (contratos, código proprietário, notas médicas) não saem do computador. Sem DPA para assinar, sem transferência fora da UE.
- Custo marginal nulo
- Depois de baixar o modelo, você pode iterar centenas de vezes por dia sem que a conta aumente.
- Reprodutibilidade
- Você fixa a versão exata do modelo (qwen3.5:9b, granite4.2:8b, etc.). Sem drift silencioso como com gpt-4o-2024-11-20 que se transforma em outra coisa um mês depois.
- Latência previsível
- Sem ida e volta pela rede. Em uma GPU adequada, o primeiro token chega em menos de um segundo.
#Pré-requisitos
Este guia leva você ao modelo. O kit leva você ao copiloto que programa no seu editor.
- Espaço online vitalício
- PDF + arquivos
- Atualizações vitalícias
- Python 3.10+
- A LangChain não é mais testada na versão 3.9. Verifique com python --version.
- Ollama instalado e iniciado
- Ele deve estar escutando em http://localhost:11434. Ver os guias de instalação do Ollama (Windows, macOS, Linux) se ele ainda não estiver instalado e em execução.
- Um modelo que sabe chamar ferramentas
- Nem todos os LLMs sabem chamar ferramentas. Qwen 3.5, Granite 4.2, Gemma 4, Devstral e GLM 4.7 Flash oferecem suporte nativo à chamada de ferramentas. Evite os modelos já ultrapassados (Llama 2/3, Qwen 2.5, Mistral 7B).
- Hardware
- Qwen 3.5 9B Q4 ocupa aproximadamente 6,6 GB de VRAM. Uma GPU de 8 GB (RTX 3060, 4060) é suficiente; uma de 12 GB (4070) dá margem. No Mac, conte com 16 GB de memória unificada para ter folga.
#1. Inicializar o projeto Python
Um ambiente virtual, três pacotes e pronto. Evitamos instalar o LangChain no Python do sistema — ele muda rapidamente e polui esse ambiente.
- langchain
- O núcleo: abstrações de prompts, ferramentas e mensagens.
- langchain-ollama
- Integração oficial Ollama. Mantida pela equipe LangChain desde 2024.
- langgraph
- Para o loop do agente. É o motor recomendado hoje, mais estável que os antigos AgentExecutor.
#2. Conectar Ollama via Python
Antes de montar um agente, é preciso verificar se a comunicação com o modelo está funcionando. Baixe o modelo, se ainda não tiver feito isso, e depois teste a chamada mais simples possível.
O download ocupa aproximadamente 6,6 GB em Q4_K_M (a quantização padrão do Ollama). Após a instalação, crie o primeiro script:
Se você vir uma frase coerente, a conexão Python ↔ Ollama funciona. Se você receber uma ConnectionError, verifique se o Ollama está de fato em execução (ollama ps deve listar um serviço ativo).
#3. Definir as ferramentas do agente
Uma ferramenta LangChain é simplesmente uma função Python decorada com @tool. O docstring se torna a descrição que o LLM vê — ele usa isso para decidir quando chamá-la. Seja preciso: um docstring vago gera chamadas aleatórias.
Vamos criar duas ferramentas representativas: um avaliador de expressões aritméticas e um leitor de arquivos.
Três regras para que as ferramentas sejam usadas corretamente pelo modelo:
- Nome explícito
- calculer em vez de process, lire_fichier em vez de get. O LLM escolhe primeiro pelo nome.
- Docstring detalhada
- Descreva o que a ferramenta faz, o que ela espera receber e o que ela retorna. As anotações de tipo do Python são lidas pelo LangChain e expostas ao modelo.
- Retornar uma string
- Sempre. Se a função retornar um dicionário ou um objeto, o LangChain o serializa, mas o resultado fica menos legível para o modelo.
#4. Montar o agente
Temos um LLM e temos ferramentas. A função create_react_agent do langgraph conecta os dois e gerencia o ciclo: enquanto o modelo deseja chamar ferramentas, continuamos; quando ele responde em texto, paramos.
Crie um pequeno arquivo notes.txt na mesma pasta para testar:
#5. Executar e observar o loop
Você deveria ver uma resposta que contenha ao mesmo tempo o resultado do cálculo (7.006.652) e um resumo do arquivo. Mas é mais instrutivo ver o que acontece durante a execução. Adicione este modo verboso para acompanhar o loop passo a passo:
Você vai observar a sequência típica de um agente: o modelo gera uma chamada para calculer, recebe o resultado, gera uma chamada para lire_fichier, recebe o conteúdo e então gera a resposta final. Três iterações para uma única pergunta do usuário.
#Dicas e solução de problemas
- Contexto muito curto
- Por padrão, o Ollama trunca para 2048 tokens. Se o seu agente encadear várias ferramentas, esse limite é ultrapassado rapidamente. Defina num_ctx=8192 em ChatOllama(model="...", num_ctx=8192).
- Modelo que inventa ferramentas inexistentes
- Se o agente inventar nomes de funções, reduza a temperatura para 0 e reformule o prompt de sistema, listando explicitamente as ferramentas disponíveis.
- Laço infinito
- Defina um limite: create_react_agent(..., recursion_limit=10). Acima disso, o agente encerra corretamente.
- Latência muito alta
- Em CPU, um 9B faz 5 a 10 tok/s. Mude para qwen3.5:4b (3,4 GB de VRAM, 30+ tok/s em GPU modesta) se a qualidade continuar aceitável para o seu caso.
- Erro "context length exceeded"
- O resumo de um arquivo longo ultrapassa num_ctx. Adicione uma ferramenta intermediária que particione o arquivo ou aumente num_ctx até 32768, se sua VRAM permitir.
#Para se aprofundar
Você tem um agente que calcula, lê, raciocina localmente. Três direções naturais para explorar:
- Dar a ele acesso aos seus documentos
- Acoplar o agente a uma base vetorial para que ele possa responder com base em um corpus interno — esse é exatamente o tema do guia de introdução ao RAG local.
- Viver na CLI para programar
- Aider é um agente de desenvolvimento que edita diretamente seus arquivos a partir do terminal. Você pode conectá-lo ao mesmo Ollama e aproveitar o Qwen3-Coder 30B ou Devstral para edição assistida.
- Ajustar a quantização do modelo
- Se você achar o Qwen 3.5 9B Q4 lento demais ou com qualidade muito limitada, o guia de quantização explica quando passar para Q5_K_M ou reduzir o tamanho do modelo.
Um comentário, um erro ou uma observação? Avise-nos; isso ajuda a melhorar o guia para todos.