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 implementar un agente contenedorizado en el servicio Foundry Agent mediante la CLI de desarrollador de Azure (azd), el SDK de Python o la API REST. Elija un método de implementación mediante el selector situado en la parte superior del artículo. Use los enfoques de SDK o REST cuando quiera administrar implementaciones de agente directamente desde sus propias aplicaciones o servicios.
Si va a implementar por primera vez o quiere un tutorial guiado, consulte inicio rápido: Creación e implementación de un agente hospedado. La CLI de Azure Developer (azd) y la extensión de VS Code controlan la compilación, inserción, control de versiones y configuración de RBAC automáticamente.
Sugerencia
¿Prefiere un bucle interno sin Docker? También puede implementar un agente hospedado directamente desde el código fuente: cargue una .zip de sus Python o .NET código y la plataforma lo compila y lo hospeda automáticamente.
Si usa un asistente de programación como GitHub Copilot, la Habilidad de Microsoft Foundry puede ayudarle a planificar el flujo de implementación del contenedor, preparar comandos azd y conectar los pasos del SDK o de REST a su proyecto.
Ciclo de vida de la implementación
Cada implementación del agente hospedado sigue esta secuencia:
- Compilación e inserción: empaquete el código del agente en una imagen de contenedor e insértelo en Azure Container Registry.
- Crear una versión del agente: registre la imagen con Foundry Agent Service. La plataforma aprovisiona la infraestructura y crea una identidad de agente Entra dedicada.
-
Sondeo del estado: espere a que el estado de la versión sea
active. - Invoke: envíe solicitudes al punto de conexión dedicado del agente.
Prerrequisitos
- Un proyecto de Microsoft Foundry.
- Código de agente utilizando un marco compatible.
- Docker Desktop instalado para el desarrollo de contenedores locales.
- Cli de Azure versión 2.80 o posterior.
Permisos necesarios
Necesitas el rol Foundry Project Manager en el ámbito del proyecto para implementar un agente hospedado. Este rol concede los permisos del plano de datos para crear y actualizar agentes, además de la capacidad de crear asignaciones de roles para la identidad del agente creada por la plataforma si es necesario. Para obtener un desglose detallado de los permisos implicados, consulte Referencia de permisos del agente hospedado.
Importante
Recientemente se cambió el nombre de los roles RBAC de Foundry. Foundry User, Foundry Owner, Foundry Account Owner y Foundry Project Manager se llamaban anteriormente Usuario de Azure AI, Propietario de Azure AI, Propietario de la cuenta de Azure AI y Administrador de proyectos de Azure AI. Es posible que siga viendo los nombres anteriores en algunos lugares mientras se implementa el cambio de nombre. El cambio de nombre no modifica los identificadores de rol y los permisos principales.
La plataforma crea una identidad de agente Microsoft Entra dedicada para cada agente hospedado en tiempo de implementación. Esta identidad es una entidad de servicio que el contenedor en ejecución usa para llamar a modelos y herramientas. No es necesario configurar las identidades administradas manualmente. La identidad del agente puede acceder a la inferencia de modelos a través del punto de conexión del proyecto y al almacenamiento de sesión de forma predeterminada. Para los recursos externos (por ejemplo, su propio Azure Storage), asigne roles de RBAC manualmente al Microsoft Entra ID del agente. Para obtener más información, consulte Acceso del agente más allá de los valores predeterminados.
Si usa azd o la extensión de VS Code, las herramientas gestionan automáticamente la mayoría de las asignaciones de RBAC, entre ellas Container Registry Repository Reader para la identidad administrada del proyecto (descarga de imágenes).
Para obtener más información, consulte Autenticación y autorización.
Importante
La compatibilidad con la colocación de la Azure Container Registry del agente hospedado detrás de una red privada (punto de conexión privado con acceso a la red pública deshabilitada) depende de cuándo se creó el proyecto Foundry. Los proyectos creados después del 25 de junio de 2026 admiten un registro privado. Los proyectos creados antes de esa fecha requieren que el registro sea accesible a través de su punto de conexión público para que la plataforma pueda extraer la imagen. Los proyectos existentes no se ven afectados. Para obtener la lista completa de restricciones de red, consulte Limitaciones.
Requisitos de contenedor
Su imagen de contenedor debe cumplir los siguientes requisitos para poder ejecutarse en la plataforma de agente hospedado.
Importante
La plataforma de hospedaje requiere imágenes de contenedor x86_64 (linux/amd64). Si compila con Apple Silicon u otras máquinas basadas en ARM, use docker build --platform linux/amd64 . para evitar producir una imagen ARM no compatible.
Bibliotecas de protocolos
Los agentes hospedados se comunican con la puerta de enlace de Foundry a través de bibliotecas de protocolos. Elija el protocolo que coincida con el patrón de interacción del agente:
| Protocolo | Biblioteca de Python | Biblioteca .NET | Endpoint | Más adecuado para |
|---|---|---|---|---|
| Respuestas | azure-ai-agentserver-responses |
Azure.AI.AgentServer.Responses |
/responses |
Bots de chat conversacionales, streaming, con múltiples turnos y con historial administrado por la plataforma |
| Invocaciones | azure-ai-agentserver-invocations |
Azure.AI.AgentServer.Invocations |
/invocations |
Receptores de webhook, procesamiento no conversacional, flujos de trabajo asincrónicos personalizados |
| Invocaciones (WebSocket) | azure-ai-agentserver-invocations |
Azure.AI.AgentServer.Invocations |
/invocations_ws |
Streaming bidireccional: agentes de voz en tiempo real, medios interactivos |
El protocolo WebSocket usa el identificador invocations_ws y se incluye en el mismo azure-ai-agentserver-invocations paquete que la ruta HTTP /invocations , por lo que un contenedor puede servir ambos. Úselo cuando necesite una transmisión persistente y bidireccional completa; por ejemplo, para enviar audio PCM del micrófono al agente y recibir audio sintetizado a cambio. Para escenarios de voz, consulte Compilación de un agente de voz con agentes hospedados.
Un único contenedor puede exponer varios protocolos simultáneamente declarandolos al crear el agente ( en el protocols campo del azure.ai.agent servicio en azure.yaml, una llamada de SDK o una solicitud de API REST) e importando las bibliotecas necesarias. Utilice las bibliotecas de protocolos en su marco existente, ya sea que se trate de Microsoft Agent Framework, LangChain o código personalizado.
Biblioteca de protocolos de respuestas
Las bibliotecas de Python y .NET para el protocolo De respuestas implementan la API de respuestas de IA de Azure. Importe el paquete e implemente un controlador de respuesta. La biblioteca controla el enrutamiento, el streaming con eventos enviados por el servidor (SSE), la ejecución en segundo plano, la cancelación, el almacenamiento en caché y la administración del ciclo de vida de respuesta.
Implementación de un controlador
El controlador es la abstracción principal que se implementa. La biblioteca la invoca para cada solicitud entrante y envía los eventos devueltos a los clientes mediante SSE. En Python, decora una función asincrónica con @app.response_handler:
from azure.ai.agentserver.responses import (
CreateResponse,
ResponseContext,
ResponsesAgentServerHost,
TextResponse,
)
app = ResponsesAgentServerHost()
@app.response_handler
async def handler(
request: CreateResponse,
context: ResponseContext,
_cancellation_signal,
):
user_input = await context.get_input_text() or ""
return TextResponse(context, request, text=f"Echo: {user_input}")
Administración automática de eventos y ciclo de vida
La biblioteca administra la secuencia de eventos (números de secuencia, índices de salida y contenido e identificadores de elemento) y el ciclo de vida de respuesta completa automáticamente, por lo que no realiza un seguimiento de este estado usted mismo. Cada evento que produce tu manejador se corresponde uno a uno con un evento SSE, que el framework anfitrión gestiona por ti.
Modos de streaming y de fondo
- Modo de streaming (valor predeterminado): los eventos SSE se entregan en tiempo real al cliente conectado.
-
Modo en segundo plano: el controlador se ejecuta hasta la finalización sin un cliente SSE conectado. Los eventos se almacenan en búfer y están disponibles para la reproducción a través de
GET /responses/{id}.
Ciclo de vida de la respuesta
La biblioteca orquesta el ciclo de vida completo de la respuesta: created ->in_progress ->completed (o failed o cancelled). La biblioteca también administra automáticamente las garantías de cancelación, control de errores y eventos terminales.
Seguridad de hilos
Las instancias del gestor tienen un ámbito por solicitud, por lo que el estado de cada solicitud no se filtra entre solicitudes. La biblioteca controla las solicitudes simultáneas de forma segura.
Para ver ejemplos ejecutables, consulte los ejemplos de Python bring-your-own.
Puntos de evaluación de salud
Las bibliotecas de protocolo exponen automáticamente un /readiness punto de conexión para las comprobaciones de estado de la plataforma. No es necesario implementar esto usted mismo.
Puerto
Los contenedores atienden el tráfico en el puerto 8088 localmente. En producción, la pasarela de Foundry controla el enrutamiento, por lo que el contenedor no necesita exponer un puerto público.
Variables de entorno insertadas en la plataforma
La plataforma del agente hospedado inserta automáticamente variables de entorno en el contenedor en tiempo de ejecución. El código puede leer estas variables sin declararlas en el mapa de env del servicio azure.ai.agent en azure.yaml ni en la configuración de variables de entorno de SDK y REST. El FOUNDRY_* prefijo está reservado para uso de plataforma.
| Variable | propósito |
|---|---|
FOUNDRY_PROJECT_ENDPOINT |
URL del punto de conexión del proyecto Foundry |
FOUNDRY_PROJECT_ARM_ID |
ID de recurso ARM del proyecto Foundry |
FOUNDRY_AGENT_NAME |
Nombre del agente en ejecución |
FOUNDRY_AGENT_VERSION |
Versión del agente en ejecución |
FOUNDRY_AGENT_SESSION_ID |
Identificador de sesión de la solicitud actual (solo contenedores hospedados) |
APPLICATIONINSIGHTS_CONNECTION_STRING |
Cadena de conexión de Application Insights para telemetría |
No redeclares las variables inyectadas por la plataforma en azure.yaml; se establecen automáticamente.
Las variables que declares tú mismo, como MODEL_DEPLOYMENT_NAME o los puntos de conexión MCP de la caja de herramientas, van en el mapa env del servicio azure.ai.agent en azure.yaml o en la llamada create_version del SDK.
Importante
Al implementar el agente hospedado en foundry Agent Service, la plataforma inserta automáticamente una cadena de conexión de Application Insights en el contenedor del agente como una variable de entorno, lo que habilita el seguimiento de OpenTelemetry de forma predeterminada. Para ver seguimientos distribuidos, solicitudes y dependencias, abra el recurso de Application Insights aprovisionado durante la configuración en Azure Portal y vaya a Investigar > Búsqueda de transacciones o Rendimiento. Use azd ai agent monitor para los registros de consola en tiempo real. Cuando AppInsights está habilitado, este proyecto registra seguimientos para ayudar a supervisar y evaluar las interacciones de nivel de usuario con los agentes. Los miembros del proyecto a los que se les haya asignado el rol Lector de Log Analytics en AppInsights pueden ver los datos de trazas, que podrían contener datos personales o contenido del cliente. Si las tablas subyacentes de Log Analytics están protegidas, los miembros necesitan en su lugar el rol Lector con privilegios de datos de supervisión para ver esos datos de traza. Revise qué datos de seguimiento se recopilan y quién puede ver y usar estos datos. Pueden aplicarse precios adicionales de Azure Monitor App Insights.
Obtenga más información.
Referencia de conexiones de proyecto en variables de entorno
En lugar de codificar secretos (claves de API, tokens, puntos de conexión) en azure.yaml o en su imagen, extráigalos de una conexión de proyecto de Foundry al iniciar el entorno aislado. Cualquier valor que declares como variable de entorno puede ser una expresión de marcador de posición que la plataforma resuelve antes de que se inicie tu contenedor.
Sintaxis del marcador de posición
Un marcador de posición tiene la forma ${{connections.<name>.<path>}}, donde <name> es el nombre del recurso de la conexión (visible en el portal, en Administrar>Detalles del proyecto>Recursos conectados) y <path> es uno de:
| Camino | Se resuelve como |
|---|---|
credentials.<field> |
Un campo secreto en la conexión |
target |
La propiedad target de la conexión (por ejemplo, una URL de extremo) |
metadata.<field> |
Un campo debajo de metadata de la conexión |
El nombre de campo que se va a usar depende de la categoría de conexión:
| Categoría de conexión | Nombre del campo en el marcador de posición |
|---|---|
ApiKey, AppInsights |
Siempre key, por ejemplo, credentials.key |
CustomKeys |
Nombre de clave que proporcionó al crear la conexión, por ejemplo, credentials.github_token |
Example
Primero, cree una conexión CustomKeys en el proyecto que contiene el secreto. Consulte Agregar una nueva conexión en Microsoft Foundry. A continuación, haz referencia a ella desde el mapa env en el servicio azure.ai.agent de azure.yaml:
services:
my-agent:
host: azure.ai.agent
env:
MODEL_DEPLOYMENT_NAME: gpt-5-mini
GITHUB_TOKEN: ${{connections.agent-secrets.credentials.github_token}}
Al iniciar el entorno aislado, Foundry resuelve el marcador de posición e inyecta el valor resuelto como una variable de entorno normal. El código lo lee como cualquier otra variable de entorno:
import os
token = os.environ["GITHUB_TOKEN"]
Una solicitud GET de la versión del agente devuelve el texto literal ${{...}}; el secreto resuelto no se devuelve nunca a través de la API de administración.
Consideraciones
- Cree la conexión antes de implementar la versión. Si falta la conexión o el campo al que se hace referencia al iniciarse el entorno de pruebas, el marcador de posición no se puede resolver y la variable queda vacía.
- Los secretos solo admiten escritura. GET en una conexión devuelve
credentials: null. Compruebe la resolución leyendo la variable env desde dentro del contenedor en ejecución, no inspeccionando la conexión. - Registre los nombres de los campos de
CustomKeysusted mismo. La API de administración no vuelve a devolverlos una vez creados. Manténgalos junto al código fuente del agente (por ejemplo, en plantillas de IaC o junto aazure.yaml) para que puedan construir marcadores de posición más adelante sin tener que adivinar. - Foundry administra el nombre del secreto subyacente. Al crear la conexión, Foundry almacena el valor en Key Vault con un nombre que elige -- no puedes hacer referencia a un secreto preexistente de Key Vault por nombre. Para asociar su propio Key Vault como almacén de respaldo, consulte Configurar una conexión a Key Vault.
Empaquetado y prueba del agente localmente
Antes de realizar la implementación en Foundry, valide que el agente funciona localmente mediante la biblioteca de protocolos. El contenedor ofrece los mismos puntos de conexión localmente que en producción.
Probar el protocolo de respuestas
POST http://localhost:8088/responses
Content-Type: application/json
{
"input": "Where is Seattle?",
"stream": false
}
Probar el protocolo Invocations
POST http://localhost:8088/invocations
Content-Type: application/json
{
"message": "Hello!"
}
Implementación mediante la CLI para desarrolladores de Azure o VS Code
La CLI para desarrolladores de Azure (azd) y el kit de herramientas Microsoft Foundry para Visual Studio Code automatizan el ciclo de vida completo de la implementación: compilar el contenedor, enviarlo a Azure Container Registry, crear la versión del agente y asignar roles RBAC. Para ver un tutorial guiado por primera vez, consulte inicio rápido: Creación e implementación de un agente hospedado.
Implementación con un comando
Desde el directorio del proyecto del agente, aprovisione la infraestructura e implemente en un solo paso:
azd up
azd up combina azd provision, que crea el proyecto de Foundry, el despliegue del modelo, el registro de contenedores, Application Insights y la identidad administrada, con azd deploy. Úselo para implementaciones por primera vez o cada vez que cambie tanto la infraestructura como el código del agente.
Implementar solo cambios de código
Si ya aprovisionó los recursos de Azure y solo necesita insertar una nueva versión del agente:
azd deploy
Durante azd deploy, la CLI:
- Compila la imagen de contenedor de forma remota en Azure Container Registry, por lo que no necesita Docker local.
- Inserta la imagen en el registro.
- Crea una versión del agente alojado en el servicio Foundry Agent Service.
- Crea una identidad de agente de Microsoft Entra dedicada y asigna los roles de RBAC que el agente necesita para acceder a modelos y herramientas.
Administración de versiones
Cada azd deploy crea una nueva versión del agente. La CLI conserva las versiones anteriores y la versión más reciente está activa de forma predeterminada.
Comprobación de la implementación
azd ai agent show
La salida incluye el nombre del agente, la versión, los protocolos, los recursos de contenedor, las variables de entorno y la marca de tiempo de creación. Se usa --output table para una vista de resumen.
Creación de imágenes localmente
De forma predeterminada, azd compila imágenes de contenedor de forma remota en Azure Container Registry. Para compilar imágenes localmente, establezca remoteBuild: false en azure.yaml. Las compilaciones locales requieren Docker Desktop.
Para filtrar las indicaciones y las respuestas conforme a una política de seguridad de contenidos, añade una barrera de seguridad de contenido a tu agente.
Implementación mediante el SDK de Python
Use el SDK cuando quiera administrar las implementaciones de agente directamente desde el código de Python.
Requisitos previos adicionales
Imagen de contenedor en Azure Container Registry
Escritor de repositorios del Registro de Contenedores o rol AcrPush en el registro de contenedores (para cargar imágenes)
Azure SDK de proyectos de IA versión 2.3.0 o posterior
pip install "azure-ai-projects>=2.3.0"
Compilación e inserción de la imagen de contenedor
Compile la imagen de Docker:
docker build --platform linux/amd64 -t myagent:v1 .Inserción en Azure Container Registry:
az acr login --name myregistry docker tag myagent:v1 myregistry.azurecr.io/myagent:v1 docker push myregistry.azurecr.io/myagent:v1
Sugerencia
Use etiquetas de imagen únicas en lugar de :latest para implementaciones reproducibles.
Configuración de permisos de registro de contenedor
Conceda acceso a la identidad administrada del proyecto para extraer imágenes:
En el portal Azure, vaya al recurso del proyecto Foundry.
Seleccione Identidad y copie el ID del objeto (principal) en el Sistema asignado.
Asigne el rol Lector del repositorio de Container Registry a esta identidad en el registro de contenedor. Consulte roles y permisos de Azure Container Registry.
Creación de una versión del agente hospedado
Al crear una versión, la plataforma aprovisiona automáticamente el agente. No hay ningún paso de inicio independiente. La plataforma compila una instantánea de contenedor y hace que el agente esté listo para atender solicitudes.
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import (
AgentEndpointProtocol,
ContainerConfiguration,
HostedAgentDefinition,
ProtocolVersionRecord,
)
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,
)
# Create a hosted agent version
agent = project.agents.create_version(
agent_name="my-agent",
definition=HostedAgentDefinition(
protocol_versions=[
ProtocolVersionRecord(protocol=AgentEndpointProtocol.RESPONSES, version="1.0.0")
],
cpu="1",
memory="2Gi",
container_configuration=ContainerConfiguration(
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 exponer ambos protocolos, pase ambos en protocol_versions:
protocol_versions=[
ProtocolVersionRecord(protocol=AgentEndpointProtocol.RESPONSES, version="1.0.0"),
ProtocolVersionRecord(protocol=AgentEndpointProtocol.INVOCATIONS, version="1.0.0"),
ProtocolVersionRecord(protocol=AgentEndpointProtocol.INVOCATIONS_WS, version="1.0.0"),
],
Parámetros clave:
| Parámetro | Description |
|---|---|
agent_name |
Nombre único de identificación (alfanumérico con guiones, máximo 63 caracteres) |
container_configuration.image |
URL completa de la imagen en Azure Container Registry con etiqueta |
cpu |
Asignación de CPU (por ejemplo, "1") |
memory |
Asignación de memoria (por ejemplo, "2Gi") |
protocol_versions |
Protocolos que expone el contenedor (responses, invocationso ambos) |
Para configurar cuándo la capacidad de cómputo de la sesión pasa a estar inactiva, consulte Gestionar la inactividad de la sesión.
Consultar el estado de la versión
Después de crear una versión, sondee hasta que el estado sea active antes de invocar al agente. El aprovisionamiento suele tardar menos de un minuto en función del tamaño de la imagen.
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 estado de versión:
| Situación | Description |
|---|---|
creating |
Aprovisionamiento de infraestructura en curso |
active |
El agente está listo para atender solicitudes |
failed |
Error de aprovisionamiento: compruebe el error campo para obtener más información. |
deleting |
La versión se va a limpiar |
deleted |
La versión ha sido completamente removida. |
Invocar al agente
Una vez que la versión alcance el estado active, use get_openai_client para crear un cliente de OpenAI enlazado al punto de conexión del agente.
Para el protocolo respuestas:
# 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)
En el caso del protocolo Invocaciones, llame directamente al punto de conexión de invocaciones:
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",
}, params={"api-version": "v1"}, json={
"message": "Process this task"
})
print(response.json())
Para obtener ejemplos más completos, consulte ejemplos del agente hospedado.
Implementación mediante el SDK de JavaScript/TypeScript
Use el SDK cuando quiera administrar implementaciones de agente directamente desde Node.js código. El componente que llama al SDK se ejecuta en Node.js, pero la propia imagen del contenedor sigue ejecutando el código de su agente de Python o .NET compilado con las bibliotecas de protocolo Responses o Invocations; no existe un entorno de ejecución de agente alojado para Node.js.
Requisitos previos adicionales
Imagen de contenedor en Azure Container Registry
Escritor de repositorios del Registro de Contenedores o rol AcrPush en el registro de contenedores (para cargar imágenes)
Los paquetes
@azure/ai-projectsy@azure/identitynpm install @azure/ai-projects @azure/identity
Antes de empezar, compile e inserte la imagen de contenedor en Azure Container Registry (consulte la pestaña Python, por ejemplo, comandos de Docker) y conceda a la identidad administrada del proyecto el rol Lector del repositorio de Container Registry en el registro.
Creación de una versión del agente hospedado
Al crear una versión, la plataforma aprovisiona automáticamente el agente. No hay ningún paso de inicio independiente. La plataforma compila una instantánea de contenedor y hace que el agente esté listo para atender solicitudes.
import { AIProjectClient } from "@azure/ai-projects";
import { DefaultAzureCredential } from "@azure/identity";
// Format: "https://resource_name.services.ai.azure.com/api/projects/project_name"
const projectEndpoint =
process.env["FOUNDRY_PROJECT_ENDPOINT"] || "your_project_endpoint";
const agentName = "my-agent";
const project = new AIProjectClient(
projectEndpoint,
new DefaultAzureCredential(),
);
// Create a hosted agent version
const agent = await project.agents.createVersion(agentName, {
kind: "hosted",
cpu: "1",
memory: "2Gi",
container_configuration: {
image: "your-registry.azurecr.io/your-image:tag",
},
protocol_versions: [{ protocol: "responses", version: "1.0.0" }],
environment_variables: { MODEL_DEPLOYMENT_NAME: "gpt-5-mini" },
});
console.log(`Agent created: ${agent.name}, version: ${agent.version}`);
Para exponer ambos protocolos, pase ambos en protocol_versions:
protocol_versions: [
{ protocol: "responses", version: "1.0.0" },
{ protocol: "invocations", version: "1.0.0" },
{ protocol: "invocations_ws", version: "1.0.0" },
],
Consultar el estado de la versión
Después de crear una versión, sondee hasta que el estado sea active antes de invocar al agente. El aprovisionamiento suele tardar menos de un minuto en función del tamaño de la imagen.
function sleep(ms: number) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
// Poll until the agent version is active
for (;;) {
const versionInfo = await project.agents.getVersion(
agentName,
agent.version,
);
console.log(`Status: ${versionInfo.status}`);
if (versionInfo.status === "active") {
break;
}
if (versionInfo.status === "failed") {
console.log(`Provisioning failed: ${versionInfo.error}`);
break;
}
await sleep(5_000);
}
Dirigir el punto de conexión del agente e invocarlo
Enrute el punto de conexión del agente a la versión que creó y, a continuación, enlace un cliente de OpenAI al punto de conexión.
Para el protocolo respuestas:
await project.agents.patchAgentObject(agentName, {
agentEndpoint: {
version_selector: {
version_selection_rules: [
{
type: "FixedRatio",
agent_version: agent.version,
traffic_percentage: 100,
},
],
},
protocol_configuration: { responses: {} },
},
});
// Create an OpenAI client bound to the agent endpoint
const openAIClient = project.getOpenAIClient({
azureConfig: { allowPreview: true, agentName },
});
const response = await openAIClient.responses.create({
input: "Hello! What can you do?",
});
console.log(response.output_text);
En el caso del protocolo Invocaciones, llame directamente al punto de conexión de invocaciones:
const credential = new DefaultAzureCredential();
const token = await credential.getToken("https://ai.azure.com/.default");
if (!token) {
throw new Error("Failed to acquire an access token.");
}
const url = `${projectEndpoint}/agents/my-agent/endpoint/protocols/invocations`;
const response = await fetch(`${url}?api-version=v1`, {
method: "POST",
headers: {
Authorization: "Bearer " + token.token,
"Content-Type": "application/json",
},
body: JSON.stringify({ message: "Process this task" }),
});
console.log(await response.json());
Referencia: AIProjectClient
Implementación mediante la API REST
Use la API REST para implementaciones directas basadas en HTTP o cuando se integre con herramientas personalizadas.
Antes de empezar, compile e inserte la imagen de contenedor en Azure Container Registry y conceda a la identidad administrada del proyecto el rol Lector de repositorio de Container Registry en el registro.
Configurar las variables
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)
Crear un 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",
"container_configuration": {
"image": "myacr.azurecr.io/my-agent:v1"
},
"cpu": "1",
"memory": "2Gi",
"protocol_versions": [
{"protocol": "responses", "version": "1.0.0"}
],
"environment_variables": {
"MODEL_DEPLOYMENT_NAME": "gpt-5-mini"
}
}
}'
La creación de un agente también crea la versión 1 y desencadena el provisionamiento.
Para configurar cuándo la capacidad de cómputo de la sesión pasa a estar inactiva, consulte Gestionar la inactividad de la sesión.
Para filtrar las instrucciones y las respuestas conforme a una política de seguridad de contenido, incluya un objeto rai_config en definition. Consulte Añadir una protección de seguridad del contenido a un agente alojado.
Consultar el estado de la versión
Sondee el punto de conexión de la versión hasta que status sea 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 al agente
Use el punto de conexión dedicado del agente para enviar solicitudes. Configure "stream": true para recibir eventos enviados por el servidor.
Protocolo de respuestas:
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 invocaciones:
curl -X POST "$BASE_URL/agents/my-agent/endpoint/protocols/invocations?api-version=$API_VERSION" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"message": "Process this task"
}'
Crear una nueva versión
Implemente el código o la configuración actualizados mediante la creación de una nueva versión:
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",
"container_configuration": {
"image": "myacr.azurecr.io/my-agent:v2"
},
"cpu": "1",
"memory": "2Gi",
"protocol_versions": [
{"protocol": "responses", "version": "1.0.0"}
],
"environment_variables": {
"MODEL_DEPLOYMENT_NAME": "gpt-5-mini"
}
}
}'
Limpieza de recursos
Para evitar cargos, limpie los recursos cuando termine. La plataforma retira el aprovisionamiento de los recursos de cómputo del agente una vez transcurrido el tiempo de espera por inactividad configurado, que es de 15 minutos de forma predeterminada, por lo que no se incurre en ningún coste cuando un agente no procesa solicitudes.
limpieza de la CLI para desarrolladores de Azure
azd down
Limpieza del SDK
Elimine una sola versión:
project.agents.delete_version(agent_name="my-agent", agent_version=agent.version)
O elimine el agente completo y todas sus versiones. Use force=True para eliminar en cascada las sesiones activas, como justo después de invocar al agente; sin ella, la llamada produce un error de conflicto mientras las sesiones están activas:
project.agents.delete(agent_name="my-agent", force=True)
Limpieza del SDK
Elimine una sola versión:
await project.agents.deleteVersion("my-agent", agent.version);
O elimine todo el agente y todas sus versiones:
await project.agents.delete("my-agent", { force: true });
Referencia: AIProjectClient
Limpieza de la API REST
Elimine una sola versión:
curl -X DELETE "$BASE_URL/agents/my-agent/versions/1?api-version=$API_VERSION" \
-H "Authorization: Bearer $TOKEN"
O elimine todo el agente:
curl -X DELETE "$BASE_URL/agents/my-agent?api-version=$API_VERSION" \
-H "Authorization: Bearer $TOKEN"
Warning
Al eliminar un agente, se quitan todas sus versiones y se finalizan las sesiones activas. Esta acción no se puede deshacer.
Solución de problemas
Los errores de aprovisionamiento aparecen en los campos error.code y error.message del objeto de versión. Compruebe el estado de la versión después de la creación para identificar problemas.
| Código de error | Código HTTP | Solución |
|---|---|---|
image_pull_failed |
400 | Compruebe el URI de la imagen. Confirme que la identidad administrada del proyecto tiene Lector del repositorio de Container Registry en el ACR y que el estado de la directiva de azureADAuthenticationAsArmPolicy del registro es enabled |
SubscriptionIsNotRegistered |
400 | Registro del proveedor de suscripciones |
InvalidAcrPullCredentials |
401 | Corrección de la identidad administrada o el RBAC del registro |
UnauthorizedAcrPull |
403 | Proporcionar credenciales o identidades correctas |
AcrImageNotFound |
404 | Nombre o etiqueta de imagen correctos o publicar imagen |
RegistryNotFound |
400/404 | Corrección del DNS del registro o de la accesibilidad de la red |
Para los errores 5xx, póngase en contacto con el soporte técnico de Microsoft.
Para obtener información detallada sobre los requisitos de RBAC y la solución de problemas de permisos, consulte Referencia de permisos del agente hospedado.
Pasos siguientes
Contenido relacionado
- ¿Qué son los agentes hospedados?
- Agregar una barrera de protección de seguridad del contenido a un agente alojado
- Conceptos de identidad del agente
- Aplicaciones del agente
- documentación de Azure Container Registry