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.
Este artigo mostra como implantar um agente em contêineres no Serviço do Foundry Agent usando o SDK Python ou a API REST. Use essas abordagens quando quiser gerenciar implantações de agente diretamente de seus próprios aplicativos ou serviços.
Se você estiver implantando pela primeira vez ou quiser o caminho mais rápido, use o Início Rápido: Criar e implantar um agente hospedado . O início rápido usa a CLI do Azure Developer (azd) ou a extensão do VS Code, que gerencia automaticamente a criação, o push, o controle de versão e a configuração do RBAC.
Ciclo de vida da implantação
Cada implantação de agente hospedado segue esta sequência:
- Construir e enviar — Empacote o código do agente em uma imagem de contêiner e envie-a para o Registro de Contêiner do Azure.
- Criar uma versão do agente – registre a imagem com o Serviço do Foundry Agent. A plataforma provisiona a infraestrutura e cria uma identidade de agente do Entra dedicada.
-
Sondar o status — aguarde até que o status da versão seja atingido
active. - Invocar – Enviar solicitações para o endpoint dedicado do agente.
Pré-requisitos
- Um projeto Microsoft Foundry.
- Código do agente usando uma estrutura com suporte.
- Docker Desktop instalado para desenvolvimento de contêiner local.
- CLI do Azure versão 2.80 ou posterior.
Permissões necessárias
Você precisa de Gerente de Projeto de Azure AI no escopo do projeto para criar e implantar agentes hospedados. Essa função inclui as permissões do plano de dados para criar agentes e a capacidade de atribuir a função Azure Usuário de IA à identidade do agente criada pela plataforma. A identidade do agente precisa de Azure AI User no projeto para acessar modelos e artefatos em tempo de execução.
Se você usar azd ou a extensão do VS Code, a ferramenta manipulará a maioria das atribuições de RBAC automaticamente, incluindo:
- Leitor do Repositório do Registro de Contêiner para a identidade gerenciada do projeto (extrações de imagem)
- Azure Usuário de IA para a identidade do agente criada pela plataforma (modelo de runtime e acesso à ferramenta)
Nota
A plataforma cria uma identidade de agente do Entra dedicado para cada agente hospedado no momento da implantação. Essa identidade é um princípio de serviço que o contêiner em execução usa para chamar modelos e ferramentas. Você não precisa configurar identidades gerenciadas manualmente. No entanto, o usuário que cria o agente deve ter permissão para atribuir Usuário do Azure IA a essa identidade — é por isso que Azure AI Project Manager é recomendado em vez de apenas Usuário do Azure IA.
Nota
Embora as extensões azd e VS Code lidem automaticamente com atribuições de RBAC básicas, cenários complexos podem exigir configuração manual adicional. Para obter detalhes abrangentes sobre todas as permissões e atribuições de função envolvidas, consulte a referência de permissões do agente hospedado.
Para obter mais informações, consulte Autenticação e autorização.
Importante
O Registro de Contêiner do Azure que armazena a imagem de contêiner do agente hospedado deve estar atualmente acessível através de seu ponto de extremidade público. Atualmente, não há suporte para colocar o registro atrás de uma rede privada (ponto de extremidade privado com acesso à rede pública desabilitado) para agentes hospedados. A plataforma, consequentemente, não pode recuperar a imagem. Para obter a lista completa de restrições de rede, consulte Limitações.
Requisitos de contêiner
Sua imagem de contêiner deve atender aos seguintes requisitos para ser executada na plataforma do agente hospedado.
Importante
A plataforma de hospedagem requer imagens de contêiner x86_64 (linux/amd64). Se você estiver trabalhando com Apple Silicon ou outras máquinas baseadas em ARM, use docker build --platform linux/amd64 . para evitar gerar uma imagem ARM incompatível.
Bibliotecas de protocolo
Os agentes hospedados se comunicam com o gateway do Foundry por meio de bibliotecas de protocolo. Escolha o protocolo que corresponde ao padrão de interação do agente:
| Protocolo | biblioteca de Python | biblioteca de .NET | Endpoint | Melhor para |
|---|---|---|---|---|
| Respostas | azure-ai-agentserver-responses |
Azure.AI.AgentServer.Responses |
/responses |
Chatbots de conversação, streaming, vários turnos com histórico gerenciado pela plataforma |
| Invocações | azure-ai-agentserver-invocations |
Azure.AI.AgentServer.Invocations |
/invocations |
Receptores de webhook, processamento não conversacional, fluxos de trabalho assíncronos personalizados |
Um único contêiner pode expor os dois protocolos simultaneamente declarando ambos quando você cria o agente — no agent.yaml arquivo, na chamada do SDK ou na solicitação da API REST — e importando ambas as bibliotecas. Use as bibliotecas de protocolo em sua estrutura existente, seja Microsoft Agent Framework, LangChain ou código personalizado.
Pontos de verificação de saúde
As bibliotecas de protocolo expõem automaticamente um /readiness endpoint para verificações de integridade da plataforma. Você não precisa implementar isso por conta própria.
Porta
Os contêineres atendem o tráfego na porta 8088 localmente. Em produção, o gateway do Foundry cuida do roteamento, e o contêiner não precisa expor uma porta de rede pública.
Variáveis de ambiente injetadas na plataforma
A plataforma do agente hospedado injeta automaticamente variáveis de ambiente em seu contêiner em runtime. Seu código pode lê-los sem declará-los em agent.yaml ou environment_variables. O FOUNDRY_* prefixo é reservado para uso de plataforma.
| Variável | Propósito |
|---|---|
FOUNDRY_PROJECT_ENDPOINT |
URL do endpoint do projeto Foundry |
FOUNDRY_PROJECT_ARM_ID |
ID do recurso ARM do projeto Foundry |
FOUNDRY_AGENT_NAME |
Nome do agente em execução |
FOUNDRY_AGENT_VERSION |
Versão do agente em execução |
FOUNDRY_AGENT_SESSION_ID |
ID da sessão para a solicitação atual (somente contêineres hospedados) |
APPLICATIONINSIGHTS_CONNECTION_STRING |
String de conexão do Application Insights para telemetria |
Não redeclare variáveis injetadas na plataforma em agent.yaml : elas são definidas automaticamente.
Variáveis que você declara, como MODEL_DEPLOYMENT_NAME ou pontos de extremidade MCP da caixa de ferramentas, são inseridas na seção environment_variables de agent.yaml ou na chamada do SDK create_version.
Empacote e execute teste no seu agente em ambiente local
Antes de implantar no Foundry, valide se o agente funciona localmente usando a biblioteca de protocolos. O contêiner atende aos mesmos pontos de extremidade localmente como em produção.
Testar o protocolo de respostas
POST http://localhost:8088/responses
Content-Type: application/json
{
"input": "Where is Seattle?",
"stream": false
}
Testar o protocolo de Invocações
POST http://localhost:8088/invocations
Content-Type: application/json
{
"message": "Hello!"
}
Implantar usando a CLI do desenvolvedor Azure ou o VS Code
A CLI do Desenvolvedor do Azure (azd) e a extensão do VS Code automatizam o ciclo de vida de implantação completa. Para obter um passo a passo passo, consulte o Início Rápido: Criar e implantar um agente hospedado.
Implantar usando o SDK do Python
Use o SDK quando quiser gerenciar implantações de agente diretamente de Python código.
Pré-requisitos adicionais
Uma imagem de contêiner em Registro de Contêiner do Azure
Escritor do Repositório de Registro de Contêiner ou AcrPush no registro de contêiner (para envio de imagens)
Azure SDK de Projetos de IA versão 2.1.0 ou posterior
pip install "azure-ai-projects>=2.1.0"
Compilar e efetuar push da imagem do contêiner
Crie sua imagem do Docker:
docker build --platform linux/amd64 -t myagent:v1 .Envie por push para Registro de Contêiner do Azure:
az acr login --name myregistry docker tag myagent:v1 myregistry.azurecr.io/myagent:v1 docker push myregistry.azurecr.io/myagent:v1
Dica
Use marcas de imagem exclusivas em vez de :latest para implantações reproduzíveis.
Configurar permissões do Registro de Contêiner
Conceda acesso à identidade gerenciada do projeto para efetuar pull de imagens:
No portal Azure, acesse o recurso de projeto do Foundry.
Selecione Identidade e copie a ID do Objeto (principal) sob Sistema atribuído.
Atribua a função Leitor do Repositório de Registro de Contêiner a essa identidade no registro de contêiner. Consulte Registro de Contêiner do Azure funções e permissões.
Criar uma versão do agente hospedado
A criação de uma versão dispara a plataforma para provisionar o agente automaticamente. Não há uma etapa inicial separada: a plataforma cria um instantâneo de contêiner e prepara o agente para atender às solicitações.
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import HostedAgentDefinition, ProtocolVersionRecord, AgentProtocol
from azure.identity import DefaultAzureCredential
# Format: "https://resource_name.services.ai.azure.com/api/projects/project_name"
PROJECT_ENDPOINT = "your_project_endpoint"
# Create project client
credential = DefaultAzureCredential()
project = AIProjectClient(
endpoint=PROJECT_ENDPOINT,
credential=credential,
allow_preview=True,
)
# Create a hosted agent version
agent = project.agents.create_version(
agent_name="my-agent",
definition=HostedAgentDefinition(
container_protocol_versions=[
ProtocolVersionRecord(protocol=AgentProtocol.RESPONSES, version="1.0.0")
],
cpu="1",
memory="2Gi",
image="your-registry.azurecr.io/your-image:tag",
environment_variables={
"MODEL_DEPLOYMENT_NAME": "gpt-5-mini"
}
)
)
print(f"Agent created: {agent.name}, version: {agent.version}")
Para expor ambos os protocolos, passe-os ambos no container_protocol_versions
container_protocol_versions=[
ProtocolVersionRecord(protocol=AgentProtocol.RESPONSES, version="1.0.0"),
ProtocolVersionRecord(protocol=AgentProtocol.INVOCATIONS, version="1.0.0")
],
Parâmetros de chave:
| Parâmetro | Descrição |
|---|---|
agent_name |
Nome exclusivo (alfanumérico com hifens, máximo de 63 caracteres) |
image |
URL completa de imagem do Registro de Contêiner do Azure com tag |
cpu |
Alocação de CPU (por exemplo, "1") |
memory |
Alocação de memória (por exemplo, "2Gi") |
container_protocol_versions |
Protocolos que o contêiner expõe (responsesou invocationsambos) |
Consultar o status da versão
Depois de criar uma versão, verifique repetidamente até que o status seja active antes de invocar o agente. O provisionamento normalmente leva menos de um minuto, dependendo do tamanho da imagem.
import time
# Poll until the agent version is active
while True:
version_info = project.agents.get_version(
agent_name="my-agent",
agent_version=agent.version
)
status = version_info["status"]
print(f"Status: {status}")
if status == "active":
print("Agent is ready!")
break
elif status == "failed":
print(f"Provisioning failed: {version_info['error']}")
break
time.sleep(5)
Valores de status de versão:
| Status | Descrição |
|---|---|
creating |
Provisionamento de infraestrutura em andamento |
active |
O agente está pronto para atender às solicitações |
failed |
Falha no provisionamento – verifique o error campo para obter detalhes |
deleting |
A versão está sendo limpa |
deleted |
A versão foi totalmente removida |
Invocar o agente
Depois que a versão atingir active status, use get_openai_client para criar um cliente OpenAI associado ao endpoint do agente.
Para o protocolo Respostas :
# Create an OpenAI client bound to the agent endpoint
openai_client = project.get_openai_client(agent_name="my-agent")
response = openai_client.responses.create(
input="Hello! What can you do?",
)
print(response.output_text)
Para o protocolo de Invocações, chame diretamente o endpoint de invocações:
import requests
token = credential.get_token("https://ai.azure.com/.default").token
url = f"{PROJECT_ENDPOINT}/agents/my-agent/endpoint/protocols/invocations"
response = requests.post(url, headers={
"Authorization": f"Bearer {token}",
"Content-Type": "application/json",
"Foundry-Features": "HostedAgents=V1Preview"
}, params={"api-version": "v1"}, json={
"message": "Process this task"
})
print(response.json())
Para obter exemplos mais completos, consulte os exemplos de agente hospedado.
Implantar usando a API REST
Use a API REST para implantações diretas baseadas em HTTP ou ao integrar com ferramentas personalizadas.
Antes de começar, crie e envie por push sua imagem de contêiner e configure permissões de registro de contêiner.
Configurar variáveis
BASE_URL="https://{account}.services.ai.azure.com/api/projects/{project}"
API_VERSION="v1"
TOKEN=$(az account get-access-token --resource https://ai.azure.com --query accessToken -o tsv)
Criar um agente
curl -X POST "$BASE_URL/agents?api-version=$API_VERSION" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "my-agent",
"definition": {
"kind": "hosted",
"image": "myacr.azurecr.io/my-agent:v1",
"cpu": "1",
"memory": "2Gi",
"container_protocol_versions": [
{"protocol": "responses", "version": "1.0.0"}
],
"environment_variables": {
"MODEL_DEPLOYMENT_NAME": "gpt-5-mini"
}
}
}'
A criação de um agente também cria a versão 1 e dispara o provisionamento.
Consultar o status da versão
Sondar o ponto de extremidade de versão até que status seja active.
while true; do
STATUS=$(curl -s -X GET "$BASE_URL/agents/my-agent/versions/1?api-version=$API_VERSION" \
-H "Authorization: Bearer $TOKEN" | jq -r '.status')
echo "Status: $STATUS"
[ "$STATUS" = "active" ] && echo "Ready!" && break
[ "$STATUS" = "failed" ] && echo "Provisioning failed." && exit 1
sleep 5
done
Invocar o agente
Utilize o ponto de extremidade dedicado do agente para enviar solicitações. Defina "stream": true para receber eventos enviados pelo servidor.
Protocolo de respostas:
curl -X POST "$BASE_URL/agents/my-agent/endpoint/protocols/openai/responses?api-version=$API_VERSION" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"input": "Hello! What can you do?",
"store": true
}'
Protocolo de invocações:
curl -X POST "$BASE_URL/agents/my-agent/endpoint/protocols/invocations?api-version=$API_VERSION" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-H "Foundry-Features: HostedAgents=V1Preview" \
-d '{
"message": "Process this task"
}'
Criar uma nova versão
Implante o código ou a configuração atualizados criando uma nova versão:
curl -X POST "$BASE_URL/agents/my-agent/versions?api-version=$API_VERSION" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"definition": {
"kind": "hosted",
"image": "myacr.azurecr.io/my-agent:v2",
"cpu": "1",
"memory": "2Gi",
"container_protocol_versions": [
{"protocol": "responses", "version": "1.0.0"}
],
"environment_variables": {
"MODEL_DEPLOYMENT_NAME": "gpt-5-mini"
}
}
}'
Limpar recursos
Para evitar custos, libere os recursos quando terminar. A computação do agente é desprovisionada após 15 minutos de inatividade, portanto, não há custo quando um agente não está atendendo solicitações.
Ferramenta de Limpeza do CLI para Desenvolvedores do Azure
azd down
Limpeza do SDK
Excluir uma única versão:
project.agents.delete_version(agent_name="my-agent", agent_version=agent.version)
Ou exclua todo o agente e todas as suas versões:
project.agents.delete(agent_name="my-agent")
Limpeza da API REST
Excluir uma única versão:
curl -X DELETE "$BASE_URL/agents/my-agent/versions/1?api-version=$API_VERSION" \
-H "Authorization: Bearer $TOKEN"
Ou exclua todo o agente:
curl -X DELETE "$BASE_URL/agents/my-agent?api-version=$API_VERSION" \
-H "Authorization: Bearer $TOKEN"
Aviso
Excluir um agente remove todas as suas versões e encerra as sessões ativas. Esta ação não pode ser desfeita.
Solucionando problemas
Erros de provisionamento aparecem nos campos error.code e error.message do objeto de versão. Verifique o status da versão após a criação para identificar problemas.
| Código de erro | Código HTTP | Solução |
|---|---|---|
image_pull_failed |
400 | Verifique se o URI da imagem está correto e se a identidade gerenciada do projeto tem o Leitor do Repositório de Registro de Contêiner no ACR |
SubscriptionIsNotRegistered |
400 | Registrar o provedor de assinatura |
InvalidAcrPullCredentials |
401 | Corrigir a identidade gerenciada ou o RBAC do registro |
UnauthorizedAcrPull |
403 | Fornecer credenciais ou identidade corretas |
AcrImageNotFound |
404 | Corrigir nome/tag da imagem ou publicar imagem |
RegistryNotFound |
400/404 | Corrigir o DNS do Registro ou a acessibilidade de rede |
Para erros 5xx, entre em contato com Microsoft suporte.
Para obter requisitos de RBAC detalhados e solução de problemas de permissão, consulte a referência de permissões do agente hospedado.