共用方式為


Microsoft Agent Framework 代理類型

Microsoft 代理程式架構提供數種類型的代理程式支援,以適應不同的使用案例和需求。

所有代理程式都衍生自通用基類, AIAgent該基類為所有代理程式類型提供一致的介面。 這允許建置通用的、與代理程式無關的更高層級功能,例如多代理程式協調流程。

所有代理程式都衍生自通用基類, Agent該基類為所有代理程式類型提供一致的介面。 這允許建置通用的、與代理程式無關的更高層級功能,例如多代理程式協調流程。

預設代理執行時執行模型

Microsoft 代理框架中的所有代理皆使用結構化執行時模型執行。 此模型協調使用者互動、模型推論與工具執行,形成確定性迴圈。

AI 代理圖

這很重要

如果您使用 Microsoft 代理程式架構來建置與協力廠商伺服器或代理程式搭配運作的應用程式,則風險由您自行承擔。 我們建議您檢閱與第三方伺服器或代理程式共用的所有資料,並瞭解第三方資料保留和位置的做法。 您有責任管理您的資料是否會流向組織的 Azure 合規性和地理界限之外,以及任何相關影響。

以推論服務為基礎的簡單代理程式

代理框架工具使得基於多種推論服務創建簡單代理程式變得容易。 任何提供實作的 Microsoft.Extensions.AI.IChatClient 推論服務都可以用來建構這些代理。 Microsoft.Agents.AI.ChatClientAgent 類別是用來為任何 IChatClient 實作提供代理的代理類別。

這些代理程式支援各種即時可用的功能:

  1. 函式調用。
  2. 支援本地聊天記錄管理或提供聊天記錄管理服務的多回合對話。
  3. 自訂服務提供的工具(例如 MCP、程式碼執行)。
  4. 結構化產出。

若要建立其中一個代理程式,只需建構您所選擇的 ChatClientAgent,使用您所選擇的 IChatClient 實作即可。

using Microsoft.Agents.AI;

var agent = new ChatClientAgent(chatClient, instructions: "You are a helpful assistant");

為了讓建立這些代理更簡單,代理框架為許多熱門服務提供協助工具。 欲了解更多資訊,請參閱各項服務的文件。

底層推論服務 Description 支援儲存服務聊天記錄 支援 InMemory/自訂聊天歷史儲存
Azure AI Foundry 代理程式 使用 Azure AI Foundry 代理程式服務作為其後端的代理程式。 Yes
Azure AI Foundry 模型 ChatCompletion 代理程式透過 ChatCompletion 將 Azure AI Foundry Service 中部署的任何模型用作其後端。 Yes
Azure AI Foundry 模型回應 透過 Azure AI Foundry Service 中的回應機制,使用任何已部署的模型作為其後端的代理程式。 Yes Yes
Azure AI Foundry Anthropic 一個使用 Claude 模型並透過 Azure AI Foundry Anthropic Service 作為後端的代理。 Yes
Azure OpenAI 聊天完成 使用 Azure OpenAI ChatCompletion 服務的代理程式。 Yes
Azure OpenAI 回應 使用 Azure OpenAI 回應服務的代理程式。 Yes Yes
人為 一個透過 Anthropic Service 作為後端使用 Claude 模型的代理。 Yes
OpenAI 聊天完成 使用 OpenAI ChatCompletion 服務的代理程式。 Yes
OpenAI 回應 使用 OpenAI Responses 服務的代理程式。 Yes Yes
OpenAI 助手 使用 OpenAI Assistants 服務的代理程式。 Yes
任何其他 IChatClient 您也可以使用任何其他 Microsoft.Extensions.AI.IChatClient 實作來建立代理程式。 不定 不定

複雜的自訂代理程式

也可以建立完全客製化的代理,而不是僅僅包裹在 IChatClient 之中。 代理程式架構提供 AIAgent 基本類型。 此基礎型態是所有代理的核心抽象,當被子類化時,允許對代理的行為與能力進行完全控制。

欲了解更多資訊,請參閱 《海關代理人》相關文件。

遠端代理的代理程式

代理框架提供開箱即可使用的通用服務託管的代理協定實作,例如 A2A。 如此一來,您就可以從應用程式輕鬆連線及使用遠端代理程式。

如需詳細資訊,請參閱每種代理程式類型的文件:

協定 Description
A2A 作為經由 A2A 協定連接遠端代理程式的代理代理程式。

Azure 和 OpenAI SDK 選項參考

使用 Azure AI Foundry、Azure OpenAI、OpenAI 服務或 Anthropic 服務時,你有多種 SDK 選項可以連接這些服務。 在某些情況下,可以使用多個 SDK 連線到相同的服務,或使用相同的 SDK 連線到不同的服務。 以下是連接每個選項時應使用的 URL 可用的不同選項的列表。 請務必將 <resource><project> 替換為您的實際資源和專案名稱。

AI 服務 SDK NuGet 網址
Azure AI Foundry 模型 Azure OpenAI SDK 2 Azure.AI.OpenAI https://ai-foundry-<資源>.services.ai.azure.com/
Azure AI Foundry 模型 OpenAI SDK 3 OpenAI https://ai-foundry-<資源>.services.ai.azure.com/openai/v1/
Azure AI Foundry 模型 Azure AI 推斷 SDK 2 Azure.AI.推論 https://ai-foundry-<資源>.services.ai.azure.com/models
Azure AI Foundry 代理程式 Azure AI 持續性代理程式 SDK Azure.AI.Agents.Persistent https://ai-foundry-<資源>.services.ai.azure.com/api/projects/ai-project 項目<>
Azure OpenAI1 Azure OpenAI SDK 2 Azure.AI.OpenAI https://< 資源>.openai.azure.com/
Azure OpenAI1 OpenAI 開發套件 OpenAI https://< 資源>.openai.azure.com/openai/v1/
OpenAI OpenAI 開發套件 OpenAI 無需網址
Azure AI Foundry Anthropic Anthropic Foundry 軟體開發工具包 (SDK) Anthropic.Foundry 所需資源名稱
人類學的 Anthropic SDK(軟體開發工具包) 人為 不需要網址或資源名稱
  1. 從 Azure OpenAI 升級至 Azure AI Foundry
  2. 我們建議使用 OpenAI SDK。
  3. 雖然我們建議使用 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。 請參閱上表,瞭解要使用的正確網址。

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 代理程式服務。 請參閱上表,瞭解要使用的正確網址。

var persistentAgentsClient = new PersistentAgentsClient(serviceUrl, new DefaultAzureCredential());
AIAgent agent = await persistentAgentsClient.CreateAIAgentAsync(
    model: deploymentName,
    instructions: "You are good at telling jokes.",
    name: "Joker");

使用 Azure AI Foundry Anthropic SDK

資源是指在端點 Uri 中出現於 '.services.ai.azure.com' 前面的子網域名稱/前置名稱。

例如:https://(resource name).services.ai.azure.com/anthropic/v1/chat/completions

var client = new AnthropicFoundryClient(new AnthropicFoundryApiKeyCredentials(apiKey, resource));
AIAgent agent = client.AsAIAgent(
    model: deploymentName,
    instructions: "Joker",
    name: "You are good at telling jokes.");

使用 Anthropic SDK

var client = new AnthropicClient() { ApiKey = apiKey };
AIAgent agent = client.AsAIAgent(
    model: deploymentName,
    instructions: "Joker",
    name: "You are good at telling jokes.");

以推論服務為基礎的簡單代理程式

代理框架工具使得基於多種推論服務創建簡單代理程式變得容易。 任何提供聊天用戶端實作的推論服務都可用來建置這些代理程式。 可以使用 SupportsChatGetResponse 來完成此操作,因為該標準定義了客戶端需要支援的方法,以便可以與標準 Agent 類別一起使用。

這些代理程式支援各種即時可用的功能:

  1. 函數呼叫
  2. 多輪對話,包含本地聊天記錄管理或服務提供的聊天記錄管理
  3. 自訂服務提供的工具(例如 MCP、程式碼執行)
  4. 結構化輸出
  5. 串流回應

要建立其中一個代理,只需建立 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 代理程式服務作為其後端的代理程式。 Yes
Azure OpenAI 聊天完成 使用 Azure OpenAI 聊天完成服務的代理程式。
Azure OpenAI 回應 使用 Azure OpenAI 回應服務的代理程式。 Yes
Azure OpenAI 助理 一位使用 Azure OpenAI 助理服務的代理。 Yes
OpenAI 聊天完成 使用 OpenAI 聊天完成服務的代理程式。
OpenAI 回應 使用 OpenAI Responses 服務的代理程式。 Yes
OpenAI 助手 使用 OpenAI Assistants 服務的代理程式。 Yes
人類克勞德 使用 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 的代理。

後續步驟