你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
工作流是 Microsoft Foundry 中基于 UI 的工具。 可以使用它们创建声明性预定义动作序列,包括代理的,就像在 Microsoft Agent Framework 的工作流中一样。
工作流使你能够构建智能自动化系统,以可视方式将 AI 代理与业务流程无缝混合。 传统的单代理系统在处理复杂多方面任务的能力有限。 通过协调多个代理(每个代理都具有专业知识或角色)可以创建更可靠、更自适应且能够协作解决实际问题的系统。
先决条件
- 拥有有效订阅的 Azure 帐户。 如果没有帐户,请创建一个 免费的 Azure 帐户,其中包括免费试用订阅。
- Microsoft Foundry 中的项目。
工作流概念
若要在 Foundry 中创建工作流,可以从空白工作流开始,或选择预定义业务流程模式的模板之一:
| 图案 | Description | 典型用例 |
|---|---|---|
| 人机共生 | 询问用户一个问题并等待用户输入继续 | 在工作流执行期间创建审批请求并等待人工审批,或获取用户信息 |
| 顺序 | 按定义的顺序将一个代理的结果传递到下一个代理 | 分步工作流、管道或多阶段处理 |
| 群组聊天 | 根据上下文或规则动态在各代理之间传递控制权 | 动态工作流、升级、回退或专家移交方案 |
有关详细信息,请参阅 Microsoft Agent Framework 工作流业务流程。
创建工作流
以下步骤演示如何创建顺序类型的工作流作为示例:
-
登录到 Microsoft Foundry。 确保 New Foundry 开关处于打开状态。 这些步骤涉及到 Foundry(新)。
在右上角菜单中,选择“ 生成”。
选择 创建新工作流>顺序。
通过在工作流中选择每个代理节点并选择所需的代理或创建新代理,将代理分配到代理节点。 有关详细信息,请参阅本文稍后部分的 在工作流中添加代理。
选择“在可视化工具中 保存 ”以保存更改。
重要
不会自动保存工作流。 每次要保存工作流更改时,选择“ 保存 ”。
选择 “运行工作流”。
在聊天窗口中与工作流进行互动。
(可选)将新节点添加到工作流。 本文中的下一部分提供有关节点的信息。
将节点添加到工作流
节点定义工作流的构建基块。 常见节点类型包括:
- 代理:调用代理。
- 逻辑:使用 if/else、 go to 或 for each。
- 数据转换:设置变量或分析值。
- 基本聊天:向代理发送消息或提问。
选择预生成工作流时,生成器中会显示节点的工作流。 每个节点对应于特定的作或组件,并按顺序执行步骤。 可以通过选择节点上的三个点,然后选择 移动来修改节点的顺序。 可以通过在工作区中选择加号图标+来添加新节点。
将代理添加到工作流
可以将项目中的任何 Foundry 代理添加到工作流。 代理节点还允许你创建新代理,并通过配置其模型、提示和工具为其提供自定义功能。
有关代理创建的高级选项和全面的信息,请转到 Foundry 门户中的 Foundry 代理 选项卡。
添加现有代理
在工作流可视化工具中,选择加号。
在弹出下拉列表中,选择 “调用代理”。
在“ 创建新代理 ”窗口中,选择 现有代理。
输入代理名称以在 Foundry 项目中搜索现有代理。
选择要将其添加到工作流中的所需代理。
创建新代理
在工作流可视化工具中,选择加号。
在弹出下拉列表中,选择 “调用代理”。
输入代理名称及其功能描述。
选择 并添加。
在 “调用代理 ”窗口中,配置代理。
选择“保存”。
配置用于调用代理的输出响应格式
创建 Invoke 代理 节点。
在 “调用代理 配置”窗口中,选择“ 创建新代理”。
将代理配置为将输出作为 JSON 架构发送:
- 选择“详细信息”。
- 选择参数图标。
- 对于 文本格式,请选择 JSON 架构。
复制所需的 JSON 架构并将其粘贴到 “添加响应格式 ”窗口中。 以下屏幕截图显示了一个数学示例。 选择“保存”。
{ "name": "math_response", "schema": { "type": "object", "properties": { "steps": { "type": "array", "items": { "type": "object", "properties": { "explanation": { "type": "string" }, "output": { "type": "string" } }, "required": [ "explanation", "output" ], "additionalProperties": false } }, "final_answer": { "type": "string" } }, "additionalProperties": false, "required": [ "steps", "final_answer" ] }, "strict": true }选择 “操作设置”。 然后选择将输出的json_object/json_schema另存为。
选择“ 创建新变量”。 选择变量名称,然后选择“ 完成”。
使用其他功能
YAML 可视化工具视图:将 YAML 可视化工具视图 切换设置为 “开”时,工作流将存储在 YAML 文件中。 可以在可视化工具和 YAML 视图中修改它。 保存会创建新版本,你可以访问版本历史。
可视化工具和 YAML 是可编辑的。 对 YAML 文件所做的任何更改都反映在可视化工具中。
版本控制:每次保存工作流时,都会创建一个新的不变版本。 若要查看版本历史记录或删除旧版本,请打开“保存”按钮左侧的“版本”下拉列表。
工作流可视化工具上的注释:可以在工作流可视化工具上添加备注,以便为工作流添加更多上下文或信息。 在工作流可视化工具的左上角,选择 “添加备注”。
使用 Power Fx 创建表达式
Power Fx 是一种使用类似 Excel 的公式的低代码语言。 使用 Power Fx 创建复杂的逻辑,让你的智能体可以操作数据。 例如,Power Fx 公式可以设置变量的值、解析字符串或在条件中使用表达式。 有关详细信息,请参阅 Power Fx 概述和公式参考。
在公式中使用变量
要在 Power Fx 公式中使用变量,必须向其名称添加前缀以指示变量的范围:
- 对于系统变量,请使用
System. - 对于局部变量,请使用
Local.
下面是系统变量:
| Name | Description |
|---|---|
Activity |
有关当前活动的信息 |
Bot |
有关代理的信息 |
Conversation |
有关当前对话的信息 |
Conversation.Id |
当前对话的唯一 ID |
Conversation.LocalTimeZone |
用户的时区,采用 IANA 时区数据库格式 |
Conversation.LocalTimeZoneOffset |
当前时区相对于 UTC 的时间偏移量 |
Conversation.InTestMode |
表示对话是否在测试画布上进行的布尔标志 |
ConversationId |
当前对话的唯一 ID |
InternalId |
系统的内部标识符 |
LastMessage |
有关用户发送的上一条消息的信息 |
LastMessage.Id |
用户发送的上一条消息的 ID |
LastMessage.Text |
用户发送的上一条消息 |
LastMessageId |
用户发送的上一条消息的 ID |
LastMessageText |
用户发送的上一条消息 |
Recognizer |
有关意向识别和触发消息的信息 |
User |
有关当前与代理通信的用户的信息 |
User.Language |
每次对话的用户语言区域设置 |
UserLanguage |
每次对话的用户语言区域设置 |
在公式中使用文本值
除了可以在 Power Fx 公式中使用变量之外,还可以输入文本值。 要在公式中使用文本值,必须以对应其类型的格式输入文本值。
下表列出了数据类型及其相应文本值的格式:
| 类型 | 格式示例 |
|---|---|
| String |
"hi"、"hello world!"、"copilot" |
| 布尔 | 仅 true 或 false |
| Number |
1、、5325.258、、-9201 |
| 记录和表 |
[1]、[45, 8, 2]、["cats", "dogs"]、{ id: 1 }、{ message: "hello" }、{ name: "John", info: { age: 25, weight: 175 } } |
| 日期和时间 |
Time(5,0,23)、Date(2022,5,24)、DateTimeValue("May 10, 2022 5:00:00 PM") |
| 选择 | 不支持 |
| 空白 | 仅限 Blank() |
常用 Power Fx 公式
下表列出了可用于每种数据类型的 Power Fx 公式。
| 类型 | Power Fx 公式 |
|---|---|
| String | [Text function][1][Concat and Concatenate functions][2][Len function][3][Lower, Upper, and Proper functions][4][IsMatch, Match, and MatchAll functions][5][EndsWith and StartsWith functions][6][Find function][7][Replace and Substitute function][8] |
| 布尔 | [Boolean function][9][And, Or, and Not functions][10][If and Switch functions][11] |
| Number | [Decimal, Float, and Value functions][12][Int, Round, RoundDown, RoundUp, and Trunc functions][13] |
| 记录和表 | [Concat and Concatenate functions][14][Count, CountA, CountIf, and CountRows functions][15][ForAll function][16][First, FirstN, Index, Last, and LastN functions][17][Filter, Search, and LookUp functions][18][JSON function][19][ParseJSON function][20] |
| 日期和时间 | [Date, DateTime, and Time functions][21][DateValue, TimeValue, and DateTimeValue functions][22][Day, Month, Year, Hour, Minute, Second, and Weekday functions][23][Now, Today, IsToday, UTCNow, UTCToday, IsUTCToday functions][24][DateAdd, DateDiff, and TimeZoneOffset functions][25][Text function][26] |
| 空白 | [Blank, Coalesce, IsBlank, and IsEmpty functions][27][Error, IfError, IsError, IsBlankOrError functions][28] |
使用 Power Fx 设置变量
在此示例中,Power Fx 表达式以大写字母存储并输出客户的名称:
创建工作流并添加 “提问” 节点。
在出现的窗格中,在 “提问” 框中,输入 你的姓名是什么? 或其他消息。 在 “将用户响应另存为 ”框中,输入变量名称;例如,
Var01. 然后选择“完成”。添加“发送消息”动作。 在出现的窗格中,在 “要发送的消息 ”区域中,输入
{Upper(Local.Var01)}。 然后选择“完成”。选择预览。
在预览窗格中,向代理发送消息以调用工作流。
使用 Power Fx 创建 if/else 流
在此示例中,Power Fx 表达式以大写字母存储并输出客户的姓名。
创建工作流并添加 “提问” 节点。
选择图标 + 并添加 if/else 流。
为工作流中的下一个所需步骤选择“下一个操作”。
选择“完成”。 选择 “保存” 以保存工作流