增强 AI 生成的机器人消息

机器人消息中的 AI 标签、引文、反馈按钮和敏感度标签可提高用户参与度并提高透明度和信任度。

  • AI 标签 使用户能够识别消息是使用 AI 生成的。
  • 引文 使用户能够通过文本内引文和引用来引用机器人消息的源。
  • “反馈”按钮 使用户能够向机器人消息提供正面或负面反馈。
  • 敏感度标签 使用户能够了解机器人消息的机密性。

以下屏幕截图显示了如何使用 AI 标签、引文、反馈按钮和敏感度标签来增强机器人消息:

Before

屏幕截图显示没有 AI 标签、引文、反馈按钮和敏感度标签的机器人消息。

After

屏幕截图显示了 Teams 桌面客户端中带有 AI 标签、引文、反馈按钮和敏感度标签的机器人消息。

注意

  • 个人聊天、群组聊天和频道中的机器人可以使用 AI 标签、引文、反馈按钮和敏感度标签。
  • 政府 社区云 (GCC) 、GCC High 和国防部 (DoD) 环境中提供了 AI 标签、引文、反馈按钮和敏感度标签。

AI 标签

机器人消息上的 AI 标签指示它由 AI 生成。 虽然使用大型语言模型 (LLM) 的 AI 支持机器人通常很可靠,但标签有助于防止有关信息源的混淆。

添加 AI 标签

如果使用 Teams AI 库来生成机器人,则会自动为操作中PredictedSayCommand模块中的所有 ai AI 支持机器人消息启用 AI 标签。 有关详细信息,请参阅 AIEntity 接口

如果使用 Microsoft Bot Framework SDK 来生成机器人,请在实体对象的数组messageentities包含 additionalType 。 以下代码片段演示如何在机器人消息中启用 AI 标签:

await context.sendActivity({
  type: ActivityTypes.Message,
  text: `Hey! I'm a friendly AI bot. This message is generated by AI.`,
  entities: [
    {
     type: "https://schema.org/Message",
     "@type": "Message",
     "@context": "https://schema.org",
     additionalType: ["AIGeneratedContent"], // Enables AI label
    }
  ]
});
属性 类型 必需 说明
additionalType Array 在机器人消息中启用 AI 标签。
允许的值: AIGeneratedContent

添加 AI 标签后,机器人的消息会在机器人名称旁边显示 AI 生成的 标签。 将鼠标悬停在 AI 标签上时,会显示免责声明,指出 AI 生成的内容可能不正确。 无法为 AI 支持的机器人自定义 AI 标签和免责声明。

错误处理

错误代码 说明
400 在数组下 entities 找到多个根消息实体。
400 entities 数组分析消息实体时出错。

引文

在机器人消息中引用来源可帮助用户提出后续问题或进行独立研究。 引用文件、消息、电子邮件和工作项等数据源,以提供有价值的见解。 引文对于使用 Retrieval-Augmented Generation (RAG) 等技术的机器人至关重要。

引文

屏幕截图显示了由 AI 支持的机器人响应,其中包含 Teams 桌面客户端中的引文。

模式窗口

屏幕截图显示 Teams 桌面客户端中 AI 支持的机器人消息中引文的模式窗口弹出窗口。

机器人消息中的引文可以包括以下内容:

  • 文本内引文 以 [#] 格式表示添加到机器人消息的引文编号,每个引文都对应于引用。 引文可以插入文本中的任何位置。
  • 引文参考的详细信息 包括标题、图标、关键字、摘要、超链接、敏感度信息,以及用于打开包含其他内容的模式窗口的按钮。 每个文本内引文的引用显示为弹出窗口。
  • 引文的敏感度标签 指示引用的引文内容的机密性,不会自动添加。 若要为引文添加敏感度标签,请参阅 添加敏感度标签
  • 包含其他内容的模式窗口 呈现自适应卡片,没有任何交互式项。

注意

  • 消息中最多显示 20 个引文。
  • 公共开发人员预览版中提供了具有自适应卡片的引文。
  • 自适应卡片不会在引文弹出窗口中呈现。 但是,自适应卡片可以呈现在机器人的消息中,也可以在从弹出窗口访问的引文模式窗口中呈现。

添加引文

如果使用 Teams AI 库 构建机器人,则引 PredictedSayCommand 文将通过操作自动添加到 AI 支持的机器人消息中。 还可以修改操作以 PredictedSayCommand 向机器人消息添加引文。 有关详细信息,请参阅 ClientCitation 接口

如果使用 Bot Framework SDK 来生成机器人,请在 数组下entities包含 citation 。 下面是一个示例代码片段:

await context.sendActivity({
  type: ActivityTypes.Message,
  text: `Hey I'm a friendly AI bot. This message is generated through AI [1]`, // cite with [1],
  entities: [
  {
    type: "https://schema.org/Message",
    "@type": "Message",
    "@context": "https://schema.org",
    citation: [
    {
      "@type": "Claim",
      position: 1, // Required. Must match the [1] in the text above
      appearance: {
        "@type": "DigitalDocument",
        name: "AI bot", // Title
        url: "https://example.com/claim-1", // Hyperlink on the title
        abstract: "Excerpt description", // Appears in the citation pop-up window
        text: "{\"type\":\"AdaptiveCard\",\"$schema\":\"http://adaptivecards.io/schemas/adaptive-card.json\",\"version\":\"1.6\",\"body\":[{\"type\":\"TextBlock\",\"text\":\"Adaptive Card text\"}]}", // Appears as a stringified Adaptive Card
        keywords: ["keyword 1", "keyword 2", "keyword 3"], // Appears in the citation pop-up window
        encodingFormat: "application/vnd.microsoft.card.adaptive",
        image: {
          "@type": "ImageObject",
          name: "Microsoft Word"
        },
       },
      },
    ],
  },
],
})
属性 类型 必需 说明
citation Object ✔️ 引文的详细信息。
citation.@type String ✔️ 引文的对象。
允许的值: Claim
citation.position 整数 ✔️ 显示引文编号。
citation.appearance Object ✔️ 有关引文外观的信息。
citation.appearance.@type String ✔️ 引文外观的对象。
允许的值: DigitalDocument
citation.appearance.name String ✔️ 引用内容的标题。 最大字符数:80
citation.appearance.url String 引用内容的 URL。
citation.appearance.abstract String 引用内容的摘要。 最大字符数:160
citation.appearance.text String 一个字符串化的自适应卡片,其中包含有关引文的其他信息。 它在可从弹出窗口访问的模式窗口中呈现。
citation.appearance.keywords Array 引用内容中的关键字。 不能添加超过三个关键字。 每个关键字 (keyword) 只能包含 28 个字符。
citation.appearance.encodingFormat String 字段的 citation.appearance.text 编码格式。
允许的值: application/vnd.microsoft.card.adaptive
citation.appearance.image Object 有关引文图标的信息。
citation.appearance.image.@type String ✔️ 引文图标的对象。 必须是 ImageObject
citation.appearance.image.name String ✔️ 预定义图标的名称。 它会在引文引用的详细信息中呈现引文图标。
允许的值:、、Microsoft Excel、、Microsoft OneNoteMicrosoft SharePointMicrosoft VisioMicrosoft LoopMicrosoft PowerPointAdobe PhotoshopAdobe IllustratorSource CodeSketchMicrosoft WhiteboardAdobe InDesignVideoGIFImageAdobe FlashSound、、 TextZIPMicrosoft WordPDF

启用引文后,机器人消息将包括文本内引文和引用。 当用户将鼠标悬停在引文上时,文本内引文会显示引用详细信息。

错误处理

错误代码 说明
400 在数组下 entities 找到多个根消息实体。
400 entities 数组分析消息实体时出错。
400 引文超过 20 的机器人消息。
400 对象 appearance 为空。
400 分析 ID 为 X 的引文实体时出错。

反馈按钮

机器人消息中的反馈按钮对于跟踪用户参与、识别错误和深入了解机器人性能至关重要。 借助这些见解,可以有针对性的增强机器人的对话功能。 启用反馈按钮以允许用户喜欢或不喜欢邮件并提供详细的反馈。

当用户选择反馈按钮时,将基于用户的选择显示反馈表单。 可以使用默认反馈表单,也可以自定义它以满足应用的需求。

注意

可自定义的反馈表单在 公共开发人员预览版中提供。

反馈按钮位于机器人消息的页脚,包括 👍 用户选择的 () 和 👎 (竖起大拇指) 按钮。

添加反馈按钮

对于使用 Teams AI 库生成的机器人,当模块中ai设置为 trueenable_feedback_loop,Teams 为所有机器人消息启用反馈按钮。

export const app = new Application<ApplicationTurnState>({
    ai: {
        planner: planner,
        enable_feedback_loop: true
    },

有关详细信息,请参阅 const app 变量

启用反馈按钮后,来自机器人的所有SAY命令都会在 对象中channelData自动设置为 truefeedbackLoopEnabled

若要在使用 Bot Framework SDK 生成的机器人中启用反馈按钮,请在机器人消息的 对象下channelData定义一个 feedbackLoop 对象。

await context.sendActivity({
  type: ActivityTypes.Message,
  text: `Hey! I'm a friendly AI bot!`,
  channelData: {
    feedbackLoop: { // Enable feedback buttons
        type: "custom"
  },
});
属性 类型 必需 说明
feedbackLoop Object ✔️ 在机器人的消息中启用反馈按钮。
feedbackLoop.type String ✔️ 定义用户选择反馈按钮时显示的反馈表单的类型。
允许的值: customdefault

如果设置为 feedbackLoop.typedefault,则当用户选择反馈按钮时,将显示默认反馈表单。 如果要显示自定义反馈表单,请将 设置为 feedbackLoop.typecustom。 以下调用请求将发送到机器人,以检索要向用户显示的自定义表单:

{
    "type": "invoke",
    "name": "message/fetchTask",
    "value": {
        "actionName": "feedback",
        "actionValue": {
            "reaction": "like" // like or dislike
        }
    }
}

必须使用对话 (TeamsJS v1.x) 中称为任务模块的对话框来响应此调用,就像响应调用一 task/fetch 样。 有关在机器人中调用对话的详细信息,请参阅 将对话与机器人配合使用

处理反馈

机器人通过机器人调用流从反馈表单接收用户输入。 对于使用 Teams AI 库生成的机器人,将自动处理机器人调用请求。 若要处理反馈,请使用 app.feedbackLoop 方法注册在用户提供反馈时调用的反馈循环处理程序。

app.feedbackLoop(async (_context: TurnContext, _state: TurnState, feedbackLoopData: FeedbackLoopData) => {
  // custom logic here...
});

有关详细信息,请参阅 异步回调函数

对于使用 Bot Framework SDK 生成的机器人,必须具有 onInvokeActivity 处理程序来处理反馈。 确保返回状态代码 200 ,其中包含空的 JSON 对象作为响应。

以下代码片段演示如何处理在机器人调用中收到的反馈,并使用状态代码 200返回响应:

public async onInvokeActivity(context: TurnContext): Promise<InvokeResponse> {
    try {
      switch (context.activity.name) {
        case "message/submitAction":
           console.log('Your feedback is ' + JSON.stringify(context.activity.value))
           // Your feedback is {"actionName":"feedback","actionValue":{"reaction":"like","feedback":"{\"feedbackText\":\"This is my feedback.\"}"}}
           return CreateInvokeResponse(200, {});
        default:
          return {
            status: 200,
            body: `Unknown invoke activity handled as default- ${context.activity.name}`,
          };
      }
    } catch (err) {
      console.log(`Error in onInvokeActivity: ${err}`);
      return {
        status: 500,
        body: `Invoke activity received- ${context.activity.name}`,
      };
    }
  }

 export const CreateInvokeResponse = (
  status: number,
  body?: unknown
 ): InvokeResponse => {
    return { status, body };
 };

通过保存机器人发送和接收的消息的消息 ID 和内容来存储反馈。 当机器人收到包含反馈的调用请求时,请将消息 ID 与相应的反馈相匹配。

注意

Teams 不会存储或处理反馈。 它不提供 API 或存储机制。

如果用户卸载机器人,但仍有权访问机器人聊天,Teams 会从机器人消息中删除反馈按钮,以防止用户向机器人提供反馈。

错误处理

错误代码 说明
400 message/submitAction invoke 响应不为空。

敏感度标签

机器人响应可能包含机密信息,或者只能由组织中的某些人员访问。 添加敏感度标签以帮助用户识别邮件的机密性,使他们能够在共享邮件时保持谨慎。

注意

仅当机器人的消息包含敏感信息时,才向这些消息添加敏感度标签。

添加敏感度标签

对于使用 Teams AI 库生成的机器人,可以通过操作添加 PredictedSayCommand 敏感度标签。 有关详细信息,请参阅 SensitivityUsageInfo 接口

对于使用 Bot Framework SDK 生成的机器人,请通过修改要包含在 usageInfo 对象中的 entities 消息来向机器人消息添加敏感度标签。

以下代码片段演示如何向机器人消息和引文引用添加敏感度标签:

await context.sendActivity({
  type: ActivityTypes.Message,
  text: `Hey, I'm a friendly AI bot. This message is generated through AI [1]`,
  entities: [
    {
      type: "https://schema.org/Message",
      "@type": "Message",
      "@context": "https://schema.org",
      usageInfo: {
        "@type": "CreativeWork",
        name: "Sensitivity title",
        description: "Sensitivity description",
      },
    },
  ],
});
属性 类型 必需 说明
usageInfo.@type String ✔️ 在机器人消息中启用敏感度标签。
citation.usageInfo.@id String ✔️ 在引文引用中启用敏感度标签。 向引文引用添加敏感度标签时,需要用到它。
usageInfo.name String ✔️ 指定敏感度标签的标题。
usageInfo.description String 指定当用户将鼠标悬停在敏感度标签上时显示的弹出窗口消息。

添加敏感度标签后,机器人消息将显示屏蔽图标。 用户可以将鼠标悬停在图标上以查看有关邮件敏感度的免责声明。

错误处理

错误代码 说明
400 在数组下 entities 找到多个根消息实体。
400 entities 数组分析消息实体时出错。
400 引文级别 usageInfo.@id 值与至少一个实例中的消息级别 usageInfo.@id 不匹配。
400 有多个引文级 usageInfo 属性具有相同 @id,但其 namedescription 属性不同。

修改 PredictedSayCommand

对于使用 Teams AI 库生成的机器人, PredictedSayCommand 提供有关如何将 AI 标签、引文、反馈按钮和敏感度标签添加到机器人活动的控制。 下面是要修改 PredictedSayCommand的代码片段:

app.ai.action<PredictedSayCommand>(AI.SayCommandActionName, async (context, state, data, action) => {
  // custom logic here...
  await context.sendActivity(data.content);
  return "";
});

有关 的详细信息 PredictedSayCommand,请参阅 PredictedSayCommand 接口

代码示例

示例名称 Description Node.js .NET
Teams 对话自动程序 此示例应用在消息中显示 AI 标签、引文、反馈按钮和敏感度标签。 View 不适用
数据上的 Azure OpenAI 此对话机器人使用 Teams AI 库,并在生成的消息中包含 AI 标签、反馈按钮、敏感度标签和引文。 不适用 View

另请参阅