Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
os agentes Hosted no Microsoft Foundry Agent Service permitem implantar agentes do Agent Framework como aplicativos em contêineres para infraestrutura gerenciada por Microsoft. A plataforma lida com dimensionamento, persistência de estado de sessão, segurança e gerenciamento de ciclo de vida para que você possa se concentrar na lógica do agente.
Com a integração de hospedagem do Agent Framework, você pode pegar qualquer Agent ou fluxo de trabalho e expô-lo por meio do protocolo Foundry Responses ou Invocations com código mínimo.
Quando usar agentes hospedados
Escolha os agentes hospedados do Foundry quando quiser.
- Infraestrutura gerenciada – não é necessário configurar contêineres, servidores Web ou regras de dimensionamento por conta própria.
-
Gerenciamento de sessão interno – a plataforma mantém a persistência de sessões e arquivos carregados através de turnos e períodos ociosos
$HOME. - Identidade do agente dedicado – cada agente implantado obtém sua própria identidade de Entra para acesso seguro a modelos, ferramentas e serviços downstream.
- Endpoints compatíveis com OpenAI – os clientes podem interagir com seu agente usando qualquer SDK compatível com OpenAI através do protocolo Responses.
Note
Atualmente, os agentes hospedados no Foundry estão em versão prévia. Consulte a documentação de agentes hospedados da Foundry para obter a disponibilidade, os limites e os preços mais recentes.
Pré-requisitos
- Uma assinatura de Azure
-
CLI do Desenvolvedor do Azure (
azd) com a extensão do agente de IA:azd ext install azure.ai.agents
Para testes locais, você também precisa:
- Um projeto Microsoft Foundry com a implantação de um modelo (por exemplo,
gpt-4o) -
CLI do Azure instalada e autenticada (
az login)
- SDK do .NET 10 ou posterior
Instale o pacote NuGet de hospedagem:
dotnet add package Microsoft.Agents.AI.Foundry.Hosting --prerelease
dotnet add package Azure.AI.Projects --prerelease
- Python 3.10 ou posterior
Instale o pacote de Python de hospedagem:
pip install agent-framework agent-framework-foundry-hosting
Protocolo de respostas
O protocolo Respostas é o ponto de partida recomendado para a maioria dos agentes. Ele expõe um endpoint compatível com /responses OpenAI e a plataforma gerencia automaticamente o histórico das conversas, o streaming e o ciclo de vida das sessões.
using Azure.AI.AgentServer.Core;
using Azure.AI.Projects;
using Azure.Identity;
using Microsoft.Agents.AI;
using Microsoft.Agents.AI.Foundry.Hosting;
var projectEndpoint = new Uri(Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT")
?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT is not set."));
var deployment = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-4o";
AIAgent agent = new AIProjectClient(projectEndpoint, new DefaultAzureCredential())
.AsAIAgent(
model: deployment,
instructions: "You are a helpful AI assistant.",
name: "my-agent");
var builder = AgentHost.CreateBuilder(args);
builder.Services.AddFoundryResponses(agent);
builder.RegisterProtocol("responses", endpoints => endpoints.MapFoundryResponses());
var app = builder.Build();
app.Run();
O AgentHost.CreateBuilder cria um host de aplicativo pré-configurado para o ambiente de hospedagem do Foundry.
AddFoundryResponses registra seu agente com o manipulador de protocolo Responses e MapFoundryResponses mapeia o /responses endpoint HTTP.
import os
from agent_framework import Agent
from agent_framework.foundry import FoundryChatClient
from agent_framework_foundry_hosting import ResponsesHostServer
from azure.identity import DefaultAzureCredential
client = FoundryChatClient(
project_endpoint=os.environ["FOUNDRY_PROJECT_ENDPOINT"],
model=os.environ["AZURE_AI_MODEL_DEPLOYMENT_NAME"],
credential=DefaultAzureCredential(),
)
agent = Agent(
client=client,
instructions="You are a helpful AI assistant.",
default_options={"store": False},
)
server = ResponsesHostServer(agent)
server.run()
O ResponsesHostServer encapsula seu agente e o expõe por meio do protocolo Foundry Responses. A configuração de store para False em default_options evita a duplicação do histórico de conversas, já que a infraestrutura de hospedagem gerencia o histórico automaticamente.
Protocolo de invocações
O protocolo Invocações fornece controle total sobre a solicitação HTTP e a resposta. Use-o quando precisar de cargas personalizadas, processamento não conversacional ou protocolos de streaming que não sejam compatíveis com OpenAI.
Com o protocolo Invocações em C#, você implementa uma classe personalizada InvocationHandler para processar solicitações de entrada:
using Azure.AI.AgentServer.Core;
using Azure.AI.AgentServer.Invocations;
using Microsoft.Agents.AI;
var builder = AgentHost.CreateBuilder(args);
builder.Services.AddSingleton<AIAgent, MyAgent>();
builder.Services.AddInvocationsServer();
builder.Services.AddScoped<InvocationHandler, MyInvocationHandler>();
builder.RegisterProtocol("invocations", endpoints => endpoints.MapInvocationsServer());
var app = builder.Build();
app.Run();
O método AddInvocationsServer registra os serviços do Protocolo de Invocações. Você implementa InvocationHandler para definir como seu agente processa cada solicitação.
Para uma configuração leve, use InvocationsHostServer do pacote agent_framework_foundry_hosting. Ele encapsula seu agente da mesma forma ResponsesHostServer e manipula o gerenciamento de sessão automaticamente:
import os
from agent_framework import Agent
from agent_framework.foundry import FoundryChatClient
from agent_framework_foundry_hosting import InvocationsHostServer
from azure.identity import DefaultAzureCredential
client = FoundryChatClient(
project_endpoint=os.environ["FOUNDRY_PROJECT_ENDPOINT"],
model=os.environ["AZURE_AI_MODEL_DEPLOYMENT_NAME"],
credential=DefaultAzureCredential(),
)
agent = Agent(
client=client,
instructions="You are a friendly assistant. Keep your answers brief.",
default_options={"store": False},
)
server = InvocationsHostServer(agent)
server.run()
Para obter controle total sobre o tratamento de solicitações, use InvocationAgentServerHost diretamente do azure.ai.agentserver.invocations pacote e implemente seu próprio manipulador de invocação:
import os
from collections.abc import AsyncGenerator
from agent_framework import Agent, AgentSession
from agent_framework.foundry import FoundryChatClient
from azure.ai.agentserver.invocations import InvocationAgentServerHost
from azure.identity import DefaultAzureCredential
from starlette.requests import Request
from starlette.responses import JSONResponse, Response, StreamingResponse
_sessions: dict[str, AgentSession] = {}
client = FoundryChatClient(
project_endpoint=os.environ["FOUNDRY_PROJECT_ENDPOINT"],
model=os.environ["AZURE_AI_MODEL_DEPLOYMENT_NAME"],
credential=DefaultAzureCredential(),
)
agent = Agent(
client=client,
instructions="You are a friendly assistant. Keep your answers brief.",
default_options={"store": False},
)
app = InvocationAgentServerHost()
@app.invoke_handler
async def handle_invoke(request: Request):
"""Handle streaming multi-turn chat."""
data = await request.json()
session_id = request.state.session_id
stream = data.get("stream", False)
user_message = data.get("message", None)
if user_message is None:
return Response(content="Missing 'message' in request", status_code=400)
session = _sessions.setdefault(session_id, AgentSession(session_id=session_id))
if stream:
async def stream_response() -> AsyncGenerator[str]:
async for update in agent.run(user_message, session=session, stream=True):
yield update.text
return StreamingResponse(
stream_response(),
media_type="text/event-stream",
headers={"Cache-Control": "no-cache", "Connection": "keep-alive"},
)
response = await agent.run([user_message], session=session, stream=stream)
return JSONResponse({"response": response.text})
if __name__ == "__main__":
app.run()
Aviso
O repositório de sessão na memória no exemplo do manipulador personalizado é perdido na reinicialização. Use o armazenamento durável (por exemplo, Cosmos DB) em produção.
Dica
Consulte os exemplos Python ou os exemplos C# para obter exemplos de um projeto de agente hospedado. Ou use o azd ai agent init comando para estruturar um novo projeto de agente hospedado do zero. Consulte este guia de início rápido para obter instruções passo a passo.
Execução local
A CLI do desenvolvedor Azure (azd) fornece a maneira mais fácil de executar e testar seu agente hospedado localmente.
Inicializar um projeto
Crie uma nova pasta e inicialize a partir de um manifesto de exemplo:
mkdir my-hosted-agent && cd my-hosted-agent
azd ai agent init -m <path-to-agent.manifest.yaml>
Dica
O manifesto pode ser um caminho para um arquivo YAML local ou uma URL para um manifesto remoto.
Definir variáveis de ambiente
export FOUNDRY_PROJECT_ENDPOINT="https://<account>.services.ai.azure.com/api/projects/<project>"
export AZURE_AI_MODEL_DEPLOYMENT_NAME="<your-model-deployment>"
Executar o host do agente
azd ai agent run
O host do agente começa em http://localhost:8088.
Invocar o agente
azd ai agent invoke --local "Hello!"
Ou use curl:
curl -X POST http://localhost:8088/responses \
-H "Content-Type: application/json" \
-d '{"input": "Hello!"}'
Ou no PowerShell:
(Invoke-WebRequest -Uri http://localhost:8088/responses -Method POST -ContentType "application/json" -Body '{"input": "Hello!"}').Content
Implantando na Foundry
Depois de verificar o agente localmente, implante-o no Microsoft Foundry:
Provisionar recursos (se você ainda não tiver um projeto do Foundry):
azd provisionIsso cria um grupo de recursos com uma instância do Foundry, um projeto, uma implantação de modelo, o Application Insights e um registro de contêiner.
Implante o agente:
azd deployIsso empacota seu agente como uma imagem de contêiner, envia-o por push para Registro de Contêiner do Azure e o implanta no Serviço do Foundry Agent.
A infraestrutura de hospedagem do Foundry injeta automaticamente as seguintes variáveis de ambiente no contêiner do agente em runtime:
| Variável | Description |
|---|---|
FOUNDRY_PROJECT_ENDPOINT |
URL do endpoint do projeto Foundry. |
AZURE_AI_MODEL_DEPLOYMENT_NAME |
O nome do modelo de implantação (configurado durante azd ai agent init). |
APPLICATIONINSIGHTS_CONNECTION_STRING |
A cadeia de conexão do Application Insights para telemetria. |
Depois de implantado, o agente fica acessível por meio do ponto de extremidade dedicado do Foundry e também pode ser testado no portal do Foundry.