具有 AI 生成内容的机器人消息

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

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

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

注意

  • AI 标签、引文、反馈按钮和敏感度标签在一对一聊天和群组聊天 的公共开发人员预览版 中提供,但在频道中不受支持。
  • AI 标签、引文、反馈按钮和敏感度标签仅在 Teams Web 和桌面客户端中可用。
  • 政府 社区云 (GCC) 、GCC High 和国防部 (DOD) 环境中提供了 AI 标签、引文、反馈按钮和敏感度标签。

AI 标签

添加到机器人消息的 AI 标签指定该消息由 AI 生成。 AI 机器人使用通常可靠的大型语言模型 (LLM) ,但是,添加 AI 标签可防止混淆信息源。

屏幕截图显示了机器人消息中的 AI 标签。

添加 AI 标签

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

如果使用 Microsoft Bot Framework SDK 来生成机器人,请在实体对象的数组messageentities包含 additionalType 。 下面是一个示例代码片段:

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 标签和免责声明。

注意

仅当使用 SendActivity发送新消息时,AI 生成的标签才可用。 如果使用 更新消息 UpdateActivity,则会添加 “已编辑” 标签。

错误处理

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

引文

请务必引用机器人消息的来源,以帮助用户提出后续问题或进行独立研究。 引用数据源(如文件、消息、电子邮件和工作项),为用户提供有价值的见解。 引文对于使用检索增强生成 (RAG) 等技术的机器人非常重要。

屏幕截图显示了带有文本引文的 AI 机器人响应。

机器人消息的引文包括文本内引文、引文引用的详细信息以及所引用内容的敏感度标签。

  • 文本内引文 以 [#] 格式表示添加到机器人消息的引文编号,每个引文都对应于引用。 引文可以插入文本中的任何位置。
  • 引文引用的详细信息 包括标题、关键字、摘要、超链接和敏感度信息。 每个文本内引文的引用显示为弹出窗口。
  • 引文的敏感度标签 指示引用的引文内容的机密性,不会自动添加。 若要为引文添加敏感度标签,请参阅 添加敏感度标签

注意

  • 消息中最多显示 10 个引文。
  • 自适应卡片不会在引文弹出窗口中呈现。 但是,自适应卡片可以在机器人的消息中呈现。

添加引文

对于使用 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
        keywords: ["keyword 1", "keyword 2", "keyword 3"], // Appears in the citation pop-up window
        },
      },
    ],
  },
],
})
属性 类型 必需 说明
citation 对象 引文的详细信息。
citation.@type 字符串 引文的对象。 唯一允许的值为 Claim
citation.position 整数 显示引文编号。 这些值限制为小于 8。
citation.appearance 对象 有关引文外观的信息。
citation.appearance.@type 字符串 引文外观的对象。 唯一允许的值为 DigitalDocument
citation.appearance.name 字符串 引用内容的标题。
citation.appearance.url 字符串 引用内容的 URL。
citation.appearance.abstract 字符串 提取引用的内容,限制为少于 1,000 个字符。
citation.appearance.keywords Array 引用内容中的关键字。 不能添加超过三个关键字。

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

错误处理

错误代码 说明
400 在数组下 entities 找到多个根消息实体
400 entities 数组分析消息实体时出错
400 引文超过 10 的机器人消息
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 命令都会feedbackLoopEnabled在 对象中channelData自动设置为 true

若要在使用 Bot Framework SDK 生成的机器人中启用反馈按钮,请在机器人消息中添加 对象 channelData 并将 的值 feedbackLoopEnabled 设置为 true

await context.sendActivity({
  type: ActivityTypes.Message,
  text: `Hey! I'm a friendly AI bot!`,
  channelData: {
    feedbackLoopEnabled: true // Enable feedback buttons
  },
});
属性 类型 必需 说明
feedbackLoopEnabled Boolean 在机器人的消息中启用反馈按钮

处理反馈

机器人通过机器人调用流接收反馈表单中收到的用户输入。

对于使用 Teams AI 库生成的机器人,系统会自动处理收到的机器人调用。 若要处理反馈,请使用 app.feedbackLoop 方法注册在用户提供反馈时调用的反馈循环处理程序。

app.feedbackLoop(async (context, state, 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 响应不为空。

敏感度标签

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

显示 AI 机器人敏感度标签的屏幕截图。

注意

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

添加敏感度标签

对于使用 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 字符串 在机器人消息中启用敏感度标签。
citation.usageInfo.@id 字符串 在引文引用中启用敏感度标签。 向引文引用添加敏感度标签时,需要用到它。
usageInfo.name 字符串 指定敏感度标签的标题。
usageInfo.description 字符串 指定当用户将鼠标悬停在敏感度标签上时显示的弹出窗口消息。

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

错误处理

错误代码 说明
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 C#
Teams 对话自动程序 此示例应用在邮件中显示 AI 标签、引文、反馈按钮和敏感度标签。 View
TeamsAzureOpenAI 此对话机器人使用 Teams AI 库,并在生成的消息中包含 AI 标签、反馈按钮、敏感度标签和引文。 View

另请参阅