使用变量
重要提示
继在生成式人工智能的重大投资和跨 Microsoft Copilot 的增强集成之后,Power Virtual Agents 功能和特性现已成为 Microsoft Copilot Studio 的一部分。
在我们更新文档和培训内容时,一些文章和截图可能会参考 Power Virtual Agents。
您可以使用变量来保存客户的回答,并在稍后的对话中重复使用他们的内容。
还可以使用变量创建逻辑表达式以沿着不同对话路径动态传递客户。 例如,将客户的姓名保存在名为 UserName
的变量中,助手可以在对话继续时按姓名处理该客户。
变量也可以传递到其他主题和Power Automate 流并从其中返回。
变量可以存在于以下三个级别或范围:
- 主题变量只能在创建变量所在的主题中使用。 此范围是您创建的变量的默认范围。
- 全局 变量可用于所有主题。 您可以更改主题变量的范围以使主题变量成为全局变量。
- 系统变量是使用助手自动创建的。 它们提供有关对话或用户的更多上下文信息。 它们可用于所有主题。
变量类型
变量与基本类型关联。 类型决定了变量可以包含哪些值,以及在使用变量构造逻辑表达式时可以使用的运算符。
类型 | 说明 |
---|---|
String | 用于表示文本的一系列字符 |
布尔型 | 只能为 true 或 false 的逻辑值 |
数字 | 任何实数 |
表 | 值列表,但所有值必须是相同类型 |
记录 | 名称-值对(其中的值可以是任意类型)的集合 |
日期/时间 | 与时间点相关的日期、时间、周中某一天或月份 |
单选 | 具有关联同义词的字符串值的列表 |
空白 | “无值”或“未知值”的占位符;有关详细信息,请参阅 Power Fx 中的空白 |
变量的类型是在首次为变量分配值时设置的。 此后,该变量的类型是固定的,它不能被赋予任何其他类型的值。 例如,给定起始值为 1
的变量会被分配数字类型。 尝试将其分配给字符串值 "apples"
将导致错误。
测试助手时,变量可能会暂时显示为未知类型。 尚未为未知变量分配值。
变量的顺序从创作画布的顶部向底部确定。 即,在底部节点之前先考虑创作画布顶部的节点。 当创建包含条件节点的分支时,分支按从左到右的顺序排序。 即,先考虑最左侧分支中的节点,然后考虑最右侧分支中的节点。
实体
Copilot Studio 使用实体从用户的回复中识别特定类型的信息。 标识的信息保存在适合该信息的类型变量中。 下表列出了与预建实体相关联的变量基类型。
Entity | 变量的基类型 |
---|---|
多选选项 | 单选 |
用户的完整响应 | String |
年限 | 数字 |
布尔型 | 布尔型 |
City | String |
Color | String |
洲 | String |
国家或地区 | String |
日期和时间 | 日期/时间 |
String | |
活动 | String |
整型 | 整型 |
语言 | String |
金钱 | 数字 |
数字 | 数字 |
顺序 | 数字 |
组织 | String |
百分比 | 数字 |
人员姓名 | String |
电话号码 | String |
兴趣点 | String |
速度 | 数 |
州 | String |
街道地址 | String |
温度 | 数字 |
URL | String |
粗细 | 数字 |
邮政编码 | String |
自定义实体 | 单选 |
创建变量
提示您选择变量作为输出的任何节点,例如问题节点,都会自动创建一个合适类型的输出变量。
选取要使用的实体
默认情况下,将创建具有多选选项的问题节点。 若要使用不同的预建实体或自定义实体,请选择标识框,然后选择助手应侦听的信息类型。
重命名变量
创建变量时会自动为变量分配一个名称。 最佳做法是为您的变量提供有意义的名称,以使必须维护您的助手的其他任何人都清楚它们的用途。
选择变量以在变量属性窗格中打开它。
在变量名称下面,请为变量输入新名称。
设置变量
通常您将使用问题节点将用户输入保存到变量中。 不过,在某些情况下,您可能想要自己设置值。 在这种情况下,请使用设置变量值节点。
选择添加节点(+)以添加节点,然后选择变量管理>设置变量值。
选中设置变量下面的方框,然后选择创建新变量。
创建了新变量。 在为其赋值之前,其类型是未知。
对于目标值,使用以下选项之一分配一个值:
- 键入文字值。
- 选择同一类型的现有变量。 此操作会将您的变量设置为与您选择的变量相同的值。
- 使用 Power Fx 公式。 Power Fx 公式对于不能使用文字值的更复杂类型很有用,例如表和记录类型。
使用文字值
您可以将文字值输入到任何变量中,而不是选择变量值。
该节点尝试将文字值解释为字符串、数字或布尔值。 例如,123
将被解释为一个数字。 如果您希望将其解释为字符串值,您可以用双引号括住此值,如下所示:"123"
。
对于某些情况下,或者如果您使用更复杂的类型,请使用 Power Fx 公式来设置特定类型。
变量窗格
变量窗格是您可以查看主题中可用的所有变量的地方,无论它们是在哪些节点中定义或使用的。 对于每个变量,您可以选择它是可以从其他主题接收其值、将其值返回给其他主题,还是两者均可。 您还可以选择一个变量以在变量属性窗格中编辑其属性。
要打开变量窗格,请在主题的菜单栏中选择变量。
变量属性窗格
在变量属性窗格中,您可以重命名变量,查看变量使用位置,或者将变量转换为全局变量。 但是,不能将其从全局变量转换回主题变量。 您还可以选择它是可以接收值,还是可以将其值传递给其他主题。
若要打开变量属性窗格,请在变量窗格中选择变量。 您还可以通过在任何节点中选择一个变量来打开变量属性窗格。
系统变量
每个助手均附带内置系统变量,这些变量可提供有关对话的附加信息。
并非所有系统变量都会显示在列表中。 您必须使用 Power Fx 公式来访问这些隐藏的系统变量。
要在 Power Fx 公式中使用系统变量,则必须在变量名称前面添加 System.
。 例如,要在公式中包含系统变量 User.DisplayName
,您需要将其引用为 System.User.DisplayName
。
客户 | 类型 | 已隐藏 | 定义 |
---|---|---|---|
Activity.Channel | 选项 | 可见 | 当前对话的渠道 ID |
Activity.ChannelData | 任意 | 已隐藏 | 一个包含渠道特定内容的对象 |
Activity.ChannelId | string | 已隐藏 | 字符串形式的当前对话的渠道 ID |
Activity.From.Id | string | 已隐藏 | 发件人的特定于渠道的唯一 ID |
Activity.From.Name | string | 已隐藏 | 发件人的特定于渠道的用户友好名称 |
Activity.Name | string | 可见 | 事件的名称 |
Activity.Text | string | 可见 | 用户发送的最新消息 |
Activity.Type | 选项 | 可见 | 活动的类型 |
Activity.TypeId | string | 已隐藏 | 字符串形式的活动类型 |
Activity.Value | 任意 | 已隐藏 | 开放式值 |
Bot.Name | string | 可见 | 您助手的名称 |
Channel.DisplayName | string | 已隐藏 | 渠道名称显示 |
Conversation.Id | string | 可见 | 当前对话的唯一 ID |
LastActivity.Id | string | 可见 | 先前发送的活动的 ID |
LastMessage.Id | string | 可见 | 用户发送的上一条消息的 ID |
LastMessage.Text | string | 可见 | 用户发送的上一条消息 |
Recognizer.TriggerMessage.Id | string | 可见 | 触发当前主题的用户消息的 ID |
Recognizer.TriggerMessage.Text | string | 可见 | 触发当前主题的用户消息 |
User.DisplayName | string | 可见 | 登录用户的显示名称 |
在主题之间传递变量
当您将一个主题重新定向到另一个主题时,可以在原始主题与目标主题之间传递变量值。 当前面的主题已经收集了后面的主题需要的信息时,在主题之间传递变量特别有用。 您的用户会很高兴不必再次回答相同的问题。
接收其他主题中的值
当主题定义变量时(例如,在“问题”节点中),助手会询问用户问题来填写变量值。 如果助手在前面的主题中已获取值,则没有理由再次提问。 在这些情况下,您可以将变量设置为接收其他主题中的值。 当另一个主题重定向到此主题时,它可以将任一变量值(或文字值)传递给此变量,并会跳过问题。 用户与助手的交谈体验可以达到无缝状态。
在此示例中,我们将使用“问候语”和“与客户交谈”这两个主题。 这两个主题都询问客户的名称。 但是,如果“问候语”主题先运行,“与客户交谈”主题会跳过它的问题。 相反,它使用从“问候语”主题传递的变量的值。
下面是“与客户交谈”主题的流:
如“测试助手”窗格中所示,如果首先触发此主题,则它会询问用户“我应该怎么称呼你?”它会将值存储在名为 userName
的字符串变量中。 userName
变量也可以设置为从其他主题获取其值。 该主题以消息“我希望你今天过得愉快,{userName}!”结束
下面是“问候语”主题的流:
如“测试助手”窗格中所示,如果首先触发此主题,则它会询问用户“你叫什么名字?”它会将值存储在名为 UserName
的字符串变量中。 此主题发送消息“很高兴认识你,{UserName}!”,然后它重定向到“与客户交谈”主题,该主题发送消息“我希望你今天过得愉快,{userName}!”但是请注意,“与客户交谈”主题跳过了再次询问用户姓名这一步骤。 相反,它使用从“问候语”主题传递的 UserName
变量的值。
最后,再次进行第二次对话,这次是从“与客户交谈”主题的角度出发:
我们来演练一下设置主题以从其他主题接收值的步骤。 我们将使用当前的示例,但只要主题需要从较早的主题中获取值,相同的步骤就会起作用。
设置目标主题
目标主题是被重定向到的主题,该主题将从其他主题接收值。 在我们的示例中,它是“与客户交谈”。
创建或转到目标主题。
添加问题节点并输入消息
What should I call you?
。在识别下面,选择预生成的实体人员姓名。
选择变量以打开变量属性窗格。 将其命名为
userName
,然后选择接收其他主题中的值。在消息框中,键入
I hope you're having a wonderful day,
。选择插入变量图标 ({x}),然后选择 userName。
选择变量后面的空格并键入
!
。保存主题。
设置源主题
源主题是进行重定向的主题,它提供将传递给目标主题的值。 在本示例中,此主题为“问候语”。
转到源主题。
添加重定向节点并选择目标主题。
选择 + 添加输入,然后从要向其传递值的目标主题中选择变量。
选择 > 图标,然后选择要传递其值的变量。
“重定向”节点应如下所示:
保存主题。
将值返回到原始主题
当一个主题通过提问或其他方式被重定向到并获取一个变量时,该变量可以返回到原始主题。 此变量会成为原始主题的一部分,可以像任何其他变量一样使用。 因此,助手获取的信息可跨主题提供,从而减少对全局变量的需要。
我们继续上一节中的示例。 我们将在“与客户交谈”主题中提出一个新问题,然后将答案返回到“问候语”主题。
为返回的变量设置源主题
当您将变量返回到主题时,源主题是被重定向到的主题,即提供将传递回原始主题的值的主题。 在此示例中,它是“与客户交谈”。
转到源主题。
添加问题节点并输入消息
What city do you live in?
。在识别下面,选择预生成的实体城市。
选择变量以打开变量属性窗格。 将其命名为
userCity
,然后选择将值返回到原始主题。保存主题。
为返回的变量设置目标主题
当您将变量返回给主题时,目标主题是进行重定向的主题,即将从其他主题接收值的主题。 在本示例中,此主题为“问候语”。
转到目标主题。
您在源主题中选择的变量应该作为输出变量出现在“重定向”节点中。
保存主题。
相关内容
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈