![]()
A lição anterior escalou agentes para cima na nuvem. Esta traz-nos para baixo para uma única máquina. No final, terá um assistente de engenharia funcional que raciocina, chama ferramentas, lê os seus ficheiros e pesquisa a sua documentação — sem uma única chamada de inferência na nuvem.
Por que razão quererá isso? Três razões que surgem constantemente no trabalho real de engenharia:
A contrapartida é que está a trocar um modelo de vanguarda na nuvem por um Modelo de Linguagem Pequeno (SLM) a correr no seu CPU, GPU, ou NPU. Esta lição trata de construir agentes que sejam bons dentro dessa restrição em vez de fingir que a restrição não existe.
Esta lição abordará:
Após concluir esta lição, saberá como:
Esta lição assume que completou as lições anteriores e está confortável com:
Também precisará de:
requirements.txt, mais foundry-local-sdk, openai, e chromadb para esta lição.Um modelo de vanguarda na nuvem tem centenas de milhares de milhões de parâmetros e um centro de dados por trás. Um SLM tem alguns milhares de milhões de parâmetros e tem que caber na RAM do seu portátil. Essa diferença define expectativas claras.
Os SLMs são bons em:
Os SLMs são mais fracos em:
A estratégia vencedora para agentes locais é, portanto: deixar o SLM orquestrar, e deixar as ferramentas fazer o trabalho pesado. O modelo não precisa de conhecer a sua base de código — precisa de saber quando chamar read_file e search_docs. Isso joga diretamente para os pontos fortes de um SLM.
flowchart LR
U[Programador] --> A[Agente SLM Local]
A -->|decide qual ferramenta| T1[ler_ficheiro]
A -->|decide qual ferramenta| T2[pesquisa_docs RAG]
A -->|decide qual ferramenta| T3[analisa_código]
T1 --> A
T2 --> A
T3 --> A
A --> R[Resposta, totalmente no dispositivo]
Microsoft Foundry Local é um runtime leve que descarrega, gere e serve modelos inteiramente na sua máquina. A sua característica mais importante para nós é que 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 com ele só mudando o base_url. Tudo o que aprendeu sobre construir agentes transfere-se diretamente; só o endpoint muda da nuvem para o localhost.
O Foundry Local também escolhe automaticamente a melhor compilação de um modelo para o seu hardware — compilação CPU, compilação CUDA/GPU, ou compilação NPU — para que não tenha que otimizar à mão por máquina.
Instale o Foundry Local (veja a documentação para o seu SO), depois confirme que funciona:
# Instalar (exemplo; siga a documentação para a sua plataforma)
winget install Microsoft.FoundryLocal # Windows
# brew install microsoft/foundrylocal/foundrylocal # macOS
# Descarregue 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 a correr, tem um endpoint local compatível com OpenAI (tipicamente http://localhost:PORT/v1). O notebook usa o foundry-local-sdk para detectar o endpoint automaticamente, para não precisar de codificar a porta.
Um agente só é agente se pode chamar ferramentas. Muitos SLMs conseguem conversar, mas produzem chamadas a ferramentas pouco fiáveis e mal formadas. Os modelos Qwen são treinados para invocação de funções e emitem estruturas de chamadas a ferramentas bem formadas de forma consistente — o que é exatamente o que transforma um modelo de chat local num agente local.
O fluxo é o ciclo padrão de chamada a ferramentas que já conhece, só que executado localmente:
sequenceDiagram
participant U as Utilizador
participant A as Agente Qwen (local)
participant T as Ferramenta Local
U->>A: "O que é que auth.py faz?"
A->>A: Decidir: chamar read_file
A->>T: read_file("auth.py")
T-->>A: conteúdos do ficheiro
A->>A: Raciocinar sobre conteúdos
A-->>U: Explicação
A pesquisa na documentação é onde os agentes locais ganham o seu valor. Em vez de esperar que o SLM tenha memorizado a documentação do seu framework, embede essa documentação numa base de dados vetorial local e deixe que o agente recupere os fragmentos relevantes sob demanda.
Usamos o Chroma, uma store vetorial embutida que corre em processo sem um servidor para gerir. O pipeline é inteiramente local: modelo de embedding local → vetores locais → recuperação local → SLM local.
flowchart TB
D[Os seus docs / código] --> E[Modelo de incorporação local]
E --> V[(Base de dados vetorial Chroma - no disco)]
Q[Consulta do agente] --> QE[Incorporar a consulta localmente]
QE --> V
V -->|principais k fragmentos| A[Agente Qwen]
A --> Ans[Resposta fundamentada]
Este é o mesmo padrão Agentic RAG da Lição 5 — a única mudança é que todos os componentes rodam na sua máquina.
MCP é um transporte, não um serviço na nuvem. Um servidor MCP pode correr como processo local em stdio, expondo ferramentas ao seu agente através do protocolo padrão. Isto permite reutilizar o ecossistema crescente de servidores MCP — acesso a sistema de ficheiros, operações git, consultas a bases de dados — totalmente offline.
A postura de segurança é diferente da nuvem, mas não inexistente: um servidor MCP local ainda corre com as permissões do seu utilizador, por isso limite o que pode tocar (diretório de projeto, não a sua pasta pessoal toda) e trate as suas saídas como entradas a validar.
Priorizar o local não significa apenas local. Sistemas maduros fazem roteamento por sensibilidade e dificuldade:
| Situação | Onde corre |
|---|---|
| Código/dados sensíveis, ou offline | SLM local |
| Tarefa simples e delimitada | SLM local (barato, rápido) |
| Raciocínio multi-salto difícil em dados não sensíveis | Modelo na nuvem |
| Tudo, durante uma falha | SLM local (degradação graciosa) |
Isto espelha a ideia de roteamento de modelo da Lição 16 — exceto que um dos “modelos” é agora a sua própria máquina. Um design robusto recua para local quando a nuvem está indisponível, de modo que o agente degrade em qualidade em vez de falhar completamente.
flowchart LR
Q[Pedido] --> 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 cloud]
L --> Out[Resposta]
Cloud --> Out
Abra code_samples/17-local-agent-foundry-local.ipynb e percorra-o. Vai construir um assistente de engenharia local que corre inteiramente na sua estação de trabalho e pode:
Nenhuma inferência na nuvem é usada em momento algum.
O assistente liga-se ao Foundry Local pelo endpoint compatível com OpenAI, por isso o código do agente é quase idêntico às lições da nuvem — só o cliente muda:
from foundry_local import FoundryLocalManager
from openai import OpenAI
# Foundry Local descobre/descarrega o modelo e fornece-nos um endpoint local.
manager = FoundryLocalManager(\"qwen2.5-7b-instruct\")
client = OpenAI(base_url=manager.endpoint, api_key=manager.api_key) # api_key é um marcador local
As ferramentas são funções Python comuns direcionadas a uma diretoria 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 sandbox — mesmo localmente, uma ferramenta que lê caminhos arbitrários é um risco. O notebook mantém cada ferramenta limitada a uma única raiz de projeto.
Teste a sua compreensão antes de avançar para o exercício.
1. Dê duas razões concretas para correr um agente localmente em vez da nuvem.
2. Qual é a divisão de tarefas recomendada entre um SLM e as suas ferramentas num agente local, e porquê?
3. O que torna possível reutilizar código de agente de nuvem com Foundry Local?
4. Por que usamos especificamente um modelo Qwen de invocação de funções em vez de qualquer SLM?
5. No pipeline RAG local, quais componentes correm na máquina?
6. Um servidor MCP local corre na sua máquina. Isso torna-o automaticamente seguro? Que precaução deve ainda tomar?
7. Descreva uma regra sensata de roteamento híbrido que inclua um modelo local.
8. Qual é um valor realista mínimo de RAM para executar o agente local nesta lição, e o que obtém com mais RAM?
Expanda o assistente de engenharia local para um revisor de documentação local para um pequeno projeto à sua escolha (use uma das pastas de lição deste repositório se quiser).
A sua submissão deve:
Adicionar uma ferramenta find_todos que digitalize o projeto em busca de comentários TODO/FIXME e os retorne com ficheiro e número da linha — mantendo a mesma verificação sandbox que read_file.
Depois escreva um pequeno parágrafo sobre o que moveria para a cloud e o que manteria localmente para este revisor, e porquê. A avaliação baseia-se em saber se os componentes locais estão corretamente ligados e se o seu raciocínio híbrido é sólido — não na qualidade do modelo.
Nesta lição construiu um agente que corre inteiramente no seu próprio computador:
Isto completa o arco de deployment: a Lição 16 escalou agentes para o Microsoft Foundry, e esta lição escalou-os para baixo numa única estação de trabalho. A próxima lição aborda manter agentes implantados seguros.
Aviso Legal: Este documento foi traduzido utilizando o serviço de tradução automática Co-op Translator. Embora nos esforcemos pela precisão, esteja ciente de que traduções automáticas podem conter erros ou imprecisões. O documento original na sua língua nativa 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 resultantes da utilização desta tradução.