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 inicio rápido, llama a la Responses API en un punto de conexión de un proyecto de Foundry desde tu propio código para crear un agente efímero, un agente cuya definición (instrucciones, herramientas y modelo) reside en el código de tu aplicación en lugar de existir como un recurso persistente en Foundry Agent Service. Cada llamada construye el agente en el proceso e invoca la API de respuestas para la inferencia del modelo y la orquestación de herramientas.
Este patrón se ajusta a los desarrolladores, los ISV y los nativos digitales que quieren que sus definiciones de agente se envíen y versionen con el resto del código de la aplicación, en lugar de como un recurso fuera de banda que alguien tenga que mantener sincronizado con la aplicación. A diferencia de los agentes de prompt, no hay ningún recurso de agente que crear, actualizar o eliminar en Foundry; la gestión del ciclo de vida se sustituye por llamadas directas a la API de Responses.
La API de respuestas es el único punto de entrada de modelo y herramientas para Foundry. Puede invocarlo en dos endpoints diferentes:
-
Punto de conexión del proyecto foundry (este inicio rápido, recomendado): compatibilidad completa con Foundry. Expone los modelos de Foundry del catálogo y las herramientas de la plataforma (búsqueda de archivos, intérprete de código, memoria, búsqueda web, MCP, SharePoint, WorkIQ, Fabric IQ y más) a través de un único punto de conexión de API con ámbito de proyecto, accesible en
{project_endpoint}/openai/v1/responses. - punto de conexión de Azure OpenAI — mejor latencia y la máxima compatibilidad con clientes de OpenAI existentes. Úselo cuando solo necesite modelos openAI y herramientas estándar de OpenAI y no necesite funcionalidades específicas de Foundry.
La vía recomendada es el Agent Framework, que se encarga de la autenticación, la integración de herramientas y la orquestación de mensajes. En Python esto es FoundryChatClient; en .NET es AIProjectClient.AsAIAgent(...). El SDK de OpenAI también funciona con este punto de conexión y se trata como alternativa en Uso directamente del SDK de OpenAI.
Si no tiene una suscripción a Azure, cree una cuenta gratuita.
Cuándo usar el patrón de agente efímero
Use este patrón cuando hospede el código del agente fuera de Foundry (posiblemente insertado en su propia aplicación), pero quiera acceder a características del agente Foundry, como modelos y herramientas de plataforma.
El patrón efímero y los agentes hospedados son aditivos, no alternativas. El mismo código del agente de Agent Framework también se puede empaquetar como agente hospedado y exponerse a través de la API de agentes de Foundry, útil cuando se desea un punto de conexión administrado por Foundry al que pueden llamar otras aplicaciones, servicios o agentes. Puede hacer ambas cosas desde una única base de código: ejecute el agente dentro del proceso, donde se entrega con su aplicación, y publicar la misma definición como agente hospedado donde otros clientes lo necesiten.
Qué añade el punto de conexión del proyecto de Foundry a la API de respuestas de OpenAI
La API de respuestas en un punto de conexión de proyecto de Foundry es compatible con la API de respuestas de OpenAI, por lo que los clientes existentes de OpenAI trabajan con ella con cambios mínimos. El punto de conexión del proyecto de Foundry agrega lo siguiente:
- Datos con ámbito de proyecto: Los archivos, los almacenes vectoriales y otros datos se almacenan a nivel de project en lugar de a nivel de recurso, lo que proporciona aislamiento de datos por proyecto y permite usar tus propios recursos mediante la configuración estándar del agente.
- Modelos de Foundry además de OpenAI: Los modelos de Foundry que Azure vende directamente (no solo los modelos de OpenAI) están disponibles a través de la misma API.
- Herramientas específicas de Foundry: herramientas de la plataforma como SharePoint, WorkIQ y Fabric IQ están disponibles junto con las herramientas estándar de OpenAI.
- Autenticación en nombre de (OBO) para herramientas: las herramientas pueden llamar a servicios descendentes como el usuario que ha iniciado sesión, no solo como la identidad de la aplicación.
- Observabilidad y gobernanza a nivel de proyecto: Las llamadas realizadas a través del punto de conexión del proyecto pasan por el seguimiento, la supervisión, los filtros de contenido y la configuración de identidad del proyecto sin configuración adicional (consulte Observabilidad y funcionalidades empresariales).
Llamar al punto de conexión del proyecto , no un punto de conexión de OpenAI de nivel de recurso, es lo que desbloquea estas funcionalidades con ámbito de proyecto.
Prerequisites
- Un modelo implementado en Microsoft Foundry. Si no tiene un modelo, primero complete Inicio rápido: configure los recursos de Microsoft Foundry.
- La CLI de Azure instalada y con sesión iniciada (
az login).
- Python 3.10 o posterior instalado.
- Tener instalado el SDK de .NET 8 o una versión posterior.
Establecimiento de variables de entorno
Almacene el punto de conexión del proyecto y el nombre del modelo implementado como variables de entorno. Los ejemplos siguientes leen estos valores del entorno.
FOUNDRY_PROJECT_ENDPOINT=<endpoint copied from welcome screen>
FOUNDRY_MODEL=<your deployed model name>
Instalación de paquetes
Instale el paquete de Agent Framework con el proveedor Foundry:
pip install agent-framework-foundry aiohttp
dotnet add package Microsoft.Agents.AI.Foundry --prerelease
dotnet add package Azure.AI.Projects --prerelease
dotnet add package Azure.Identity
Microsoft.Agents.AI.Foundry proporciona el método de extensión AsAIAgent(...) en AIProjectClient y trae de forma transitiva Microsoft.Agents.AI.
Creación de un agente
Cree un agente efímero que se ejecute localmente en el proceso y llame a la API de respuestas para la inferencia del modelo y la orquestación de herramientas.
Use FoundryChatClient y la clase Agent.
import asyncio
import os
from agent_framework import Agent
from agent_framework.foundry import FoundryChatClient
from azure.identity import AzureCliCredential
async def main() -> None:
agent = Agent(
client=FoundryChatClient(
project_endpoint=os.environ["FOUNDRY_PROJECT_ENDPOINT"],
model=os.environ["FOUNDRY_MODEL"],
credential=AzureCliCredential(),
),
instructions="You are a helpful assistant.",
)
result = await agent.run("What is the capital of France?")
print(f"Agent: {result}")
if __name__ == "__main__":
asyncio.run(main())
El resultado muestra la respuesta del agente. Dado que el agente es efímero, no se conserva ninguna definición en el servicio; solo existe durante la vigencia del proceso de Python.
Utilice AIProjectClient.AsAIAgent(...) del Microsoft Agent Framework para encapsular el punto de conexión del proyecto de Foundry como un AIAgent.
using Azure.AI.Projects;
using Azure.Identity;
using Microsoft.Agents.AI;
string endpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT")
?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT is not set.");
string deploymentName = Environment.GetEnvironmentVariable("FOUNDRY_MODEL")
?? throw new InvalidOperationException("FOUNDRY_MODEL is not set.");
AIAgent agent =
new AIProjectClient(new Uri(endpoint), new DefaultAzureCredential())
.AsAIAgent(
model: deploymentName,
instructions: "You are a helpful assistant.",
name: "Assistant");
Console.WriteLine($"Agent: {await agent.RunAsync("What is the capital of France?")}");
La salida muestra la respuesta del agente. Dado que el agente es efímero, no se conserva ninguna definición en el servicio, solo existe durante la vigencia del proceso.
Agregar herramientas de funciones
Defina las herramientas de función local y páselas al agente. El agente llama automáticamente a estas herramientas cuando es necesario durante una conversación.
Defina las herramientas de función locales mediante el @tool decorador.
import asyncio
import os
from random import randint
from typing import Annotated
from agent_framework import Agent, tool
from agent_framework.foundry import FoundryChatClient
from azure.identity import AzureCliCredential
from pydantic import Field
@tool(approval_mode="never_require")
def get_weather(
location: Annotated[str, Field(description="The location to get the weather for.")],
) -> str:
"""Get the weather for a given location."""
conditions = ["sunny", "cloudy", "rainy", "stormy"]
return f"The weather in {location} is {conditions[randint(0, 3)]} with a high of {randint(10, 30)}°C."
async def main() -> None:
agent = Agent(
client=FoundryChatClient(
project_endpoint=os.environ["FOUNDRY_PROJECT_ENDPOINT"],
model=os.environ["FOUNDRY_MODEL"],
credential=AzureCliCredential(),
),
instructions="You are a helpful weather agent.",
tools=get_weather,
)
result = await agent.run("What's the weather like in Seattle?")
print(f"Agent: {result}")
if __name__ == "__main__":
asyncio.run(main())
El agente usa la API de respuestas para determinar cuándo llamar a la get_weather función, la ejecuta localmente y devuelve el resultado en lenguaje natural.
Defina un método local, decórelo con atributos [Description] y envuélvalo con AIFunctionFactory.Create(...).
using System.ComponentModel;
using Azure.AI.Projects;
using Azure.Identity;
using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;
[Description("Get the weather for a given location.")]
static string GetWeather(
[Description("The location to get the weather for.")] string location)
{
string[] conditions = ["sunny", "cloudy", "rainy", "stormy"];
Random rng = Random.Shared;
return $"The weather in {location} is {conditions[rng.Next(conditions.Length)]} with a high of {rng.Next(10, 31)}°C.";
}
AITool weatherTool = AIFunctionFactory.Create(GetWeather);
string endpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT")
?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT is not set.");
string deploymentName = Environment.GetEnvironmentVariable("FOUNDRY_MODEL")
?? throw new InvalidOperationException("FOUNDRY_MODEL is not set.");
AIAgent agent =
new AIProjectClient(new Uri(endpoint), new DefaultAzureCredential())
.AsAIAgent(
model: deploymentName,
instructions: "You are a helpful weather agent.",
name: "WeatherAssistant",
tools: [weatherTool]);
Console.WriteLine($"Agent: {await agent.RunAsync("What's the weather like in Seattle?")}");
El agente usa la API de Responses para determinar cuándo llamar a GetWeather, la ejecuta localmente y devuelve el resultado en lenguaje natural.
Uso de la herramienta de búsqueda web
La API de respuestas del punto de conexión del proyecto Foundry proporciona herramientas hospedadas integradas, como la búsqueda web. Proporcione al agente acceso a la búsqueda web sin ninguna implementación local.
Utilice FoundryChatClient.get_web_search_tool():
import asyncio
import os
from agent_framework import Agent
from agent_framework.foundry import FoundryChatClient
from azure.identity import AzureCliCredential
async def main() -> None:
agent = Agent(
client=FoundryChatClient(
project_endpoint=os.environ["FOUNDRY_PROJECT_ENDPOINT"],
model=os.environ["FOUNDRY_MODEL"],
credential=AzureCliCredential(),
),
instructions="You are a research assistant. Use web search to find current information.",
tools=[
FoundryChatClient.get_web_search_tool(),
],
)
result = await agent.run("What are the latest updates to Microsoft Foundry?")
print(f"Agent: {result}")
if __name__ == "__main__":
asyncio.run(main())
La herramienta de búsqueda en la web se ejecuta en el servidor a través de la API de respuestas del proyecto Foundry. Puede combinarlo con herramientas de funciones locales para proporcionar al agente acceso web y funcionalidades de código personalizadas:
agent = Agent(
client=FoundryChatClient(
project_endpoint=os.environ["FOUNDRY_PROJECT_ENDPOINT"],
model=os.environ["FOUNDRY_MODEL"],
credential=AzureCliCredential(),
),
instructions="You are a helpful assistant with web and weather capabilities.",
tools=[
FoundryChatClient.get_web_search_tool(),
get_weather, # Local function tool defined with @tool
],
)
Pase new HostedWebSearchTool() en la lista tools:
using Azure.AI.Projects;
using Azure.Identity;
using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;
string endpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT")
?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT is not set.");
string deploymentName = Environment.GetEnvironmentVariable("FOUNDRY_MODEL")
?? throw new InvalidOperationException("FOUNDRY_MODEL is not set.");
AIAgent agent =
new AIProjectClient(new Uri(endpoint), new DefaultAzureCredential())
.AsAIAgent(
model: deploymentName,
instructions: "You are a research assistant. Use web search to find current information.",
name: "ResearchAssistant",
tools: [new HostedWebSearchTool()]);
Console.WriteLine($"Agent: {await agent.RunAsync("What are the latest updates to Microsoft Foundry?")}");
La herramienta de búsqueda web se ejecuta del lado del servidor a través de la API de Responses del proyecto Foundry. Puede combinarlo con herramientas de funciones locales para proporcionar al agente acceso web y funcionalidades de código personalizadas:
AIAgent agent =
new AIProjectClient(new Uri(endpoint), new DefaultAzureCredential())
.AsAIAgent(
model: deploymentName,
instructions: "You are a helpful assistant with web and weather capabilities.",
name: "Assistant",
tools: [new HostedWebSearchTool(), weatherTool]);
Respuestas de flujo
Recibir respuestas a medida que se generan en lugar de esperar al mensaje completo.
Use el stream=True parámetro :
import asyncio
import os
from agent_framework import Agent
from agent_framework.foundry import FoundryChatClient
from azure.identity import AzureCliCredential
async def main() -> None:
agent = Agent(
client=FoundryChatClient(
project_endpoint=os.environ["FOUNDRY_PROJECT_ENDPOINT"],
model=os.environ["FOUNDRY_MODEL"],
credential=AzureCliCredential(),
),
instructions="You are a helpful assistant.",
)
print("Agent: ", end="", flush=True)
async for chunk in agent.run("Tell me a fun fact.", stream=True):
if chunk.text:
print(chunk.text, end="", flush=True)
print()
if __name__ == "__main__":
asyncio.run(main())
Llame a RunStreamingAsync e itere el flujo AgentResponseUpdate:
using Azure.AI.Projects;
using Azure.Identity;
using Microsoft.Agents.AI;
string endpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT")
?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT is not set.");
string deploymentName = Environment.GetEnvironmentVariable("FOUNDRY_MODEL")
?? throw new InvalidOperationException("FOUNDRY_MODEL is not set.");
AIAgent agent =
new AIProjectClient(new Uri(endpoint), new DefaultAzureCredential())
.AsAIAgent(
model: deploymentName,
instructions: "You are a helpful assistant.",
name: "Assistant");
Console.Write("Agent: ");
await foreach (AgentResponseUpdate update in agent.RunStreamingAsync("Tell me a fun fact."))
{
Console.Write(update);
}
Console.WriteLine();
La salida de streaming aparece incrementalmente en la consola, mientras el modelo genera cada token.
Funcionalidades empresariales y observabilidad
Efímero no significa no administrado. Dado que las llamadas pasan por el punto de conexión del proyecto, heredan la configuración empresarial del proyecto sin cableado adicional:
- Seguimiento y supervisión: las solicitudes, las invocaciones de herramientas y el uso de tokens fluyen a Foundry Observability para el proyecto.
- Filtros de contenido y gobernanza: Los filtros de contenido a nivel de proyecto y las directivas de IA responsable se aplican a todas las llamadas.
- Identidad y acceso: Las llamadas se autentican con la configuración de identidad del proyecto; las herramientas con OBO habilitado pueden actuar como el usuario que ha iniciado sesión.
El patrón efímero no es un nivel de funcionalidad reducida: obtiene los mismos modelos, herramientas, observabilidad y gobernanza de Foundry, tanto si ejecuta el agente en proceso como empaqueta el mismo código que un agente hospedado. La opción consiste en la forma de implementación, no en el conjunto de características.
Uso del SDK de OpenAI directamente
Dado que la API de respuestas del proyecto Foundry es compatible con OpenAI, también puede llamarla directamente desde el SDK de OpenAI apuntando al cliente en el punto de conexión del proyecto ({project_endpoint}/openai/v1/responses). Use esta ruta de acceso solo si ya tiene código del SDK de OpenAI o necesita un control de nivel inferior sobre las formas de solicitud y respuesta. El nuevo código debería usar el Agent Framework, que se encarga de la autenticación, la integración de herramientas y la orquestación.
Para obtener ejemplos del SDK, consulte:
Limpieza de recursos
Dado que los agentes de Agent Framework creados aquí son efímeros, no se necesita ninguna limpieza en el lado del servicio. El agente solo existe en el proceso local. Si ha creado recursos de Foundry que ya no necesita, elimínelos en el portal de Foundry.
Contenido relacionado
Profundizar más en este patrón
Empaquetar el mismo código de agente que un agente hospedado