news 2026/1/10 18:52:49

Microsoft Agent Framework - 顺序执行 Workflow

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Microsoft Agent Framework - 顺序执行 Workflow

在构建复杂的人工智能应用时,我们常常需要将一个大任务拆解成多个小步骤,并让不同的 AI Agent 按顺序依次处理。Microsoft Agent Framework 提供了一个强大而灵活的工具——Workflow,来帮助我们轻松编排和管理这些 Agent 的协作流程。

今天,我们就来深入探讨一种最基本也最常用的工作流模式:**顺序工作流 (Sequential Workflow)**。

场景设定

假设我们需要一个翻译流程:用户输入一句中文,我们希望系统能依次提供英文和日文的翻译。

为了实现这个目标,我们将创建两个专门的 AI Agent:

  1. 英语翻译官:一个只负责将中文翻译成英文的专家。

  2. 日语翻译官:一个只负责将中文翻译成日文的专家。

然后,我们会使用AgentWorkflowBuilder将这两个 Agent 构建成一个顺序执行的工作流。

代码详解

下面是实现这个顺序翻译工作流的 C# 完整代码。

using System.ClientModel; using Microsoft.Extensions.AI; using OpenAI; using Microsoft.Agents.AI.Workflows; using OpenAI.Chat; namespaceMSAgentFramework.Learn.workflow { internalclassSeq { public async Task Run() { var endpoint = "https://api.deepseek.com/v1"; var apiKey = "sk-59872d44521c4d798faa8315529abcce"; // 1. 创建英语翻译 Agent var englishTranslator = new OpenAIClient( new ApiKeyCredential(apiKey) , new OpenAIClientOptions() { Endpoint = new Uri(endpoint) } ) .GetChatClient("deepseek-chat") .CreateAIAgent(instructions: "你是一个英语专家,当你收到中文的时候帮忙翻译成英文.", name: "English Translator"); // 2. 创建日语翻译 Agent var japaneseTranslator = new OpenAIClient( new ApiKeyCredential(apiKey) , new OpenAIClientOptions() { Endpoint = new Uri(endpoint) } ) .GetChatClient("deepseek-chat") .CreateAIAgent(instructions: "你是一个日语专家,当你收到中文的时候帮忙翻译成日文.", name: "Japanese Translator"); // 3. 构建顺序工作流 var workflow = AgentWorkflowBuilder.BuildSequential([englishTranslator, japaneseTranslator]); // 4. 准备输入消息并运行工作流 var messages = new List<Microsoft.Extensions.AI.ChatMessage> { new(ChatRole.User, "人生如一本书,愚者草草翻过,智者细细阅读。") }; StreamingRun run = await InProcessExecution.StreamAsync(workflow, messages); await run.TrySendMessageAsync(new TurnToken(emitEvents: true)); List<Microsoft.Extensions.AI.ChatMessage> result = new(); // 5. 监听并处理工作流事件 awaitforeach (WorkflowEvent evt in run.WatchStreamAsync().ConfigureAwait(false)) { if (evt is AgentRunUpdateEvent e) { Console.WriteLine($"{e.ExecutorId}: {e.Data}"); } elseif (evt is WorkflowOutputEvent outputEvt) { result = (List<Microsoft.Extensions.AI.ChatMessage>)outputEvt.Data!; break; } } // 6. 显示最终结果 foreach (var message in result) { Console.WriteLine($"{message.Role}: {message.Text}"); } } } }
代码剖析
  1. Agent 初始化:

  • 我们首先配置了OpenAIClient,值得注意的是,这里我们使用了自定义的Endpoint(deepseek) 和对应的ApiKey

  • 接着,通过CreateAIAgent方法创建了两个实例:englishTranslatorjapaneseTranslator

  • 每个 Agent 都被赋予了明确的instructions(指令) 和一个唯一的name。这些指令是 Agent 行为的核心,它告诉 Agent 它的角色和职责。

  • 构建 Workflow:

    • 最关键的一步在这里:AgentWorkflowBuilder.BuildSequential([englishTranslator, japaneseTranslator]);

    • 我们调用BuildSequential方法,并传入一个包含我们两个 Agent 的数组。Agent 在数组中的顺序决定了它们的执行顺序。在这个例子中,englishTranslator会先执行,然后是japaneseTranslator

  • 执行与结果处理:

    • 我们创建了一个初始的用户消息。

    • InProcessExecution.StreamAsync启动工作流,并通过WatchStreamAsync异步监听工作流产生的事件。

    • AgentRunUpdateEvent事件可以让我们实时看到每个 Agent 执行时产生的数据片段。

    • WorkflowOutputEvent事件则标志着整个工作流执行完毕,我们可以从中获取最终的完整结果。

    结果与解读

    当上述代码运行后,我们会在控制台看到如下输出:

    user: 人生如一本书,愚者草草翻过,智者细细阅读。 assistant: Life is like a book: the fool flips through it, while the wise read it carefully and deliberately. assistant: 人生は一冊の本のようなもの。愚者はざっとページをめくり、賢者は丹念に読み込む。

    总结

    通过这个简单的例子,我们了解了如何使用AgentWorkflowBuilder.BuildSequential来创建一个按预定顺序执行任务的 Agent 工作流。这种模式非常适合处理需要多步骤、逻辑清晰的复杂任务。

    通过链式组合不同功能的 Agent,我们可以构建出功能强大、逻辑严密的 AI 应用,而框架本身则优雅地处理了 Agent 之间的状态和上下文传递。

    希望这篇博客能帮助你入门 Microsoft Agent Framework 的顺序工作流。快去尝试构建属于你自己的 Agent 链吧!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/24 0:23:18

LDO设计原理详解:超详细版电源管理芯片分析

LDO设计原理详解&#xff1a;从零构建高性能电源管理芯片的认知体系你有没有遇到过这样的情况&#xff1f;系统里某个ADC的采样结果总是“飘”&#xff0c;噪声大得离谱&#xff0c;排查半天才发现是给它供电的LDO没选对&#xff1b;或者电池续航怎么都优化不上去&#xff0c;最…

作者头像 李华
网站建设 2026/1/6 12:16:30

将企业Wiki接入AI:通过anything-llm实现语义化查询

将企业Wiki接入AI&#xff1a;通过anything-llm实现语义化查询 在一家中型科技公司&#xff0c;新入职的开发工程师小李第一天上班就被安排对接一个核心API服务。他打开公司Confluence Wiki&#xff0c;搜索“鉴权流程”&#xff0c;跳出了27个标题含“auth”的页面——从设计…

作者头像 李华
网站建设 2025/12/24 0:21:06

基于Python+大数据+SSM基于深度学习的淘宝用户购物可视化与行为预测系统(源码+LW+调试文档+讲解等)/淘宝用户分析系统/购物行为预测系统/用户购物可视化系统/电商用户行为预测

博主介绍 &#x1f497;博主介绍&#xff1a;✌全栈领域优质创作者&#xff0c;专注于Java、小程序、Python技术领域和计算机毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅&#x1f447;&#x1f3fb; 2025-2026年最新1000个热门Java毕业设计选题…

作者头像 李华
网站建设 2025/12/24 0:19:54

如何用anything-llm实现文档智能检索与对话交互?

如何用 Anything-LLM 实现文档智能检索与对话交互&#xff1f; 在企业知识库动辄上千份PDF、Word和Excel文件的今天&#xff0c;如何快速找到“那份说过但记不清在哪”的关键信息&#xff1f;传统搜索依赖关键词匹配&#xff0c;面对模糊提问常常束手无策&#xff1b;而通用大模…

作者头像 李华
网站建设 2026/1/4 8:42:33

System76发布Pop!_OS 24.04 LTS版搭载全新Rust构建的桌面环境

经过长时间的开发&#xff0c;第一个完全基于Rust构建的桌面环境1.0版本终于发布&#xff0c;整体表现令人印象深刻。上周末&#xff0c;System76正式发布了其内部开发的Ubuntu衍生版本的长期支持版本&#xff0c;同时推出了完全用Rust重新实现的内部桌面环境COSMIC的"Epo…

作者头像 李华
网站建设 2026/1/9 7:26:08

Pr字幕样式如何统一修改?简单3步,新手也能一次改完

如果你搜索到这篇文章&#xff0c;大概率只有一个想法&#xff1a; 字幕太多了&#xff0c;不想一条一条改。 不管是改字体、颜色&#xff0c;还是统一位置&#xff0c;只要字幕数量一多&#xff0c;用 Pr 原生方式操作&#xff0c;都会变得又慢又容易出错。 下面这套方法&…

作者头像 李华