发送事件或活动

Copilot Studio 提供了一组节点,可用于非消息的活动: 事件活动 节点、 调用活动 节点以及 活动协议 支持的其他与活动相关的节点。

什么是活动方案?

活动协议是 Copilot Studio 中的核心传输概念。 活动协议允许用户和代理之间无缝通信。 它为所有交互定义一个标准化结构,将它们分类为各种活动类型。

事件 活动和 消息 活动是活动协议中的两种不同类型,每个类型在通信工作流中提供唯一用途。

消息活动表示用户和代理之间的基础通信单元,主要承载文本、媒体或自适应卡片内容。 它们专为直接交互而设计,用户在其中发出查询或语句,代理会相应地做出响应。

另一方面,事件活动通常用来表示非语言行为或系统生成的更新。 它们允许异步通信,触发特定功能或工作流程,而无需直接用户交互。 例如,事件活动可以通知智能体有关用户加入对话或周围上下文中更改的信息。

发送事件

事件活动节点旨在发送事件活动。 事件活动从智能体发送,可以被频道拦截和使用,频道决定是否以及如何使用这些活动。 发送事件时,请为其指定一个名称,然后可以为该事件设置值。 此值可以采用任何格式:

  • 原始文字值
  • 变量引用
  • Power Fx 公式。

值将序列化为 JSON 文字,并被添加到传出活动。

此节点的用途包括:

  • 配置自定义网上聊天控件以处理从代理发送的事件。 例如,您可以查找从智能体返回的事件,然后在页面上执行操作。 GitHub 上 Microsoft Bot Framework Web 聊天示例存储库中的 04.api/c.incoming-activity-event 示例演示了事件处理的工作原理。
  • 使用事件活动控制 AudioCodes 录制服务,例如启动或停止呼叫录制。 更多信息,请参阅记录调用

使用客户端工具

在协调过程中,我们为语言模型提供了一组工具。 大多数人认为工具就是调用外部系统。

服务器端工具通过 API 访问。

不过,我们也可以使用事件活动从客户端执行工具。

通过事件活动执行客户端工具。

当业务流程协调程序决定执行客户端工具时,代理会将事件活动发送到客户端,包括工具中定义的输入。

智能体发送活动,然后等待客户端执行操作并返回结果。 客户端完成后,它会向代理发送包含响应的事件活动。 代理将此响应视为工具响应并继续进行协调。

客户端工具的示例负载数据

假设我们有一个客户端工具,用于检索 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 类中提供的活动类型的子集。 使用此节点时,您可以选择活动类型,然后可以选择设置名称或值。

常见类型包括:

  • 键入发送一个键入活动,渠道可以选择接收该活动并在客户端上显示一个键入指示器。
  • 调用调用响应 用于 Microsoft Teams。 您创建一个带有调用触发器的主题,拦截来自 Teams 的传入调用,并使用调用响应活动节点将适当的响应发送回 Teams。
  • 转接发送一个可明确控制值的转接活动。 转接用于外部渠道,如 AudioCodes。