![]()
A lição anterior escalou agentes para cima na nuvem. Esta traz eles para baixo em uma única máquina. Ao final, você terá um assistente de engenharia funcional que raciocina, chama ferramentas, lê seus arquivos e busca na sua documentação — sem nenhuma chamada de inferência na nuvem.
Por que você gostaria disso? Três motivos que surgem constantemente em trabalho real de engenharia:
O problema é que você está trocando um modelo de ponta na nuvem por um Small Language Model (SLM) rodando no seu CPU, GPU ou NPU. Esta lição trata de construir agentes que sejam bons dentro dessa limitação, e não fingir que a limitação não existe.
Esta lição abordará:
Após completar esta lição, você saberá como:
Esta lição pressupõe que você completou as lições anteriores e está confortável com:
Você também precisará de:
requirements.txt, além de foundry-local-sdk, openai e chromadb para esta lição.Um modelo de ponta na nuvem tem centenas de bilhões de parâmetros e um datacenter atrás. Um SLM tem alguns bilhões de parâmetros e deve caber na RAM do seu laptop. Essa diferença define expectativas claras.
SLMs são bons em:
SLMs são mais fracos em:
A estratégia vencedora para agentes locais é: deixe o SLM orquestrar e deixe as ferramentas fazerem o trabalho pesado. O modelo não precisa conhecer sua base de código — precisa saber quando chamar read_file e search_docs. Isso joga diretamente com as forças do SLM.
flowchart LR
U[Desenvolvedor] --> A[Agente Local SLM]
A -->|decide qual ferramenta| T1[ler_arquivo]
A -->|decide qual ferramenta| T2[busca_docs RAG]
A -->|decide qual ferramenta| T3[analisar_código]
T1 --> A
T2 --> A
T3 --> A
A --> R[Responder, totalmente no dispositivo]
Microsoft Foundry Local é um runtime leve que baixa, gerencia e serve modelos inteiramente na sua máquina. A característica mais importante para nós é que ele expõe um endpoint HTTP compatível com OpenAI — o que significa que o SDK OpenAI e o cliente OpenAI do Microsoft Agent Framework funcionam contra ele apenas alterando base_url. Tudo que você aprendeu sobre construir agentes se transfere diretamente; só o endpoint muda da nuvem para localhost.
O Foundry Local também escolhe automaticamente a melhor versão do modelo para seu hardware — uma build para CPU, CUDA/GPU ou NPU — para que você não tenha que otimizar manualmente por máquina.
Instale o Foundry Local (veja a documentação para seu SO) e confirme que funciona:
# Instale (exemplo; siga a documentação para sua plataforma)
winget install Microsoft.FoundryLocal # Windows
# brew install microsoft/foundrylocal/foundrylocal # macOS
# Baixe e execute um modelo Qwen, depois inicie o serviço local
foundry model run qwen2.5-7b-instruct
foundry service status
Uma vez que o serviço esteja rodando você tem um endpoint local compatível com OpenAI (tipicamente http://localhost:PORT/v1). O notebook usa o foundry-local-sdk para descobrir o endpoint automaticamente, então você não precisa fixar a porta no código.
Um agente é realmente um agente se pode chamar ferramentas. Muitos SLMs conseguem conversar, mas produzem chamadas a ferramentas não confiáveis e mal formadas. Modelos Qwen são treinados para chamada de função e emitem estruturas bem formadas de chamadas de ferramenta consistentemente — o que transforma um modelo de chat local em um agente local.
O fluxo é o loop padrão de chamada de ferramenta que você já conhece, só que rodando localmente:
sequenceDiagram
participant U as Usuário
participant A as Agente Qwen (local)
participant T as Ferramenta Local
U->>A: "O que auth.py faz?"
A->>A: Decidir: chamar read_file
A->>T: read_file("auth.py")
T-->>A: conteúdo do arquivo
A->>A: Raciocinar sobre o conteúdo
A-->>U: Explicação
A busca em documentação é onde agentes locais se destacam. Ao invés de esperar que o SLM tenha decorado a documentação do seu framework, você incorpora esses documentos em um banco vetorial local e deixa o agente recuperar os trechos relevantes sob demanda.
Usamos o Chroma, um repositório vetorial embutido que roda no processo sem servidor. O pipeline é totalmente local: modelo de embedding local → vetores locais → recuperação local → SLM local.
flowchart TB
D[Seus documentos / código] --> E[Modelo de incorporação local]
E --> V[(Banco de dados vetorial Chroma - no disco)]
Q[Consulta do agente] --> QE[Incorporar consulta localmente]
QE --> V
V -->|pedaços top-k| A[Agente Qwen]
A --> Ans[Resposta fundamentada]
Este é o mesmo padrão Agentic RAG da Lição 5 — a única mudança é que todo componente roda na sua máquina.
MCP é um transporte, não um serviço na nuvem. Um servidor MCP pode rodar como processo local em stdio, expondo ferramentas ao seu agente pelo protocolo padrão. Isso permite reutilizar o ecossistema crescente de servidores MCP — acesso ao sistema de arquivos, operações git, consultas a banco de dados — totalmente offline.
A postura de segurança é diferente da nuvem, mas não ausente: um servidor MCP local ainda roda com as permissões do seu usuário, então limite o que ele pode acessar (um diretório de projeto, não sua pasta home inteira) e trate suas saídas como entradas para validar.
Local-first não significa local-apenas. Sistemas maduros roteiam por sensibilidade e dificuldade:
| Situação | Onde roda |
|---|---|
| Código/dados sensíveis, ou offline | SLM Local |
| Tarefa simples e delimitada | SLM Local (barato, rápido) |
| Raciocínio multi-hop difícil em dados não sensíveis | Modelo na Nuvem |
| Tudo, durante queda | SLM Local (degradação graciosa) |
Isso reflete a ideia de model routing da Lição 16 — exceto que um dos “modelos” agora é sua própria máquina. Um design robusto recorre ao local quando a nuvem está indisponível, então o agente degrada em qualidade ao invés de falhar completamente.
flowchart LR
Q[Solicitação] --> S{Sensível ou offline?}
S -->|sim| L[SLM Local]
S -->|não| C{Precisa de raciocínio profundo?}
C -->|não| L
C -->|sim| Cloud[Modelo na nuvem]
L --> Out[Resposta]
Cloud --> Out
Abra code_samples/17-local-agent-foundry-local.ipynb e faça o passo a passo. Você construirá um assistente de engenharia local que roda inteiramente na sua estação de trabalho e pode:
Nenhuma inferência na nuvem é usada em nenhum momento.
O assistente se conecta ao Foundry Local pelo endpoint compatível com OpenAI, então o código do agente parece quase idêntico às lições na nuvem — só muda o cliente:
from foundry_local import FoundryLocalManager
from openai import OpenAI
# Foundry Local descobre/baixa o modelo e nos fornece um endpoint local.
manager = FoundryLocalManager(\"qwen2.5-7b-instruct\")
client = OpenAI(base_url=manager.endpoint, api_key=manager.api_key) # api_key é um espaço reservado local
As ferramentas são funções Python comuns limitadas a um diretório de projeto:
def read_file(path: str) -> str:
\"\"\"Read a file, but only inside the sandboxed project directory.\"\"\"
full = (PROJECT_ROOT / path).resolve()
if PROJECT_ROOT not in full.parents and full != PROJECT_ROOT:
return \"Access denied: path is outside the project directory.\"
return full.read_text(encoding=\"utf-8\")
Note a verificação do sandbox — mesmo localmente, uma ferramenta que lê caminhos arbitrários é uma vulnerabilidade. O notebook mantém cada ferramenta limitada a uma raiz de projeto única.
Teste seu entendimento antes de avançar para a tarefa.
1. Dê duas razões concretas para rodar um agente localmente em vez de na nuvem.
2. Qual é a divisão recomendada de trabalho entre um SLM e suas ferramentas em um agente local, e por quê?
3. O que torna possível reutilizar código de agentes da nuvem com Foundry Local?
4. Por que usamos especificamente um modelo Qwen de chamada de função, e não qualquer SLM?
5. No pipeline RAG local, quais componentes rodam na máquina?
6. Um servidor MCP local roda na sua máquina. Isso o torna automaticamente seguro? Que precauções você ainda deve tomar?
7. Descreva uma regra de roteamento híbrido sensata que inclua um modelo local.
8. Qual é uma cifra realista mínima de RAM para rodar o agente local nesta lição, e o que mais RAM compra para você?
Estenda o assistente de engenharia local para um revisor local de documentação para um pequeno projeto de sua escolha (use uma das pastas de lições deste repositório se quiser).
Sua submissão deve:
Adicionar uma ferramenta find_todos que escaneie o projeto em busca de comentários TODO/FIXME e os retorne com arquivo e número da linha — mantendo a mesma verificação sandbox do read_file.
Em seguida, escreva um parágrafo curto sobre o que você moveria para a nuvem e o que manteria localmente para este revisor, e por quê. Você será avaliado se os componentes locais estão conectados corretamente e se seu raciocínio híbrido é sólido — não na qualidade do modelo.
Nesta lição você construiu um agente que roda inteiramente na sua própria máquina:
Isto completa o arco de implantação: A Lição 16 escalou agentes para o Microsoft Foundry, e esta lição os escalou para baixo numa única estação de trabalho. A próxima lição aborda como manter agentes implantados seguros.
Implantando Agentes Escaláveis
Aviso Legal: Este documento foi traduzido usando o serviço de tradução por IA Co-op Translator. Embora nos esforcemos pela precisão, por favor, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autorizada. Para informações críticas, recomenda-se tradução profissional humana. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas decorrentes do uso desta tradução.