Microsoft代理框架为多种类型的代理提供支持,以适应不同的用例和要求。
所有代理都派生自通用基类, AIAgent该类为所有代理类型提供一致的接口。 这允许生成与代理无关的更高级别的常见功能,例如多代理业务流程。
所有代理都派生自通用基类, Agent该类为所有代理类型提供一致的接口。 这允许生成与代理无关的更高级别的常见功能,例如多代理业务流程。
默认代理运行时执行模型
Microsoft Agent Framework 中的所有代理都使用结构化运行时模型执行。 此模型在确定性循环中协调用户交互、模型推理和工具执行。
重要
如果使用 Microsoft Agent Framework 生成使用第三方服务器或代理运行的应用程序,则自行承担风险。 建议查看与第三方服务器或代理共享的所有数据,并识别第三方保留和位置数据的做法。 作为负责人,您需要管理贵组织的数据是否将超出其 Azure 合规性和地理界限,并承担任何相关的影响。
基于推理服务的简单代理
使用代理框架,可以轻松基于许多不同的推理服务创建简单的代理。
提供 Microsoft.Extensions.AI.IChatClient 实现的任何推理服务都可用于生成这些代理。
Microsoft.Agents.AI.ChatClientAgent是用于为任何IChatClient实现提供代理的代理类。
这些代理程序原生支持多种功能:
- 函数调用。
- 使用本地聊天历史记录管理或服务提供的聊天历史记录管理进行多轮次对话。
- 自定义服务提供的工具(例如 MCP、代码执行)。
- 结构化输出。
要创建这些代理之一,只需使用所选的ChatClientAgent实现来构造一个IChatClient。
using Microsoft.Agents.AI;
var agent = new ChatClientAgent(chatClient, instructions: "You are a helpful assistant");
为了更轻松地创建这些代理,Agent Framework 为许多常用服务提供了帮助程序。 有关详细信息,请参阅每个服务的文档。
| 底层推理服务 | Description | 支持服务聊天历史记录存储 | 支持 InMemory/自定义聊天历史记录存储 |
|---|---|---|---|
| Azure AI Foundry Agent | 使用 Azure AI Foundry Agents 服务作为其后台的代理。 | 是的 | 否 |
| Azure AI Foundry 模型 ChatCompletion | 使用 Azure AI Foundry 服务中部署的任何模型作为其后端通过 ChatCompletion 的代理。 | 否 | 是的 |
| Azure AI Foundry 模型响应 | 使用 Azure AI Foundry 服务中部署的任何模型,通过响应作为其后端的代理。 | 是的 | 是的 |
| Azure OpenAI ChatCompletion | 使用 Azure OpenAI ChatCompletion 服务的代理。 | 否 | 是的 |
| Azure OpenAI 响应 | 使用 Azure OpenAI 响应服务的代理。 | 是的 | 是的 |
| OpenAI ChatCompletion | 使用 OpenAI ChatCompletion 服务的代理。 | 否 | 是的 |
| OpenAI 响应 | 使用 OpenAI 响应服务的代理。 | 是的 | 是的 |
| OpenAI 助手 | 使用 OpenAI 助手服务的代理。 | 是的 | 否 |
任何其他 IChatClient |
还可以使用任何其他 Microsoft.Extensions.AI.IChatClient 实现来创建代理。 |
多种多样 | 多种多样 |
复杂的自定义代理
还可以创建完全自定义的代理,这些代理不仅仅是< c0 />的包装器。
代理框架提供 AIAgent 基类型。
此基类型是所有代理的核心抽象,当子类化时,可以完全控制代理的行为和功能。
有关详细信息,请参阅 自定义代理的文档。
远程代理的代理服务器
代理框架为常见的服务托管代理协议(如 A2A)提供现成的AIAgent实现。 这样,可以轻松地从应用程序连接到和使用远程代理。
有关详细信息,请参阅每种代理类型的文档:
| 协议 | Description |
|---|---|
| A2A | 一个通过 A2A 协议充当远程代理的代理。 |
Azure 和 OpenAI SDK 选项参考
使用 Azure AI Foundry、Azure OpenAI 或 OpenAI 服务时,可以使用各种 SDK 选项连接到这些服务。 在某些情况下,可以使用多个 SDK 连接到同一服务或使用同一 SDK 连接到不同的服务。 下面是连接到每个 URL 时应使用的不同选项的列表。 请务必用您的实际资源和项目名称替换 <resource> 和 <project>。
| AI 服务 | SDK | Nuget | 网址 |
|---|---|---|---|
| Azure AI Foundry 模型 | Azure OpenAI SDK 2 | Azure.AI.OpenAI | https://ai-foundry-<resource.services.ai.azure.com/> |
| Azure AI Foundry 模型 | OpenAI SDK 3 | OpenAI | https://ai-foundry-<resource.services.ai.azure.com/openai/v1/> |
| Azure AI Foundry 模型 | Azure AI 推理 SDK 2 | Azure.AI.Inference | https://ai-foundry-<resource.services.ai.azure.com/models> |
| Azure AI Foundry 软件代理 | Azure AI 持久代理 SDK | Azure.AI.Agents.Persistent | https://ai-foundry-<resource.services.ai.azure.com/api/projects/ai-project-project><> |
| Azure OpenAI1 | Azure OpenAI SDK 2 | Azure.AI.OpenAI | <https:// resource.openai.azure.com/> |
| Azure OpenAI1 | OpenAI SDK | OpenAI | <https://resource.openai.azure.com/openai/v1/> |
| OpenAI | OpenAI SDK | OpenAI | 不需要 URL |
- 从 Azure OpenAI 升级到 Azure AI Foundry
- 建议使用 OpenAI SDK。
- 虽然我们建议使用 OpenAI SDK 访问 Azure AI Foundry 模型,但 Azure AI Foundry 模型支持来自许多不同的供应商的模型,而不仅仅是 OpenAI。 所有这些模型都通过 OpenAI SDK 受支持。
使用 OpenAI SDK
如上表所示,OpenAI SDK 可用于连接到多个服务。
根据要连接到的服务,在创建 OpenAIClient 时,可能需要设置自定义 URL。
还可以根据服务使用不同的身份验证机制。
如果需要自定义 URL(请参阅上表),可以通过 OpenAIClientOptions 对其进行设置。
var clientOptions = new OpenAIClientOptions() { Endpoint = new Uri(serviceUrl) };
创建客户端时可以使用 API 密钥。
OpenAIClient client = new OpenAIClient(new ApiKeyCredential(apiKey), clientOptions);
使用 Azure 服务时,也可以使用 Azure 凭据而不是 API 密钥。
OpenAIClient client = new OpenAIClient(new BearerTokenPolicy(new DefaultAzureCredential(), "https://ai.azure.com/.default"), clientOptions)
警告
DefaultAzureCredential 对于开发来说很方便,但在生产中需要仔细考虑。 在生产环境中,请考虑使用特定凭据(例如), ManagedIdentityCredential以避免延迟问题、意外凭据探测以及回退机制的潜在安全风险。
创建 OpenAIClient 后,可以获取要使用的特定服务的子客户端,然后从该服务创建一个 AIAgent 。
AIAgent agent = client
.GetChatClient(model)
.AsAIAgent(instructions: "You are good at telling jokes.", name: "Joker");
使用 Azure OpenAI SDK
此 SDK 可用于连接到 Azure OpenAI 和 Azure AI Foundry 模型服务。
无论哪种情况,在创建AzureOpenAIClient时,都需要提供正确的服务 URL。
有关要使用的正确 URL,请参阅上表。
AIAgent agent = new AzureOpenAIClient(
new Uri(serviceUrl),
new DefaultAzureCredential())
.GetChatClient(deploymentName)
.AsAIAgent(instructions: "You are good at telling jokes.", name: "Joker");
使用 Azure AI 持久代理 SDK
此 SDK 仅受 Azure AI Foundry 代理服务支持。 有关要使用的正确 URL,请参阅上表。
var persistentAgentsClient = new PersistentAgentsClient(serviceUrl, new DefaultAzureCredential());
AIAgent agent = await persistentAgentsClient.CreateAIAgentAsync(
model: deploymentName,
name: "Joker",
instructions: "You are good at telling jokes.");
基于推理服务的简单代理
使用代理框架,可以轻松基于许多不同的推理服务创建简单的代理。
提供聊天客户端实现的任何推理服务都可用于生成这些代理。
这可以通过使用SupportsChatGetResponse 来规定一个标准,定义客户端需要支持的方法,以便与标准类 Agent 一起使用。
这些代理程序原生支持多种功能:
- 函数调用
- 使用本地聊天历史记录管理或服务提供的聊天历史记录管理进行多轮次对话
- 自定义服务提供的工具(例如 MCP、代码执行)
- 结构化输出
- 流式处理响应
若要创建其中一个代理,只需使用所选的聊天客户端实现来构造一个 Agent 。
import os
from agent_framework import Agent
from agent_framework.azure import AzureOpenAIResponsesClient
from azure.identity.aio import DefaultAzureCredential
Agent(
client=AzureOpenAIResponsesClient(credential=DefaultAzureCredential(), project_endpoint=os.getenv("AZURE_AI_PROJECT_ENDPOINT"), deployment_name=os.getenv("AZURE_OPENAI_RESPONSES_DEPLOYMENT_NAME")),
instructions="You are a helpful assistant"
) as agent
response = await agent.run("Hello!")
或者,可以在聊天客户端上使用便利方法:
from agent_framework.azure import AzureOpenAIResponsesClient
from azure.identity.aio import DefaultAzureCredential
agent = AzureOpenAIResponsesClient(async_credential=DefaultAzureCredential(), project_endpoint=os.getenv("AZURE_AI_PROJECT_ENDPOINT"), deployment_name=os.getenv("AZURE_OPENAI_RESPONSES_DEPLOYMENT_NAME")).as_agent(
instructions="You are a helpful assistant"
)
注释
此示例演示如何使用 AzureOpenAIResponsesClient,但相同的模式适用于实现 SupportsChatGetResponse的任何聊天客户端,请参阅 提供程序概述 ,了解有关其他客户端的更多详细信息。
有关详细示例,请参阅下面的特定于代理的文档部分。
支持的聊天提供程序
| 基础推理服务 | Description | 支持服务聊天历史记录存储 |
|---|---|---|
| Azure AI Foundry 代理 | 使用 Azure AI 代理服务作为其后端的代理。 | 是的 |
| Azure OpenAI 聊天完成 | 使用 Azure OpenAI 聊天完成服务的代理。 | 否 |
| Azure OpenAI 响应 | 使用 Azure OpenAI 响应服务的代理。 | 是的 |
| Azure OpenAI 助手 | 使用 Azure OpenAI 助手服务的代理。 | 是的 |
| OpenAI 聊天完成 | 使用 OpenAI 聊天完成服务的代理。 | 否 |
| OpenAI 响应 | 使用 OpenAI 响应服务的代理。 | 是的 |
| OpenAI 助手 | 使用 OpenAI 助手服务的代理。 | 是的 |
| 人类克劳德 | 使用Anthropic Claude模型的代理。 | 否 |
| 亚马逊基岩版 | 通过 Agent Framework Bedrock 聊天客户端使用 Amazon Bedrock 模型的代理。 | 否 |
| GitHub Copilot | 使用 GitHub Copilot SDK 后端的代理。 | 否 |
| Ollama (OpenAI 兼容) | 通过 OpenAI 兼容的 API 使用本地托管的 Ollama 模型的代理。 | 否 |
| 任何其他聊天客户端 | 还可以使用任何其他实现 SupportsChatGetResponse 来创建代理。 |
多种多样 |
每当支持基于会话的聊天状态时,都支持自定义聊天历史记录存储。
流式处理响应
代理支持流式响应和常规响应。
# 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("What's the weather like in Portland?", stream=True):
if chunk.text:
print(chunk.text, end="", flush=True)
有关流式处理示例,请参阅:
有关更多调用模式,请参阅 “正在运行的代理”。
函数工具
可以为代理提供函数工具,以便增强功能:
import os
from typing import Annotated
from azure.identity.aio import DefaultAzureCredential
from agent_framework.azure import AzureOpenAIResponsesClient
def get_weather(location: Annotated[str, "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:
agent = AzureOpenAIResponsesClient(
async_credential=credential,
project_endpoint=os.getenv("AZURE_AI_PROJECT_ENDPOINT"),
deployment_name=os.getenv("AZURE_OPENAI_RESPONSES_DEPLOYMENT_NAME"),
).as_agent(
instructions="You are a helpful weather assistant.",
tools=get_weather,
)
response = await agent.run("What's the weather in Seattle?")
有关工具和工具模式,请参阅 工具概述。
自定义智能体
有关完全自定义实现(例如确定性代理或 API 支持的代理),请参阅 自定义代理。 该页介绍了实现SupportsAgentRun或扩展BaseAgent的内容,包括使用AgentResponseUpdate进行流式更新。
其他代理类型
代理框架还包括协议支持的代理,例如:
| 代理类型 | Description |
|---|---|
| A2A | 用于连接和调用远程 A2A 兼容代理的代理程序。 |