Copilot Studio 提供了两种节点类型,可用于非消息的活动:事件活动节点和调用活动节点。 以下各部分将讨论这些节点类型。
活动与活动方案有关。
什么是活动方案?
活动方案是 Copilot Studio 的核心传输概念。 活动协议可在用户和代理之间实现无缝通信模式。 它为所有交互定义了一个标准化的结构,将它们分类为各种活动类型。
事件活动和消息活动是活动协议中的两种不同类型,各自在通信工作流中发挥着独特的作用。
消息活动代表用户与智能体之间的基础通信单元,主要承载文本、媒体或自适应卡片内容。 它们专为直接交互而设计,用户发送查询或语句,机器人会做出相应的响应。
另一方面,事件活动通常用来表示非语言行为或系统生成的更新。 它们允许异步通信,触发特定功能或工作流程,而无需直接用户交互。 例如,事件活动可以通知代理有关用户加入对话或周围上下文更改的信息。
发送事件
事件活动节点用于发送事件活动。 事件活动从代理发送,可以被频道拦截和使用,频道决定是否以及如何使用这些活动。 发送事件时,您会给它提供一个名字,然后可以为此事件设置值。 此值可以采用任何格式:
- 原始文字值
- 变量引用
- 一个 Power Fx 公式。
该值被序列化为 JSON 并添加到传出活动。
此节点的用途包括:
- 您可以配置自定义 Web 聊天控件来处理从代理发送的事件。 例如,您可以查找从代理返回的事件,然后在页面上执行操作。
GitHub 上的 Microsoft Bot Framework Web 聊天示例存储库中的
04.api/c.incoming-activity-event
示例演示了事件处理的工作原理。 - AudioCodes 使用事件活动让您控制服务。 例如,开始或停止通话记录。 更多信息,请参阅记录调用。
使用客户端操作
在协调过程中,我们为语言模型提供了一组操作。 大多数人认为操作就是调用外部系统。
不过,我们也可以使用事件活动从客户端执行操作。
当业务流程协调程序决定执行客户端操作时,代理会向客户端发送 Event 活动,包括操作中定义的输入。
代理发送活动,然后等待客户端执行操作并返回结果。 客户端完成后,它会向代理发送包含回复的事件活动。 智能体将此响应作为动作响应并继续协调。
客户端操作的有效载荷示例
假设我们有一个客户端操作检索 PowerPoint 幻灯片上的文本。
输入是页码,输出是幻灯片上的文本。
代理可以发送有效负载,如下所示:
{
"type": "event",
"timestamp": 1738709828,
"from": {
"id": "d9c0dcf9-4045-8062-535b-73fb4dfee954",
"role": 0
},
"name": "getSlideContent",
"replyToId": "f617c120-7b36-496a-a096-ac692efdad04",
"value": {
"page": 5
}
}
操作完成后,客户端会向智能体发送类似以下的有效载荷:
{
"type": "event",
"timestamp": 1738709828,
"name": "getSlideContent",
"replyToId": "f617c120-7b36-496a-a096-ac692efdad04",
"value": {
"content": "QA slide. Next steps"
}
}
设置客户操作
有两种方法可以注册客户端操作。
作为代理主题内容的一部分,您可以使用代码编辑器在代理上注册专用客户端任务操作。
例如:
description: this tool retrieves the content of a powerpoint slide
schemaName: GetSlideContent
dialog:
kind: TaskDialog
action:
kind: InvokeClientTaskAction
clientActionInputSchema:
kind: Record
properties:
page:
displayName: Page Number
description: The number of the slide
isRequired: true
type: Number
clientActionResponseSchema:
kind: Record
properties:
content:
displayName: Slide Content
description: The content of the slide
type: String
有时,可用的操作是动态的,基于托管客户端的上下文。 为了提高灵活性,制作者可以设置一个系统变量,动态设置可用于此会话的其他客户端工具。
- kind: SetVariable
id: setVariable_76NZWK
variable: System.ClientPluginActions
value: |-
=[
{
Description: "this tool retrieves the content of a powerpoint slide",
Identifier: "GetSlideContent",
Name: "GetSlideContent",
Response: {mode: "Generated"},
Inputs: [
{
Description: "The name of the menu for the form to launch",
IsAutomatic: true,
IsRequired: true,
Name: "Page Number",
PropertyName: "page",
Type: {
'$kind': "Number"
}
}
],
Outputs: [
{
Description: "The content of the slide",
Name: "Slide Content",
PropertyName: "content",
Type: {
'$kind': "String"
}
}
]
}
]
发送其他活动类型
除了事件活动之外,您还可以使用调用活动节点发送其他类型的活动。 您可以发送的活动类型是 Bot Framework 架构 - ActivityTypes 类中提供的活动类型的子集。 使用此节点时,您可以选择活动类型,然后可以选择设置名称或值。
常见类型包括:
- 键入发送一个键入活动,通道可以选择接收该活动并在客户端上显示一个键入指示器。
- 延迟可以设置消息之间的延迟。 例如:发送消息,然后发送延迟活动,最后发送另一条消息。 对于客户,他们会看到第一条消息,然后是暂停,然后是第二条消息。 在这种情况下,该值设置为所需延迟的毫秒数。 更多信息,请参阅 ActivityTypes.Delay Field。
- 调用/调用响应用于 Microsoft Teams。 您创建一个带有调用触发器的主题,拦截来自 Teams 的传入调用,并使用调用响应活动节点将适当的响应发送回 Teams。
- 转接发送一个可明确控制值的转接活动。 转接用于一些外部渠道,例如 AudioCodes。