Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se muestra cómo administrar agentes hospedados en el servicio de agente Foundry Agent Service. Después de implementar un agente hospedado, puede ver su estado, crear nuevas versiones, configurar el enrutamiento del tráfico, supervisar los registros y eliminar agentes cuando ya no sean necesarios.
La plataforma administra automáticamente el ciclo de vida del contenedor. Los recursos de computación se aprovisionan cuando llega una solicitud y se desaprovisionan después de un tiempo de inactividad de 15 minutos. No hay operaciones de inicio ni detención manuales.
Requisitos previos
-
CLI de Azure versión 2.80 o posterior, autenticado con
az login.
- SDK de Python:
azure-ai-projects>=2.1.0yazure-identity.
Azure CLI para desarrolladores versión 1.23.0 o posterior.
La extensión de Agentes Foundry:
azd ext install azure.ai.agents
Configurar variables
En los ejemplos de la API REST de este artículo se utiliza az rest para llamar directamente a los endpoints del servicio Foundry Agent. Establezca las siguientes variables antes de ejecutar los comandos:
ACCOUNT_NAME="<your-foundry-account-name>"
PROJECT_NAME="<your-project-name>"
AGENT_NAME="<your-agent-name>"
BASE_URL="https://${ACCOUNT_NAME}.services.ai.azure.com/api/projects/${PROJECT_NAME}"
API_VERSION="v1"
RESOURCE="https://ai.azure.com"
Importante
El --resource parámetro es necesario para todas las llamadas a los az rest puntos de conexión del plano de datos del servicio Foundry Agent. Sin ella, az rest no puede derivar la audiencia de AD Azure correcta de la dirección URL y se produce un error de autenticación.
Visualización de agentes y versiones
Use los siguientes comandos para enumerar agentes e inspeccionar los detalles de la versión.
Enumeración de todos los agentes de un proyecto
az rest --method GET \
--url "${BASE_URL}/agents?api-version=${API_VERSION}" \
--resource "${RESOURCE}"
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
project = AIProjectClient(
endpoint=PROJECT_ENDPOINT,
credential=DefaultAzureCredential(),
)
for agent in project.agents.list():
print(agent.name)
azd ai agent show
Nota
azd ai agent show lee el nombre del agente y la versión de la entrada de servicio en la azd configuración del proyecto.
Obtención de los detalles del agente
az rest --method GET \
--url "${BASE_URL}/agents/${AGENT_NAME}?api-version=${API_VERSION}" \
--resource "${RESOURCE}"
La respuesta incluye la versión, el estado y la definición más recientes del agente.
agent = project.agents.get(agent_name="my-agent")
print(f"Name: {agent.name}")
print(f"Status: {agent.versions['latest']['status']}")
azd ai agent show
Obtención de una versión específica
az rest --method GET \
--url "${BASE_URL}/agents/${AGENT_NAME}/versions/1?api-version=${API_VERSION}" \
--resource "${RESOURCE}"
agent_version = project.agents.get_version(
agent_name="my-agent", agent_version="1"
)
print(f"Version: {agent_version.version}")
print(f"Status: {agent_version['status']}")
La información de versión se incluye en la salida de azd ai agent show.
Enumerar todas las versiones de un agente
az rest --method GET \
--url "${BASE_URL}/agents/${AGENT_NAME}/versions?api-version=${API_VERSION}" \
--resource "${RESOURCE}"
for version in project.agents.list_versions(agent_name="my-agent"):
print(f"Version: {version.version}, Status: {version['status']}")
La información de versión se incluye en la salida de azd ai agent show.
Creación de una nueva versión
Cree una nueva versión del agente cuando necesite actualizar la imagen de contenedor, cambiar la asignación de recursos o modificar variables de entorno.
az rest --method POST \
--url "${BASE_URL}/agents/${AGENT_NAME}/versions?api-version=${API_VERSION}" \
--resource "${RESOURCE}" \
--body '{
"definition": {
"kind": "hosted",
"image": "myregistry.azurecr.io/my-agent:v2",
"cpu": "1",
"memory": "2Gi",
"container_protocol_versions": [
{"protocol": "responses", "version": "1.0.0"}
]
}
}'
Reemplaza responses con invocations si tu agente usa el protocolo Invocaciones, o incluye ambos para exponer ambos protocolos. Para obtener más información sobre la selección de protocolos, consulte Implementación de un agente hospedado.
from azure.ai.projects.models import HostedAgentDefinition, ProtocolVersionRecord
agent = project.agents.create_version(
agent_name="my-agent",
definition=HostedAgentDefinition(
cpu="1",
memory="2Gi",
image="myregistry.azurecr.io/my-agent:v2",
container_protocol_versions=[
ProtocolVersionRecord(protocol="responses", version="1.0.0"),
],
),
)
print(f"Created version: {agent.version}")
Reemplaza responses con invocations si tu agente utiliza el protocolo Invocaciones, o pasa ambos para exponer ambos protocolos.
Las nuevas versiones se crean automáticamente cuando se ejecuta azd deploy con código o configuración actualizados.
Valores de estado de versión
Después de crear o actualizar una versión del agente, realice consultas periódicas al punto de conexión de la versión hasta que el estado alcance active:
| Estado | Descripción |
|---|---|
creating |
La infraestructura está siendo aprovisionada, normalmente en un período de 2 a 5 minutos. |
active |
El agente está listo para atender solicitudes. |
failed |
Error de aprovisionamiento. Compruebe el error campo en la respuesta para obtener más información. |
deleting |
La versión está siendo depurada. |
deleted |
Se ha quitado completamente la versión. |
Sondee el estado de la versión después de la creación:
import time
def wait_for_version_active(project, agent_name, agent_version, max_attempts=60):
for attempt in range(max_attempts):
time.sleep(10)
version = project.agents.get_version(
agent_name=agent_name, agent_version=agent_version
)
status = version["status"]
print(f"Version status: {status} (attempt {attempt + 1})")
if status == "active":
return
if status == "failed":
raise RuntimeError(f"Version provisioning failed: {dict(version)}")
raise RuntimeError("Timed out waiting for version to become active")
Eliminación de un agente
Puede eliminar una versión específica o un agente completo con todas sus versiones.
Eliminación de una versión específica
az rest --method DELETE \
--url "${BASE_URL}/agents/${AGENT_NAME}/versions/1?api-version=${API_VERSION}" \
--resource "${RESOURCE}"
project.agents.delete_version(agent_name="my-agent", agent_version="1")
Actualmente no se admite como un comando independiente. Use la API REST o el SDK.
Eliminar un agente y todas las versiones
Advertencia
Esta acción elimina permanentemente el agente y todas sus versiones. Las sesiones activas se finalizan. Esta operación no se puede deshacer.
az rest --method DELETE \
--url "${BASE_URL}/agents/${AGENT_NAME}?api-version=${API_VERSION}" \
--resource "${RESOURCE}"
project.agents.delete(agent_name="my-agent")
Actualmente no se admite como un comando independiente. Use la API REST o el SDK.
Visualización de registros y supervisión
Acceda a los registros de contenedor para depurar problemas de aprovisionamiento y tiempo de ejecución.
Transmisión de registros desde una sesión de agente específica:
AGENT_VERSION="<version>"
SESSION_ID="<session-id>"
az rest --method GET \
--url "${BASE_URL}/agents/${AGENT_NAME}/versions/${AGENT_VERSION}/sessions/${SESSION_ID}:logstream?api-version=${API_VERSION}" \
--resource "${RESOURCE}" \
--headers "Foundry-Features=HostedAgents=V1Preview" "Accept=text/event-stream"
El punto de conexión de logstream devuelve Eventos Enviados por el Servidor (SSE) con marcos event: log. Cada fotograma contiene una carga útil JSON con los campos timestamp, stream (stdout, stderr o status) y message.
Tiempos de espera:
- Duración máxima de la conexión: 30 minutos
- Tiempo de espera de inactividad: 2 minutos
La visualización de registros de contenedor no se admite actualmente a través del SDK de Python. Use la API REST o Azure CLI para desarrolladores.
Supervise un agente en ejecución con información de registro y estado en tiempo real:
azd ai agent monitor
Este comando lee el nombre del agente y la versión desde la entrada de servicio en la configuración de tu proyecto.
Salida de registro de ejemplo
2026-04-09T08:43:48.72656 Connecting to the container 'agent-container'...
2026-04-09T08:43:48.75451 Successfully connected to container: 'agent-container'
2026-04-09T08:43:59.0671054Z stdout F INFO: 127.0.0.1:42588 - "GET /readiness HTTP/1.1" 200 OK
Configurar el enrutamiento de puntos de conexión del agente
Los puntos de conexión del agente controlan cómo se distribuye el tráfico entre las versiones del agente. Use selectores de versiones para enrutar un porcentaje de tráfico a versiones específicas, lo que permite implementaciones controladas o implementaciones graduales.
El enrutamiento de los endpoints se configura mediante la aplicación de parches al objeto del agente. Usa PATCH /agents/{agent_name} con Content-Type: application/merge-patch+json:
az rest --method PATCH \
--url "${BASE_URL}/agents/${AGENT_NAME}?api-version=${API_VERSION}" \
--resource "${RESOURCE}" \
--headers "Content-Type=application/merge-patch+json" "Foundry-Features=AgentEndpoints=V1Preview" \
--body '{
"agent_endpoint": {
"version_selector": {
"version_selection_rules": [
{"agent_version": "1", "traffic_percentage": 100, "type": "FixedRatio"}
]
},
"protocols": ["responses"]
}
}'
Configúrelo protocols en ["invocations"] o ["responses", "invocations"] para que coincida con los protocolos que expone el agente.
Para dividir el tráfico entre dos versiones (por ejemplo, 90/10 para un despliegue canario):
az rest --method PATCH \
--url "${BASE_URL}/agents/${AGENT_NAME}?api-version=${API_VERSION}" \
--resource "${RESOURCE}" \
--headers "Content-Type=application/merge-patch+json" "Foundry-Features=AgentEndpoints=V1Preview" \
--body '{
"agent_endpoint": {
"version_selector": {
"version_selection_rules": [
{"agent_version": "1", "traffic_percentage": 90, "type": "FixedRatio"},
{"agent_version": "2", "traffic_percentage": 10, "type": "FixedRatio"}
]
},
"protocols": ["responses"]
}
}'
from azure.ai.projects.models import (
AgentEndpoint,
AgentEndpointProtocol,
FixedRatioVersionSelectionRule,
VersionSelector,
)
endpoint_config = AgentEndpoint(
version_selector=VersionSelector(
version_selection_rules=[
FixedRatioVersionSelectionRule(
agent_version="1", traffic_percentage=100
),
]
),
protocols=[AgentEndpointProtocol.RESPONSES],
)
project.beta.agents.patch_agent_details(
agent_name="my-agent",
agent_endpoint=endpoint_config,
)
El enrutamiento de puntos de conexión se configura automáticamente durante azd deploy. Para personalizar la distribución del tráfico, use la API REST o el SDK.
Recuperación de la identidad del agente para las asignaciones de roles
Cada agente hospedado tiene una identidad de instancia: una entidad de servicio de Microsoft Entra ID que el agente usa en tiempo de ejecución para autenticarse en recursos posteriores. Para conceder al agente acceso a servicios como Azure Storage o Azure Cosmos DB, necesita el ID principal de la identidad para poder crear asignaciones de roles de RBAC.
Para más información sobre cómo funcionan las identidades del agente, consulte Conceptos de identidad del agente.
Extraiga el identificador principal de identidad del agente
Use el --query parámetro para extraer directamente instance_identity.principal_id de los detalles del agente:
AGENT_IDENTITY=$(az rest --method GET \
--url "${BASE_URL}/agents/${AGENT_NAME}?api-version=${API_VERSION}" \
--resource "${RESOURCE}" \
--query "instance_identity.principal_id" \
--output tsv)
echo "Agent identity principal ID: ${AGENT_IDENTITY}"
agent = project.agents.get(agent_name="my-agent")
agent_identity = agent.instance_identity["principal_id"]
print(f"Agent identity principal ID: {agent_identity}")
Utilice la API REST o el SDK de Python para obtener el ID de entidad de identidad del agente.
Asignación de roles a la identidad del agente
Después de tener el ID principal, asigne roles de RBAC a la identidad del agente en el alcance de recurso adecuado. Use --assignee-object-id con --assignee-principal-type ServicePrincipal para evitar problemas de búsqueda en Microsoft Graph con los principales de servicio de identidad del agente.
La identidad del agente funciona con cualquier recurso de Azure que admita RBAC. En los ejemplos siguientes se muestran dos escenarios comunes: conceder acceso al proyecto Foundry y conceder acceso a una cuenta de almacenamiento.
Asigne un rol en el proyecto Foundry (por ejemplo, para permitir que el agente use recursos del proyecto):
az role assignment create \
--assignee-object-id "$AGENT_IDENTITY" \
--assignee-principal-type ServicePrincipal \
--role "Azure AI Developer" \
--scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.CognitiveServices/accounts/<account-name>/projects/<project-name>"
Asigne un rol en una cuenta de almacenamiento (por ejemplo, para permitir que el agente lea y escriba blobs):
az role assignment create \
--assignee-object-id "$AGENT_IDENTITY" \
--assignee-principal-type ServicePrincipal \
--role "Storage Blob Data Contributor" \
--scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>"
Las asignaciones de roles son una operación de Azure Resource Manager. Use los comandos CLI de Azure que se muestran en la pestaña REST con el valor de agent_identity del paso anterior o use el SDK de Azure Administración de autorización para crear asignaciones de roles mediante programación.
Use el CLI de Azure directamente para crear asignaciones de roles. Recupere el identificador principal de identidad del agente mediante la API REST o Python SDK y, a continuación, ejecute az role assignment create como se indica en la pestaña REST.
Comprobación de las asignaciones de roles
Enumere los roles asignados a la identidad del agente en el proyecto Foundry:
az role assignment list \
--assignee "$AGENT_IDENTITY" \
--scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.CognitiveServices/accounts/<account-name>/projects/<project-name>" \
--output table
Enumere los roles asignados a la identidad del agente en una cuenta de almacenamiento:
az role assignment list \
--assignee "$AGENT_IDENTITY" \
--scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>" \
--output table
Use los comandos CLI de Azure que se muestran en la pestaña REST para comprobar las asignaciones de roles.
Use el CLI de Azure directamente para comprobar las asignaciones de roles como se muestra en la pestaña REST.