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.
Microsoft Agent Framework proporciona compatibilidad con varios tipos de agentes para adaptarse a diferentes casos de uso y requisitos.
Todos los agentes se derivan de una clase base común, , AIAgentque proporciona una interfaz coherente para todos los tipos de agente. Esto permite crear funcionalidades de nivel superior independientes del agente comunes, como orquestaciones multiagente.
Importante
Si usa Microsoft Agent Framework para compilar aplicaciones que operan con servidores o agentes de terceros, lo hace en su propio riesgo. Se recomienda revisar todos los datos que se comparten con servidores o agentes de terceros y ser conscientes de las prácticas de terceros para la retención y la ubicación de los datos. Es su responsabilidad gestionar si sus datos fluirán fuera de los límites de cumplimiento y geográficos de Azure de su organización y gestionar cualquier implicación relacionada.
Agentes simples basados en servicios de inferencia
El marco de trabajo del agente facilita la creación de agentes simples basados en muchos servicios de inferencia diferentes.
Cualquier servicio de inferencia que proporcione una Microsoft.Extensions.AI.IChatClient implementación se puede usar para compilar estos agentes.
Microsoft.Agents.AI.ChatClientAgent es la clase del agente que se usa para proporcionar un agente para cualquier IChatClient implementación.
Estos agentes admiten una amplia gama de funcionalidades de fábrica:
- Llamada a funciones
- Conversaciones multiturno con administración de historial de chat local o proporcionada por el servicio
- Herramientas proporcionadas por el servicio personalizado (por ejemplo, MCP, ejecución de código)
- Salida estructurada
Para crear uno de estos agentes, basta con crear un ChatClientAgent con la IChatClient implementación que prefiera.
using Microsoft.Agents.AI;
var agent = new ChatClientAgent(chatClient, instructions: "You are a helpful assistant");
Para muchos servicios populares, también tenemos asistentes para facilitar la creación de estos agentes. Consulte la documentación de cada servicio para obtener más información:
| Servicio de inferencia subyacente | Description | Se admite el almacenamiento del historial de chat del servicio | Se admite almacenamiento personalizado del historial de chat |
|---|---|---|---|
| Azure IA Foundry Agent | Agente que usa el servicio azure AI Foundry Agents como back-end. | Sí | No |
| Modelos de Azure AI Foundry ChatCompletion | Agente que usa cualquiera de los modelos implementados en el servicio Azure AI Foundry como back-end a través de ChatCompletion. | No | Sí |
| Respuestas de modelos de Azure AI Foundry | Agente que utiliza cualquiera de los modelos implementados en el servicio Azure AI Foundry como backend a través de Respuestas. | No | Sí |
| Azure OpenAI ChatCompletion | Agente que usa el servicio ChatCompletion de Azure OpenAI. | No | Sí |
| Respuestas de Azure OpenAI | Agente que usa el servicio de respuestas de Azure OpenAI. | Sí | Sí |
| OpenAI ChatCompletion | Agente que usa el servicio ChatCompletion de OpenAI. | No | Sí |
| Respuestas de OpenAI | Agente que usa el servicio de respuestas de OpenAI. | Sí | Sí |
| Asistentes de OpenAI | Agente que usa el servicio OpenAI Assistants. | Sí | No |
Cualquier otro IChatClient |
También puede usar cualquier otra Microsoft.Extensions.AI.IChatClient implementación para crear un agente. |
Varía | Varía |
Agentes personalizados complejos
También es posible crear agentes totalmente personalizados, que no son simplemente envoltorios alrededor de un IChatClient.
El marco de agentes proporciona el AIAgent tipo base.
Este tipo base es la abstracción principal de todos los agentes, que cuando se subclase permite un control completo sobre el comportamiento y las funcionalidades del agente.
Consulte la documentación de Custom Agents para obtener más información.
Servidores proxy para agentes remotos
El marco de trabajo del AIAgent agente proporciona implementaciones rápidas para protocolos de agente hospedados por servicios comunes, como A2A. De este modo, puede conectarse y usar fácilmente agentes remotos desde la aplicación.
Consulte la documentación de cada tipo de agente para obtener más información:
| Protocolo | Description |
|---|---|
| A2A | Agente que actúa como proxy a un agente remoto a través del protocolo A2A. |
Referencia de opciones del SDK de Azure y OpenAI
Al usar los servicios Azure AI Foundry, Azure OpenAI o OpenAI, tiene varias opciones de SDK para conectarse a estos servicios. En algunos casos, es posible usar varios SDK para conectarse al mismo servicio o usar el mismo SDK para conectarse a distintos servicios. Esta es una lista de las diferentes opciones disponibles con la dirección URL que debe usar al conectarse a cada una. Asegúrese de reemplazar <resource> y <project> por los nombres reales de recursos y proyectos.
| Servicio ai | SDK | Nuget | URL |
|---|---|---|---|
| Modelos de Azure AI Foundry | SDK de Azure OpenAI 2 | Azure.AI.OpenAI | https://ai-foundry-<resource.services.ai.azure.com/> |
| Modelos de Azure AI Foundry | SDK de OpenAI 3 | OpenAI | https://ai-foundry-<resource.services.ai.azure.com/openai/v1/> |
| Modelos de Azure AI Foundry | SDK de inferencia de Azure AI 2 | Azure.AI.Inference | https://ai-foundry-<resource.services.ai.azure.com/models> |
| Agentes de Azure AI Foundry | SDK de agentes persistentes de Azure AI | Azure.AI.Agents.Persistent | https://ai-foundry-<resource.services.ai.azure.com/api/projects/ai-project-project><> |
| Azure OpenAI1 | SDK de Azure OpenAI 2 | Azure.AI.OpenAI | <https:// resource.openai.azure.com/> |
| Azure OpenAI1 | SDK de OpenAI | OpenAI | <https://resource.openai.azure.com/openai/v1/> |
| OpenAI | SDK de OpenAI | OpenAI | No se requiere ninguna dirección URL |
- Actualización de Azure OpenAI a Azure AI Foundry
- Se recomienda usar el SDK de OpenAI.
- Aunque se recomienda usar el SDK de OpenAI para acceder a los modelos de Azure AI Foundry, los modelos de Azure AI Foundry admiten modelos de muchos proveedores diferentes, no solo OpenAI. Todos estos modelos se admiten a través del SDK de OpenAI.
Uso del SDK de OpenAI
Como se muestra en la tabla anterior, el SDK de OpenAI se puede usar para conectarse a varios servicios.
En función del servicio al que se conecte, es posible que tenga que establecer una URL personalizada al crear el OpenAIClient.
También puede usar diferentes mecanismos de autenticación en función del servicio.
Si se requiere una dirección URL personalizada (consulte la tabla anterior), puede establecerla a través de OpenAIClientOptions.
var clientOptions = new OpenAIClientOptions() { Endpoint = new Uri(serviceUrl) };
Es posible usar una clave de API al crear el cliente.
OpenAIClient client = new OpenAIClient(new ApiKeyCredential(apiKey), clientOptions);
Al usar un servicio de Azure, también es posible usar credenciales de Azure en lugar de una clave de API.
OpenAIClient client = new OpenAIClient(new BearerTokenPolicy(new AzureCliCredential(), "https://ai.azure.com/.default"), clientOptions)
Una vez que haya creado el OpenAIClient, puede obtener un subcliente para el servicio específico que desee usar y luego crear un AIAgent a partir de él.
AIAgent agent = client
.GetChatClient(model)
.CreateAIAgent(instructions: "You are good at telling jokes.", name: "Joker");
Uso del SDK de Azure OpenAI
Este SDK se puede usar para conectarse a los servicios Azure OpenAI y Azure AI Foundry Models.
En cualquier caso, deberá proporcionar la URL del servicio correcta al crear AzureOpenAIClient.
Consulte la tabla anterior para obtener la dirección URL correcta que se va a usar.
AIAgent agent = new AzureOpenAIClient(
new Uri(serviceUrl),
new AzureCliCredential())
.GetChatClient(deploymentName)
.CreateAIAgent(instructions: "You are good at telling jokes.", name: "Joker");
Uso del SDK de agentes persistentes de Azure AI
Este SDK solo se admite con el servicio Azure AI Foundry Agents. Consulte la tabla anterior para obtener la dirección URL correcta que se va a usar.
var persistentAgentsClient = new PersistentAgentsClient(serviceUrl, new AzureCliCredential());
AIAgent agent = await persistentAgentsClient.CreateAIAgentAsync(
model: deploymentName,
name: "Joker",
instructions: "You are good at telling jokes.");
Agentes simples basados en servicios de inferencia
El marco de trabajo del agente facilita la creación de agentes simples basados en muchos servicios de inferencia diferentes. Cualquier servicio de inferencia que proporcione una implementación de cliente de chat se puede usar para compilar estos agentes.
Estos agentes admiten una amplia gama de funcionalidades de fábrica:
- Llamada a funciones
- Conversaciones multiturno con administración de historial de chat local o proporcionada por el servicio
- Herramientas proporcionadas por el servicio personalizado (por ejemplo, MCP, ejecución de código)
- Salida estructurada
- Respuestas de streaming
Para crear uno de estos agentes, basta con construir un ChatAgent mediante la implementación del cliente de chat que prefiera.
from agent_framework import ChatAgent
from agent_framework.azure import AzureAIAgentClient
from azure.identity.aio import DefaultAzureCredential
async with (
DefaultAzureCredential() as credential,
ChatAgent(
chat_client=AzureAIAgentClient(async_credential=credential),
instructions="You are a helpful assistant"
) as agent
):
response = await agent.run("Hello!")
Como alternativa, puede usar el método de conveniencia en el cliente de chat:
from agent_framework.azure import AzureAIAgentClient
from azure.identity.aio import DefaultAzureCredential
async with DefaultAzureCredential() as credential:
agent = AzureAIAgentClient(async_credential=credential).create_agent(
instructions="You are a helpful assistant"
)
Para obtener ejemplos detallados, consulte las secciones de documentación específicas del agente a continuación.
Tipos de agentes admitidos
| Servicio de inferencia subyacente | Description | Se admite el almacenamiento del historial de chat del servicio | Se admite almacenamiento personalizado del historial de chat |
|---|---|---|---|
| Agente de Azure AI | Agente que usa el servicio de agentes de Azure AI como back-end. | Sí | No |
| Finalización del chat de Azure OpenAI | Agente que usa el servicio de finalización de chat de Azure OpenAI. | No | Sí |
| Respuestas de Azure OpenAI | Agente que usa el servicio de respuestas de Azure OpenAI. | Sí | Sí |
| Finalización del chat de OpenAI | Agente que usa el servicio de finalización de chat de OpenAI. | No | Sí |
| Respuestas de OpenAI | Agente que usa el servicio de respuestas de OpenAI. | Sí | Sí |
| Asistentes de OpenAI | Agente que usa el servicio OpenAI Assistants. | Sí | No |
| Cualquier otro ChatClient | También puede usar cualquier otra implementación de cliente de chat para crear un agente. | Varía | Varía |
Herramientas de funciones
Puede proporcionar herramientas de función a los agentes para mejorar las funcionalidades:
from typing import Annotated
from pydantic import Field
from azure.identity.aio import DefaultAzureCredential
from agent_framework.azure import AzureAIAgentClient
def get_weather(location: Annotated[str, Field(description="The location to get the weather for.")]) -> str:
"""Get the weather for a given location."""
return f"The weather in {location} is sunny with a high of 25°C."
async with (
DefaultAzureCredential() as credential,
AzureAIAgentClient(async_credential=credential).create_agent(
instructions="You are a helpful weather assistant.",
tools=get_weather
) as agent
):
response = await agent.run("What's the weather in Seattle?")
Para obtener ejemplos completos con las herramientas de función, consulte:
- Azure AI con herramientas de funciones
- Azure OpenAI con herramientas de funciones
- OpenAI con herramientas para funciones
Respuestas de streaming
Los agentes admiten respuestas normales y de streaming:
# Regular response (wait for complete result)
response = await agent.run("What's the weather like in Seattle?")
print(response.text)
# Streaming response (get results as they are generated)
async for chunk in agent.run_stream("What's the weather like in Portland?"):
if chunk.text:
print(chunk.text, end="", flush=True)
Para ver ejemplos de streaming, consulte:
- Ejemplos de streaming de Azure AI
- Ejemplos de streaming de Azure OpenAI
- Ejemplos de streaming de OpenAI
Herramientas de intérprete de código
Los agentes de Azure AI admiten herramientas de intérprete de código hospedado para ejecutar código de Python:
from agent_framework import ChatAgent, HostedCodeInterpreterTool
from agent_framework.azure import AzureAIAgentClient
from azure.identity.aio import DefaultAzureCredential
async with (
DefaultAzureCredential() as credential,
ChatAgent(
chat_client=AzureAIAgentClient(async_credential=credential),
instructions="You are a helpful assistant that can execute Python code.",
tools=HostedCodeInterpreterTool()
) as agent
):
response = await agent.run("Calculate the factorial of 100 using Python")
Para ver ejemplos de intérpretes de código, consulte:
- Azure AI con intérprete de código
- Asistentes de Azure OpenAI con intérprete de código
- Asistentes de OpenAI con intérprete de código
Agentes personalizados
También es posible crear agentes totalmente personalizados que no son solo contenedores alrededor de un cliente de chat.
Agent Framework proporciona el protocolo AgentProtocol y la clase base BaseAgent, que, al ser implementada o subclasificada, permite un control completo sobre el comportamiento y las capacidades del agente.
from agent_framework import BaseAgent, AgentRunResponse, AgentRunResponseUpdate, AgentThread, ChatMessage
from collections.abc import AsyncIterable
class CustomAgent(BaseAgent):
async def run(
self,
messages: str | ChatMessage | list[str] | list[ChatMessage] | None = None,
*,
thread: AgentThread | None = None,
**kwargs: Any,
) -> AgentRunResponse:
# Custom agent implementation
pass
def run_stream(
self,
messages: str | ChatMessage | list[str] | list[ChatMessage] | None = None,
*,
thread: AgentThread | None = None,
**kwargs: Any,
) -> AsyncIterable[AgentRunResponseUpdate]:
# Custom streaming implementation
pass