自适应卡片使您能够将内容片段添加到 Copilot Studio 智能体中,这些智能体也可以与其他云应用和服务公开交换。 若要为代理提供丰富的对话功能,可以包括文本、图形和按钮。 因为自适应卡片与平台无关,所以您可以轻松地根据自己的需要定制自适应卡片。
自适应卡片节点允许您的代理发送包含一个或多个提交按钮以及可选的一个或多个表单输入字段的自适应卡片。 代理将用户输入存储在变量中,以供以后在对话中使用。
备注
Copilot Studio 支持 1.6 及更早版本的自适应卡片模式。 但是,相应的架构版本取决于目标主机应用:
- Bot Framework Web Chat 组件(即默认网站集成模式)支持 1.6 版,但不支持
Action.Execute - 实时聊天小组件(用于 Dynamics 365 Customer Service 全渠道) 仅限于版本 1.5
- Teams 也仅限于版本 1.5
此外,Copilot Studio 只能在测试聊天中呈现版本 1.6 的卡片,而不能在画布上呈现。
有关自适应卡片模式的更多信息,请参阅模式资源管理器。
Copilot Studio 包含一个内置的自适应卡片设计器,可提供自适应卡设计器中最有用的功能。
您也可以:
- 对要向用户显示的卡片使用 JSON 表示形式。
- 使用 Power Fx 公式在卡片上包含动态信息。
您还可以控制卡片的行为,例如当用户输入无效响应时该如何操作,或者节点是否可以被中断。
自适应卡片节点适用于交互式卡片,在这种卡片中,用户需要提交回复。 消息和问题节点可用于向用户呈现非交互式卡片,来向用户显示信息。
提示
重命名节点,使其更容易识别。 选择节点的名称字段以直接更新名称,或者选择节点的更多图标 (…),然后从菜单中选择重命名。 您也可以在代码编辑器中重命名节点。
无法重命名触发器节点和转到步骤节点。
节点名称最长可达 500 个字符。
添加自适应卡片节点
选择要添加自适应卡片节点的节点下方的添加节点图标
,然后选择使用自适应卡提问。选择节点的“更多”图标 (…),然后选择属性。
在自适应卡片节点属性面板中,选择编辑自适应卡片。 “自适应卡片设计器”面板随即打开。
为您的卡添加所需的元素并配置其属性。 或者,在卡片有效载荷编辑器窗格中,用卡片的 JSON 字面替换默认有效载荷。
提示
您的卡片必须至少包含一个提交按钮,因为它必须是允许用户将信息提交回代理的交互式卡片。 如果没有,而只是为了显示信息,则应将自适应卡片添加到消息节点。
完成初始设计后,选择保存并关闭设计器面板。 卡片的预览将显示在节点上。 Copilot Studio 会根据代码中指定的输入自动创建输出变量。
提示
如果为卡片生成的输出变量不正确,您可以在自适应卡片节点属性面板中选择编辑模式,手动更新变量列表及其类型。
您的交互式自适应卡片现在已准备就绪。 当代理的用户选择卡片上的提交按钮时,输出变量将填充用户在与卡片交互时提供的信息。
其他属性
其他属性允许您控制自适应卡片节点的行为,例如:
- 代理如何响应无效的回复
- 是否被中断
如果代理正在等待自适应卡片的提交,而用户却发送了一条文本信息,则该回复将被视为无效,除非该信息触发了中断。 在这种情况下,以下属性将确定行为。
重复提示次数:您的代理尝试从卡片获取有效提交的次数。 默认为重复最多 2 次。 您还可以选择重复一次或不重复。 每次重试时,都会将卡片重新发送给用户。
重试提示:使用此属性可以定义重试时要发送的消息以及卡的重复情况。 要定义重试消息,选择自定义,然后输入新提示。
允许切换到其他主题:如果选中(默认),当代理正在等待卡片提交时,用户发来的消息会触发中断并切换到另一个主题。 如果发生主题切换,则会在中断主题结束后再次向用户发送卡片。
具有连续卡片的智能体的提交按钮行为
根据设计,自适应卡片允许多次选择其提交按钮。 如果代理具有连续的自适应卡片(Adaptive Cards),并且用户选择前面卡片上的按钮,则用户可能会出现意外行为。
若要防止一张卡上的提交动作干扰另一张卡:
隔离提交操作:确保每张自适应卡片拥有独立的标识符和操作处理程序。
使用包含唯一数据的提交操作:定义卡片提交操作时,请添加唯一标识符或数据负载,以便用户点击提交按钮时能区分不同卡片。
将可靠的事件处理逻辑添加到代理:根据与提交按钮关联的独特标识符或有效负载元素定义条件。
调试与日志记录:在智能体的活动处理代码中添加详细日志,以捕获操作序列并定位意外提交的发生点。
使用 Power Fx 实现卡片动态化
您可以通过引用主题或代理中的变量,使用 Power Fx 公式在卡片上包含动态信息。
选择节点的“更多”图标 (…),然后选择属性。
在自适应卡片节点属性面板中,切换到公式,选择公式会自动将卡片的 JSON 表示转换为 Power Fx 公式。
例如,从卡片的以下 JSON 文本开始:
{ "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "type": "AdaptiveCard", "version": "1.5", "body": [{ "type": "ColumnSet", "columns": [{ "type": "Column", "width": 2, "items": [{ "type": "TextBlock", "text": "Tell us about yourself", "weight": "Bolder", "size": "Medium", "wrap": true, "style": "heading" }, { "type": "TextBlock", "text": "We just need a few more details to get you booked for the trip of a lifetime!", "isSubtle": true, "wrap": true }, { "type": "Input.Text", "id": "myName", "label": "Your name (Last, First)", "isRequired": true, "regex": "^[A-Z][a-z]+, [A-Z][a-z]+$", "errorMessage": "Please enter your name in the specified format" } ] } ] } ], "actions": [{ "type": "Action.Submit", "title": "Submit" } ] }下面是生成的 Power Fx 公式,使用了两个变量 Topic.Title 和 Topic.Subtitle 代替 JSON 字面中的硬编码文本。 (本示例假设变量已在主题中定义)。
{ '$schema': "http://adaptivecards.io/schemas/adaptive-card.json", type: "AdaptiveCard", version: "1.5", body: [ { type: "ColumnSet", columns: [ { type: "Column", width: "2", items: [ { type: "TextBlock", text: Topic.Title, weight: "Bolder", size: "Medium", wrap: true, style: "heading" }, { type: "TextBlock", text: Topic.Subtitle, isSubtle: true, wrap: true }, { type: "Input.Text", id: "myName", label: "Your name (Last, First)", isRequired: true, regex: "^[A-Z][a-z]+, [A-Z][a-z]+$", errorMessage: "Please enter your name in the specified format" } ] } ] } ], actions: [ { type: "Action.Submit", title: "Submit" } ] }
重要提示
一旦开始在公式面板中进行编辑,就无法返回到原始 JSON 代码。 为便于迭代设计和更改,我们建议将原始 JSON 代码的副本保存在自己的备注中,或作为节点中的注释。 此预防措施允许您在需要时还原更改。