![]()
Até este ponto do curso, construíu agentes que funcionam no seu portátil, dentro de um notebook, impulsionados por az login e um conjunto de variáveis de ambiente. Essa é exatamente a maneira certa de aprender. Não é a maneira certa de executar um agente do qual milhares de clientes dependem às 3 da manhã.
Esta lição trata da lacuna entre “funciona na minha máquina” e “funciona, de forma fiável e acessível, em produção.” Fechamos essa lacuna usando o Microsoft Foundry e o Microsoft Foundry Agent Service, construindo um agente real de suporte ao cliente que dispõe de ferramentas, recuperação, memória, avaliação e monitorização.
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á:
az login).requirements.txt.Um agente protótipo e um agente em produção partilham o mesmo ciclo principal — raciocinar, chamar ferramentas, responder. O que muda é tudo o que está à volta desse ciclo. O modelo é talvez 20% de um agente em produção; os outros 80% são o esqueleto operacional.
| Preocupação | Protótipo | Produção |
|---|---|---|
| Hospedagem | Executa no seu notebook | Executa como serviço hospedado, versionado e implementado gradualmente |
| Identidade | Seu token az login |
Identidade gerida com RBAC com escopo |
| Estado | Na memória, perdido ao reiniciar | Externalizado (armazenamento de threads, serviço de memória) |
| Falhas | Vê o traceback | Retentativas, alternativas, dead-letter, alertas |
| Custo | “São uns cêntimos” | Monitorizado por pedido, roteado, cacheado, orçamentado |
| Qualidade | Avalia visualmente a saída | Avaliado automaticamente antes de cada lançamento |
| Confiança | Aprova cada ação | Política + interação humana para ações arriscadas |
Tenha esta tabela em mente. Cada secção abaixo corresponde a uma destas linhas.
Existem três padrões que usará, frequentemente em combinação.
O objeto agente vive dentro do processo da sua aplicação. O seu código chama diretamente o fornecedor do modelo; o ciclo de raciocínio corre no seu serviço. Isto é o que todas as lições anteriores fizeram.
O agente é registado como um recurso no Microsoft Foundry. O Foundry hospeda o ciclo de raciocínio, armazena threads, aplica segurança de conteúdo e RBAC, e torna o agente visível no portal Foundry. A sua app torna-se um cliente leve que cria threads e lê respostas.
Vários agentes (e ferramentas) são compostos num grafo com fluxo de controlo explícito — passos sequenciais, ramificações, nós de aprovação humana, e checkpoints duráveis que podem pausar e retomar. Esta é a capacidade de Workflows do Microsoft Agent Framework aplicada à escala de implementação.
flowchart TB
subgraph P1[Client-Hosted]
A1[Your App Process] --> M1[Model Provider]
end
subgraph P2[Hosted Agent]
A2[Thin Client] --> F2[Foundry Agent Service]
F2 --> M2[Model + Tools + Thread Store]
end
subgraph P3[Agent Workflow]
A3[Orchestrator] --> S1[Triage Agent]
S1 --> S2[Resolver Agent]
S2 --> H[Human Approval Node]
H --> S3[Action Agent]
end
Implementar um agente não é um ato único de push. É um ciclo, e parece muito com um ciclo de lançamento de software porque é exatamente isso.
flowchart LR
Create[Create / Author] --> Version[Version]
Version --> Evaluate[Evaluate offline]
Evaluate -->|passes gate| Deploy[Deploy hosted]
Evaluate -->|fails gate| Create
Deploy --> Observe[Observe online]
Observe --> Improve[Collect failures]
Improve --> Create
Deploy --> Retire[Retire old version]
A ideia chave, trazida da Lição 10: a avaliação offline é um portão, não um pensamento posterior. Uma nova versão do agente não é lançada a menos que ultrapasse os seus limites de avaliação. A observabilidade online alimenta então falhas reais no seu conjunto de testes offline. Esse é todo o ciclo.
Escalar um agente é diferente de escalar uma API web sem estado, porque cada pedido pode desencadear várias chamadas dispendiosas a modelos e ferramentas. Quatro técnicas suportam a maior parte da carga.
Tratamento sem estado por pedido. Não mantenha estado por utilizador na memória do seu processo. Persista os threads da conversação no armazenamento Foundry ou num serviço de memória para que qualquer instância possa tratar qualquer pedido. Isto permite escalar horizontalmente — adiciona instâncias, sem sessões coladas.
Roteamento do modelo. Nem todo pedido precisa do seu modelo mais capaz (e mais caro). Direcione pedidos simples — classificação de intenção, respostas factuais curtas — para um modelo pequeno e rápido, e reserve o modelo grande para raciocínio genuíno. O Model Router do Foundry pode fazer isso por si, ou pode implementar um classificador leve. Construirá a versão DIY no laboratório.
Cache de respostas. Muitas consultas de suporte são quase duplicadas (“como resetar a minha password?”). Cache respostas para perguntas comuns e sirva-as sem chamar o modelo. Mesmo uma taxa de acerto modesta no cache reduz significativamente o custo e latência.
Concorrência e retropressão. Fornecedores de modelo têm limites de taxa. Limite a sua concorrência, use retentativas com retrocesso exponencial, e falhe graciosamente (uma resposta enfileirada “estamos a tratar” é melhor do que um erro 500).
flowchart LR
Q[User query] --> C{Cache hit?}
C -->|yes| R[Return cached answer]
C -->|no| Router{Complexity?}
Router -->|simple| SLM[Small model]
Router -->|complex| LLM[Large model]
SLM --> Out[Response]
LLM --> Out
Out --> Store[Cache + trace]
Não pode operar o que não pode ver. Conforme abordado na Lição 10, o Microsoft Agent Framework emite rastreios OpenTelemetry nativamente — cada chamada de modelo, invocação de ferramenta e passo de orquestração torna-se um span. Em produção exporta esses spans para o Microsoft Foundry (ou qualquer backend compatível com OTel) para que possa:
from agent_framework.observability import get_tracer
tracer = get_tracer()
with tracer.start_as_current_span("support_request") as span:
span.set_attribute("customer.tier", "enterprise")
span.set_attribute("routed.model", "gpt-5-nano")
# agent execution is traced automatically inside this span
Atributos como customer.tier e routed.model transformam uma parede de rastreios em perguntas com respostas (“os clientes empresariais estão a ser roteados para o modelo pequeno com muita frequência?”).
O custo nos agentes de produção é dominado pelos tokens. Três alavancas, por ordem de impacto:
Portões de avaliação e controlo de custos são a mesma disciplina vista de dois ângulos: a avaliação indica o piso de qualidade, o roteamento e o cache mantêm o custo o mais próximo possível desse piso.
Governança. Agentes Hospedados herdam RBAC, segurança de conteúdo e auditoria do Foundry. Dê a cada agente uma identidade gerida com o mínimo privilégio necessário — acesso de leitura à base de conhecimento, acesso com escopo à API de tickets, nada mais.
Humano no ciclo. Algumas ações são demasiado importantes para automatizar completamente — emitir reembolso, eliminar uma conta, escalar para equipa legal. O Microsoft Agent Framework suporta ferramentas que requerem aprovação: o agente propõe a ação, a execução pausa, um humano aprova ou rejeita, e o workflow retoma. Viu o primitivo na Lição 6; aqui implementa-o.
MCP em produção. MCP permite que o seu agente consuma ferramentas externas através de uma interface padrão. Em produção, trate cada servidor MCP como uma fronteira não confiável: fixe a versão do servidor, execute com uma identidade com escopo, valide as suas saídas, e nunca exponha segredos a ele. Um servidor MCP é uma dependência, e dependências são patchadas, auditadas e limitadas em termos de taxa.
flowchart TB
subgraph Dev[Development Architecture]
D1[Notebook] --> D2[Agent Framework]
D2 --> D3[Model Provider]
D2 --> D4[Local tools]
end
subgraph Deploy[Deployment Architecture]
E1[CI pipeline] --> E2[Evaluation gate]
E2 -->|pass| E3[Foundry Agent Service]
E3 --> E4[Versioned hosted agent]
end
subgraph Run[Runtime Architecture]
F1[Client app] --> F2[Hosted agent]
F2 --> F3[Model Router]
F2 --> F4[Azure AI Search RAG]
F2 --> F5[Memory service]
F2 --> F6[MCP tools]
F2 --> F7[OTel -> Foundry tracing]
F2 --> F8[Human approval]
end
Esses três diagramas — desenvolvimento, implementação, runtime — são o mesmo agente em três fases da sua vida. O laboratório que se segue guia-o na sua construção.
Abra code_samples/16-python-agent-framework.ipynb e trabalhe nele de ponta a ponta. Vai montar um agente de suporte ao cliente Contoso com todas as preocupações de produção integradas:
O notebook está organizado para que cada preocupação de produção seja uma secção autónoma e executável. O núcleo é o manipulador de pedidos com roteamento mais caching:
async def handle_support_request(query: str, customer_id: str) -> str:
# 1. Serve from cache when we can.
cached = response_cache.get(normalize(query))
if cached:
return cached
# 2. Route by complexity to control cost.
model = "gpt-5-nano" if is_simple(query) else "gpt-5-mini"
# 3. Run the agent inside a trace span for observability.
with tracer.start_as_current_span("support_request") as span:
span.set_attribute("routed.model", model)
span.set_attribute("customer.id", customer_id)
response = await support_agent.run(query, model=model)
# 4. Cache and return.
response_cache.set(normalize(query), response.text)
return response.text
O portão de avaliação que protege um lançamento é assim:
async def evaluation_gate(agent, test_cases, threshold: float = 0.8) -> bool:
passed = 0
for case in test_cases:
result = await agent.run(case["input"])
if score_response(result.text, case["expected"]) >= 0.8:
passed += 1
pass_rate = passed / len(test_cases)
print(f"Evaluation pass rate: {pass_rate:.0%} (gate: {threshold:.0%})")
return pass_rate >= threshold # only deploy if the gate passes
Leia cada linha — o notebook mantém os primitivos deliberadamente pequenos para que nada fique escondido atrás de uma chamada a framework.
O portão de avaliação acima é executado offline contra o seu objeto agente. Depois de o agente ser implementado como Hosted Agent, há mais uma verificação, ainda mais barata: o endpoint implementado está realmente a responder?
Implementar “com sucesso” só prova que o plano de controlo aceitou a definição — não prova que o agente responde. Uma dependência em falta, um roteamento de modelo incorreto, ou uma ligação expirada podem deixar uma implementação verde que não retorna nada. Um teste smoke detecta isso em segundos, em cada implementação, sem o custo de uma avaliação completa.
Este repositório traz uma pipeline de teste smoke pronta a usar, baseada na Action GitHub AI Smoke Test:
tests/lesson-16-smoke-tests.json contém prompts e asserções para o agente de suporte Contoso (respostas a políticas fundamentadas, consulta de encomendas, manter o tema, e continuidade em múltiplas voltas). Catálogos para agentes de outras lições vivem ao seu lado — veja tests/README.md..github/workflows/smoke-test.yml autentica com Azure OIDC e envia cada prompt ao endpoint Responses do agente, falhando o trabalho em qualquer falha de asserção.- name: Smoke-test hosted agent
uses: JFolberth/ai-smoketest@v1
with:
project_endpoint: $
agent_name: ContosoSupportAgent
tests_file: tests/lesson-16-smoke-tests.json
Execute-a a partir do separador Actions assim que o seu agente estiver lançado, fornecendo o endpoint do seu projeto Foundry e o nome do agente. A identidade federada necessita da função Azure AI User no âmbito do projeto Foundry. Pense nas camadas como uma pirâmide: os testes rápidos (acessível e a responder?) correm a cada implantação, a avaliação offline (boa o suficiente para ser lançada?) corre antes da promoção, e a avaliação online (como está a correr no contexto real?) corre continuamente.
Teste a sua compreensão antes de passar para a tarefa.
1. Aproximadamente quanto de um agente em produção é “o modelo” e o que é o restante?
2. Quando escolheria um Agente Hospedado em vez de um agente hospedado no cliente?
3. Porque deve um agente escalável ser sem estado na sua própria memória do processo?
4. Que problema resolve o encaminhamento do modelo e como se relaciona com a avaliação?
5. O que é um “portão de avaliação” e onde ele se situa no ciclo de vida?
6. Porque deve um servidor MCP ser tratado como um limite não confiável em produção?
7. Qual mudança única normalmente tem o maior impacto no custo de um agente em produção, e porquê?
8. Que papel desempenham atributos de span como customer.tier e routed.model na observabilidade?
Pegue no agente de suporte ao cliente do laboratório e fortaleça-o para um cenário específico: um agente de suporte de faturação de subscrições para uma empresa SaaS.
A sua submissão deve:
get_subscription_status, get_invoice, e issue_credit (créditos acima de $50 requerem aprovação humana).Escreva um parágrafo curto (numa célula markdown) explicando qual regra de encaminhamento de modelo escolheu e como a validaria com tráfego real. Não há uma resposta correta única — será avaliado se as preocupações de produção estão integradas de forma coerente.
Nesta lição, passou um agente de protótipo para produção com o Microsoft Foundry:
A próxima lição faz a viagem inversa: em vez de escalar agentes para a cloud, vai trazê-los para baixo para uma única máquina de desenvolvimento e executar tudo localmente.
Construção de Agentes de Utilização de Computador (CUA)
Criação de Agentes de IA Locais
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.