![]()
A lição anterior escalou agentes para cima para a cloud. Esta traz-nos para baixo para uma única máquina. No final terá um assistente de engenharia a funcionar que raciocina, chama ferramentas, lê os seus ficheiros e pesquisa na sua documentação — sem uma única chamada de inferência na cloud.
Porque é que gostaria disso? Três razões que surgem frequentemente no trabalho real de engenharia:
A questão é que está a trocar um modelo de topo da cloud por um Modelo de Linguagem Pequeno (SLM) a correr na sua CPU, GPU ou NPU. Esta lição é sobre construir agentes que sejam bons dentro dessa limitação em vez de fingir que ela não existe.
Esta lição cobre:
Após completar esta lição, saberá:
Esta lição assume que completou as lições anteriores e está confortável com:
Também precisará de:
requirements.txt, além de foundry-local-sdk, openai e chromadb para esta lição.Um modelo de ponta na cloud 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 de caber na RAM do seu portátil. Essa diferença define expectativas claras.
SLMs são bons em:
SLMs são mais fracos em:
Portanto, a estratégia vencedora para agentes locais é: 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 com 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[pesquisar_docs RAG]
A -->|decide qual ferramenta| T3[analisar_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 funcionalidade mais importante para nós é que expos 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 alterando apenas o base_url. Tudo o que aprendeu sobre construir agentes transfere diretamente; só o endpoint muda da cloud para localhost.
Foundry Local também escolhe automaticamente a melhor versão do modelo para o seu hardware — uma versão CPU, uma versão CUDA/GPU ou uma versão NPU — para que não precise de otimizar manualmente 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
Depois do serviço estar a correr, terá um endpoint local, compatível com OpenAI (tipicamente http://localhost:PORT/v1). O notebook usa o foundry-local-sdk para descobrir automaticamente o endpoint, para não ter de codificar o porto manualmente.
Um agente é realmente um agente se puder chamar ferramentas. Muitos SLMs podem conversar mas produzem chamadas de ferramentas pouco fiáveis e mal formadas. Os modelos Qwen são treinados para chamada de funções e geram estruturas de chamadas de ferramentas bem formadas — que é exatamente o que transforma um modelo de chat local num agente local.
O fluxo é o loop de chamada de ferramentas padrão que já conhece, apenas a correr no dispositivo:
sequenceDiagram
participant U as Utilizador
participant A as Agente Qwen (local)
participant T as Ferramenta Local
U->>A: "O que faz auth.py?"
A->>A: Decidir: chamar read_file
A->>T: read_file("auth.py")
T-->>A: conteúdo do ficheiro
A->>A: Raciocinar sobre o conteúdo
A-->>U: Explicação
A pesquisa na documentação é onde os agentes locais justificam a sua utilidade. Em vez de esperar que o SLM memorize a documentação do seu framework, insere esses documentos numa base de dados vetorial local e deixa o agente recuperar os fragmentos relevantes sob demanda.
Usamos o Chroma, um armazenamento vetorial incorporado que corre no processo sem servidor para gerir. O pipeline é inteiramente local: modelo de embed local → vetores locais → recuperação local → SLM local.
flowchart TB
D[Os seus documentos / código] --> E[Modelo de incorporação local]
E --> V[(Base de dados vetorial Chroma - no disco)]
Q[Consulta do agente] --> QE[Incorporar consulta localmente]
QE --> V
V -->|segmentos 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 todos os componentes correm na sua máquina.
MCP é um transporte, não um serviço na cloud. Um servidor MCP pode correr como processo local em stdio, expondo ferramentas para o 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, querys em bases de dados — inteiramente offline.
A postura de segurança é diferente da cloud, mas não ausente: um servidor MCP local corre ainda com as permissões do seu utilizador, por isso limite o que pode aceder (um diretório de projeto, não toda a sua pasta home) e trate as suas saídas como entradas a validar.
Local-primeiro não significa só 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-hop complexo em dados não sensíveis | Modelo Cloud |
| Tudo, durante uma falha | SLM Local (degradação suave) |
Isto reflete a ideia de roteamento de modelos da Lição 16 — exceto que um dos “modelos” é agora a sua própria máquina. Um design robusto recorre ao local quando a cloud está indisponível, de modo que o agente degrada em qualidade ao invés 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 nuvem]
L --> Out[Resposta]
Cloud --> Out
Abra code_samples/17-local-agent-foundry-local.ipynb e trabalhe nele. Vai construir um assistente de engenharia local que corre inteiramente na sua estação de trabalho e pode:
Em nenhum momento é usada inferência na cloud.
O assistente conecta ao Foundry Local pelo endpoint compatível com OpenAI, de modo que o código do agente é quase idêntico ao das lições na cloud — só o cliente muda:
from foundry_local import FoundryLocalManager
from openai import OpenAI
# Foundry Local descobre/transfera 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 placeholder local
As ferramentas são funções Python normais 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\")
Repare na verificação sandbox — mesmo localmente, uma ferramenta que lê caminhos arbitrários é um risco. O notebook mantém cada ferramenta limitada a uma raiz de projeto.
Teste o seu entendimento antes de passar para o trabalho prático.
1. Dê duas razões concretas para executar um agente localmente em vez de na cloud.
2. Qual é a divisão recomendada do trabalho entre um SLM e as suas ferramentas num agente local, e porquê?
3. O que torna possível reutilizar código de agente cloud com o Foundry Local?
4. Porque é que usamos especificamente um modelo Qwen com chamada de funções em vez de qualquer SLM?
5. No pipeline RAG local, que 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 ter?
7. Descreva uma regra sensata de roteamento híbrido que inclua um modelo local.
8. Qual é uma quantidade realista mínima de RAM para correr o agente local nesta lição, e o que ganha com mais RAM?
Expanda o assistente de engenharia local para um revisor local de documentação para um projeto pequeno à sua escolha (use uma das pastas de lições deste repositório, se quiser).
A sua submissão deve:
Adicionar uma ferramenta find_todos que varra o projeto em busca de comentários TODO/FIXME e os devolva com ficheiro e número de 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 local para este revisor, e porquê. Será avaliado sobre se os componentes locais estão ligados corretamente e se o seu raciocínio híbrido é sólido — não sobre a qualidade do modelo.
Nesta lição construiu um agente que corre inteiramente na sua própria máquina:
Isto completa o arco de implantação: a Lição 16 dimensionou agentes para a Microsoft Foundry, e esta lição reduziu-os para uma única estação de trabalho. A próxima lição aborda manter agentes implantados seguros.
Implantação de Agentes Escaláveis
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.