Navegacao Rapida
๐ Configurando o Ambiente Local
Ollama, modelos Qwen, hardware e primeiro chat
6.2๐ Tool Calling com LLMs Locais
Schemas, fluxo completo e thinking modes
6.3๐๏ธ Montando o Agente Completo
Agent loop, ferramentas, memoria e otimizacoes
6.4๐ Do Local ao Producao
LiteLLM, benchmarks, frameworks e futuro
๐ Configurando o Ambiente Local
Instalando Ollama, escolhendo modelos Qwen por hardware, configurando context window e primeiro chat funcional.
Ollama roda LLMs localmente via REST API em localhost:11434. Instalacao: curl -fsSL https://ollama.com/install.sh | sh.
Sem custo de API, privacidade total, sem limites.
Ollama, localhost:11434, REST API, model pull.
Familia Qwen3 (0.6B-235B), Qwen3-Coder (30B-480B MoE), Qwen3.5 (0.8B-397B, 256K context).
Qwen3-Coder-Next atinge 69.6% no SWE-bench โ proximo de Claude.
Qwen3, MoE, dense vs sparse, SWE-bench.
8GB โ qwen3:8b; 16GB โ qwen3-coder:30b-a3b (MoE); 24GB โ qwen3:32b; 40GB+ โ qwen3-coder-next.
Modelo errado para seu hardware = lento ou impossivel.
VRAM, quantizacao Q4/Q6/Q8, MoE efficiency.
Ollama default e 4096 tokens โ muito pouco! Configurar num_ctx=65536 ou OLLAMA_CONTEXT_LENGTH.
Agentes precisam de contexto grande para historico + tools + resultados.
num_ctx, context length, KV cache, kv_cache_type q4_0.
pip install ollama; from ollama import chat; response = chat(model='qwen3:8b', messages=[...]).
Biblioteca oficial com API limpa e suporte a streaming.
pip install, chat(), AsyncClient, stream=True.
Primeiro chat funcional: enviar mensagem, receber resposta, verificar que tudo funciona.
Validar o setup antes de construir o agente.
Hello world, smoke test, options={'num_ctx': 65536}.
๐ Tool Calling com LLMs Locais
Como funciona tool calling com Ollama, formato dos schemas, fluxo completo, thinking modes e diferencas entre local e API.
Ollama /api/chat aceita tools array no mesmo formato da OpenAI. O modelo gera tool_calls no response.
Tool calling e o que transforma chat em agente.
/api/chat, tools parameter, tool_calls response.
{type: "function", function: {name, description, parameters: {type: "object", properties, required}}}.
Formato padrao permite trocar de modelo sem mudar codigo.
JSON Schema, OpenAI format, function definition.
Envia messages+tools โ modelo retorna tool_calls โ executa โ adiciona resultado como role:tool โ repete.
E o mesmo loop da Trilha 4, agora implementado de verdade.
Tool dispatch loop, role:tool, message history.
Qwen3 pode pensar (<think>...</think>) ou responder direto. Non-thinking para tools rapidos; thinking para planejamento.
Thinking gasta tokens extras; usar seletivamente.
Thinking mode, <think> tags, enable_thinking, strip from history.
Com stream=True + tools, tool calls nao sao incrementais โ modelo completa JSON antes. Usar stream=False para tool turns.
Limitacao pratica que afeta o design do loop.
Stream + tools limitation, hybrid approach.
Local: sem custo, mais lento, contexto menor, tool calling menos confiavel. API: mais rapido, mais caro, melhor tool calling.
Entender trade-offs para escolher quando usar cada um.
Latency, cost, reliability, context size.
๐๏ธ Montando o Agente Completo
O agent loop completo, integracao de ferramentas da T5, memoria com persistencia, compressao para janelas menores e otimizacoes.
O loop completo em ~30 linhas: messages โ chat(model, messages, tools) โ tool_calls? โ execute โ append โ repeat.
O agente inteiro em codigo que cabe numa tela.
agent_loop(), max_iterations, chat() call.
Importar TOOL_MAP e TOOL_SCHEMAS da T5, integrar no agent loop com dispatch automatico.
Reuso dos componentes ja construidos.
Tool integration, dispatch, TOOL_MAP[name](**args).
AgentMemory.save() apos cada turno, load() para retomar sessao.
Persistencia entre sessoes sem perder contexto.
Session persistence, save/load, session_id.
Modelos locais tem 8K-32K vs 200K da API. Compressao agressiva: trim a cada turno, truncar outputs longos (10K chars max).
Sem compressao, agente local quebra em 3-4 iteracoes.
Aggressive trimming, output truncation, token budget.
Qwen3 thinking mode emite <think>...</think>. Remover antes de salvar no historico com regex.
Thinking tokens consomem contexto sem valor para o historico.
re.sub(r'<think>.*?</think>', '', content, flags=re.DOTALL).
keep_alive='10m' (nao descarrega modelo), temperature=0.6, top_p=0.95, top_k=20 (recomendado Qwen3).
Otimizacoes fazem diferenca real em velocidade e qualidade.
keep_alive, temperature, sampling parameters.
๐ Do Local ao Producao
LiteLLM proxy, multi-agente local, benchmarks reais, decisao local vs API, frameworks alternativos e o futuro hibrido.
LiteLLM como proxy OpenAI-compatible que roteia para Ollama. Permite usar claude CLI com modelos locais.
Aproveitar a UX do Claude Code com modelos gratuitos.
LiteLLM, proxy, ANTHROPIC_BASE_URL, config.yaml.
Spawnar multiplos processos agente com subprocess ou multiprocessing. Cada um com seu proprio contexto.
Paralelismo para tarefas complexas, como o Army Mode do Claude Code.
multiprocessing, subprocess, fork, coordenacao.
Qwen3-Coder-Next: 69.6% SWE-bench. Claude Opus: 72-77%. Qwen3:8b: ~35%. Custo: local $0, API $$$.
Dados concretos para decidir qual modelo usar.
SWE-bench, BFCL, latencia, custo/beneficio.
Local para: privacidade, custo zero, desenvolvimento, experimentacao. API para: qualidade maxima, contexto grande, producao critica.
Nao e binario โ o ideal e hibrido.
Trade-offs, use cases, hybrid approach.
smolagents (code-first, Ollama nativo), LangGraph (grafos complexos), Qwen-Agent (otimizado para Qwen).
Nao precisa construir tudo do zero se um framework serve.
smolagents, LangGraph, Qwen-Agent, CrewAI.
Agentes que usam modelo local para tarefas simples e API para tarefas complexas. Routing inteligente.
Combinar o melhor dos dois mundos.
Hybrid agents, model routing, cost optimization, fallback.