增强 AI 生成的机器人消息
机器人消息中的 AI 标签、引文、反馈按钮和敏感度标签可提高用户参与度并提高透明度和信任度。
- AI 标签 使用户能够识别消息是使用 AI 生成的。
- 引文 使用户能够通过文本内引文和引用来引用机器人消息的源。
- “反馈”按钮 使用户能够向机器人消息提供正面或负面反馈。
- 敏感度标签 使用户能够了解机器人消息的机密性。
以下屏幕截图显示了如何使用 AI 标签、引文、反馈按钮和敏感度标签来增强机器人消息:
注意
- 个人聊天、群组聊天和频道中的机器人可以使用 AI 标签、引文、反馈按钮和敏感度标签。
- 政府 社区云 (GCC) 、GCC High 和国防部 (DoD) 环境中提供了 AI 标签、引文、反馈按钮和敏感度标签。
AI 标签
机器人消息上的 AI 标签指示它由 AI 生成。 虽然使用大型语言模型 (LLM) 的 AI 支持机器人通常很可靠,但标签有助于防止有关信息源的混淆。
添加 AI 标签
如果使用 Teams AI 库来生成机器人,则会自动为操作中PredictedSayCommand
模块中的所有 ai
AI 支持机器人消息启用 AI 标签。 有关详细信息,请参阅 AIEntity 接口。
如果使用 Microsoft Bot Framework SDK 来生成机器人,请在实体对象的数组message
下entities
包含 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) 等技术的机器人至关重要。
机器人消息中的引文可以包括以下内容:
- 文本内引文 以 [#] 格式表示添加到机器人消息的引文编号,每个引文都对应于引用。 引文可以插入文本中的任何位置。
- 引文参考的详细信息 包括标题、图标、关键字、摘要、超链接、敏感度信息,以及用于打开包含其他内容的模式窗口的按钮。 每个文本内引文的引用显示为弹出窗口。
- 引文的敏感度标签 指示引用的引文内容的机密性,不会自动添加。 若要为引文添加敏感度标签,请参阅 添加敏感度标签。
- 包含其他内容的模式窗口 呈现自适应卡片,没有任何交互式项。
注意
- 消息中最多显示 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 OneNote Microsoft SharePoint Microsoft Visio Microsoft Loop Microsoft PowerPoint Adobe Photoshop Adobe Illustrator Source Code Sketch Microsoft Whiteboard 、Adobe InDesign Video GIF Image Adobe Flash 、Sound 、、 Text ZIP Microsoft Word PDF |
启用引文后,机器人消息将包括文本内引文和引用。 当用户将鼠标悬停在引文上时,文本内引文会显示引用详细信息。
错误处理
错误代码 | 说明 |
---|---|
400 | 在数组下 entities 找到多个根消息实体。 |
400 | 从 entities 数组分析消息实体时出错。 |
400 | 引文超过 20 的机器人消息。 |
400 | 对象 appearance 为空。 |
400 | 分析 ID 为 X 的引文实体时出错。 |
反馈按钮
机器人消息中的反馈按钮对于跟踪用户参与、识别错误和深入了解机器人性能至关重要。 借助这些见解,可以有针对性的增强机器人的对话功能。 启用反馈按钮以允许用户喜欢或不喜欢邮件并提供详细的反馈。
当用户选择反馈按钮时,将基于用户的选择显示反馈表单。 可以使用默认反馈表单,也可以自定义它以满足应用的需求。
注意
可自定义的反馈表单在 公共开发人员预览版中提供。
反馈按钮位于机器人消息的页脚,包括 👍 用户选择的 () 和 👎 (竖起大拇指) 按钮。
添加反馈按钮
对于使用 Teams AI 库生成的机器人,当模块中ai
设置为 true
时enable_feedback_loop
,Teams 为所有机器人消息启用反馈按钮。
export const app = new Application<ApplicationTurnState>({
ai: {
planner: planner,
enable_feedback_loop: true
},
有关详细信息,请参阅 const app 变量。
启用反馈按钮后,来自机器人的所有SAY
命令都会在 对象中channelData
自动设置为 true
。feedbackLoopEnabled
若要在使用 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 | ✔️ | 定义用户选择反馈按钮时显示的反馈表单的类型。 允许的值: custom 、 default |
如果设置为 feedbackLoop.type
default
,则当用户选择反馈按钮时,将显示默认反馈表单。 如果要显示自定义反馈表单,请将 设置为 feedbackLoop.type
custom
。 以下调用请求将发送到机器人,以检索要向用户显示的自定义表单:
{
"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 ,但其 name 和 description 属性不同。 |
修改 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 |