正文内容

代理与工作流:AI 系统的核心构建块

在深入探讨 Microsoft 代理框架之前,我们需要先理解代理(Agents)和工作流(Workflows)这两个核心概念。

代理(Agents)

代理是结合推理、上下文和工具来追求目标的系统。它们由三个关键组件组成:

  1. 推理和决策:代理需要推理能力来决定为实现其目标采取哪些行动。这通常由大型语言模型(LLM)提供支持,但也可以使用搜索算法、规划系统等其他技术。
  2. 上下文感知:上下文是为决策提供信息的外部数据或状态。由于模型没有对实时或系统特定信息的内置访问权限,因此需要额外的输入(如对话历史、知识库或企业数据)来做出明智决策。
  3. 工具使用:工具是离散的、可调用的功能,如 API、模型上下文协议(MCP)工具、代码执行或数据查询。它们扩展系统能力但不自行决策。
工作流(Workflows)

随着目标复杂性增加,需要将其分解为可管理步骤,这就是工作流的用武之地。工作流将复杂目标构建为一系列步骤,协调跨人员或系统的任务以有效实现目标。例如,软件交付工作流可能包括需求收集、设计、实现、测试和部署等阶段。

代理 + 工作流

虽然工作流可以作为预定序列运行,但集成代理增加了动态决策和适应性,实现更智能、自主的流程管理。代理、工具和工作流都是高度可组合的,这种分层架构支持构建灵活、智能且可扩展的系统。

认识 Microsoft 代理框架

Microsoft 代理框架是一套全面的.NET 库,旨在降低代理开发复杂性。无论您构建简单聊天机器人还是编排复杂工作流中的多个 AI 代理,该框架都提供所需工具:

  • 用最少样板代码构建代理
  • 轻松编排多代理工作流
  • 使用熟悉的.NET 模式托管和部署代理
  • 监控生产中的代理行为
建立在经过验证的基础上

Microsoft 代理框架基于以下成熟技术构建:

  • Semantic Kernel:提供强大的编排能力
  • AutoGen:支持先进的多代理协作和研究驱动技术
  • Microsoft.Extensions.AI:为.NET 提供标准化 AI 构建块

这种组合使框架具有可靠性、灵活性和开发者友好的 API,让您能快速高效地构建部署强大 AI 代理。

从简单开始:几分钟内构建第一个代理

Microsoft 代理框架入门非常简单。以下示例将构建一个生成引人入胜短篇小说的创意写作代理。

步骤 0:配置先决条件

需要准备:

  • .NET 9 SDK 或更高版本
  • 具有模型范围的 GitHub 个人访问令牌 (PAT)

设置环境变量:

export GITHUB_TOKEN="YOUR-GITHUB-TOKEN"
步骤 1:设置项目

创建新 C# 控制台应用并安装必要包:

dotnet new console -o HelloWorldAgents
cd HelloWorldAgents
dotnet add package Microsoft.Agents.AI --prerelease
dotnet add package OpenAI
dotnet add package Microsoft.Extensions.AI.OpenAI --prerelease
dotnet add package Microsoft.Extensions.AI
步骤 2:编写代理

将以下代码添加到 Program.cs 文件:

using Microsoft.Extensions.AI;
using Microsoft.Agents.AI;
using OpenAI;
using OpenAI.Chat;
using System.ClientModel;

IChatClient chatClient = new ChatClient(
        "gpt-4o-mini",
        new ApiKeyCredential(Environment.GetEnvironmentVariable("GITHUB_TOKEN")!),
        new OpenAIClientOptions { Endpoint = new Uri("https://models.github.ai/inference") })
    .AsIChatClient();

AIAgent writer = new ChatClientAgent(
    chatClient,
    new ChatClientAgentOptions
    {
        Name = "Writer",
        Instructions = "Write stories that are engaging and creative."
    });

AgentRunResponse response = await writer.RunAsync("Write a short story about a haunted house.");

Console.WriteLine(response.Text);

运行应用程序,您就拥有了一个功能完整的 AI 代理!

抽象的力量

Microsoft 代理框架围绕简化代理开发的强大抽象设计。其核心是 AIAgent 抽象,它提供构建代理的统一接口。通过 Microsoft.Extensions.AI 标准化模型访问(通过 IChatClient 接口),您可以轻松在不同提供商(如 OpenAI、Azure OpenAI、GitHub Models 等)之间选择,而无需更改代理代码。

纵向扩展:编排多个代理

单个代理功能强大,但实际场景常需多个专业代理协作。例如,写作代理创建内容后,可能需要编辑代理润色或事实核查代理验证细节。

添加专业代理
// 创建专业编辑代理
AIAgent editor = new ChatClientAgent(
    chatClient,
    new ChatClientAgentOptions
    {
        Name = "Editor",
        Instructions = "Make the story more engaging, fix grammar, and enhance the plot."
    });
构建工作流

安装工作流包:

dotnet add package Microsoft.Agents.AI.Workflows --prerelease

创建工作流连接代理:

Workflow workflow = AgentWorkflowBuilder.BuildSequential(writer, editor);
AIAgent workflowAgent = await workflow.AsAgentAsync();
AgentRunResponse workflowResponse = await workflowAgent.RunAsync("Write a short story about a haunted house.");
Console.WriteLine(workflowResponse.Text);

现在运行时,编写者创建初始故事,编辑器自动审查改进,整个工作流对外表现为单个更强大的代理。

所有类型的工作流

Microsoft 代理框架支持多种工作流模式:

  1. 顺序:代理按顺序执行,沿链传递结果
  2. 并发:多个代理并行工作
  3. 交接:根据上下文或结果转移责任
  4. 群聊:代理在共享对话空间中协作

这些灵活类型支持从简单管道到动态多代理协作的各种编排需求。

为代理赋能工具

Microsoft 代理框架使代理能轻松访问外部功能、API 和服务。

创建代理工具
[Description("Gets the author of the story.")]
string GetAuthor() => "Jack Torrance";

[Description("Formats the story for display.")]
string FormatStory(string title, string author, string story) => 
    $"Title: {title}\nAuthor: {author}\n\n{story}";
将工具连接到代理
AIAgent writer = new ChatClientAgent(
    chatClient,
    new ChatClientAgentOptions
    {
        Name = "Writer",
        Instructions = "Write stories that are engaging and creative.",
        ChatOptions = new ChatOptions
        {
            Tools = [
                AIFunctionFactory.Create(GetAuthor),
                AIFunctionFactory.Create(FormatStory)
            ],
        }
    });

框架还支持更强大的工具,如模型上下文协议 (MCP) 服务器和托管工具 (如代码解释器、Bing Grounding 等)。

充满信心部署:简化托管

将代理投入生产不应意味着学习新部署模型。Microsoft 代理框架与您已使用的.NET 托管模式无缝集成。

最小 Web API 集成
// 在ASP.NET最小Web API中注册IChatClient
builder.AddOpenAIClient("chat")
    .AddChatClient(Environment.GetEnvironmentVariable("MODEL_NAME") ?? "gpt-4o-mini");

// 注册代理
builder.AddAIAgent("Writer", (sp, key) => {
    var chatClient = sp.GetRequiredService<ichatclient>();
    return new ChatClientAgent(
        chatClient,
        name: key,
        instructions: "You are a creative writing assistant...",
        tools: [AIFunctionFactory.Create(GetAuthor), AIFunctionFactory.Create(FormatStory)]
    );
});
生产就绪功能

框架托管包括生产所需的一切:

  • 通过标准.NET 配置管理代理设置
  • 与现有 DI 容器和实践集成
  • 添加身份验证、速率限制或自定义逻辑的中间件支持

部署就像添加代理并部署到.NET 运行的地方一样简单。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐