重要
- Teams AI 库现已重命名为 Teams SDK。
- Teams AI 库 v1 已弃用。 建议升级代理以使用更新的 Teams SDK。
Teams SDK 现已正式发布,适用于 JavaScript 和 C#,支持开发人员预览版中的 Python。 它提供简化的 SDK、对模型上下文协议的支持 (MCP) 、代理到代理通信 (A2A) ,以及简化工具,使开发人员能够构建适用于 Teams 的智能代理。
机器人消息中的 AI 标签、引文、反馈按钮和敏感度标签可提高用户参与度并提高透明度和信任度。
- AI 标签 使用户能够识别消息是使用 AI 生成的。
- 引文 使用户能够通过文本内引文和引用来引用机器人消息的源。
- “反馈”按钮 使用户能够向机器人消息提供正面或负面反馈。
- 敏感度标签 使用户能够了解机器人消息的机密性。
以下屏幕截图显示了如何使用 AI 标签、引文、反馈按钮和敏感度标签来增强机器人消息:
注意
- 个人聊天、群组聊天和频道中的机器人可以使用 AI 标签、引文、反馈按钮和敏感度标签。
- 政府 社区云 (GCC) 、GCC High 和国防部 (DoD) 环境中提供了 AI 标签、引文、反馈按钮和敏感度标签。
AI 标签
机器人消息上的 AI 标签指示它由 AI 生成。 虽然使用大型语言模型 (LLM) 的 AI 支持机器人通常很可靠,但标签有助于防止有关信息源的混淆。
添加 AI 标签
如果使用 Teams SDK 生成机器人,则会自动为作中的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 SDK 构建机器人,则引 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 Whiteboard、Adobe InDesignVideoGIFImageAdobe Flash、Sound、、 TextZIPMicrosoft WordPDF |
启用引文后,机器人消息将包括文本内引文和引用。 当用户将鼠标悬停在引文上时,文本内引文会显示引用详细信息。
错误处理
| 错误代码 | 说明 |
|---|---|
| 400 | 在数组下 entities 找到多个根消息实体。 |
| 400 | 从 entities 数组分析消息实体时出错。 |
| 400 | 引文超过 20 的机器人消息。 |
| 400 | 对象 appearance 为空。 |
| 400 | 分析 ID 为 X 的引文实体时出错。 |
反馈按钮
机器人消息中的反馈按钮对于跟踪用户参与、识别错误和深入了解机器人性能至关重要。 借助这些见解,可以有针对性的增强机器人的对话功能。 启用反馈按钮以允许用户喜欢或不喜欢邮件并提供详细的反馈。
当用户选择反馈按钮时,将基于用户的选择显示反馈表单。 可以使用默认反馈表单,也可以自定义它以满足应用的需求。
注意
可自定义的反馈表单在 公共开发人员预览版中提供。
反馈按钮位于机器人消息的页脚,包括 👍 用户选择的 () 和 👎 (竖起大拇指) 按钮。
添加反馈按钮
对于使用 Teams SDK 生成的机器人,当模块中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.typedefault,则当用户选择反馈按钮时,将显示默认反馈表单。 如果要显示自定义反馈表单,请将 设置为 feedbackLoop.typecustom。 以下调用请求将发送到机器人,以检索要向用户显示的自定义表单:
{
"type": "invoke",
"name": "message/fetchTask",
"value": {
"actionName": "feedback",
"actionValue": {
"reaction": "like" // like or dislike
}
}
}
必须使用对话 (TeamsJS v1.x) 中称为任务模块的对话框来响应此调用,就像响应调用一 task/fetch 样。 有关在机器人中调用对话的详细信息,请参阅 将对话与机器人配合使用。
处理反馈
机器人通过机器人调用流从反馈表单接收用户输入。 对于使用 Teams SDK 生成的机器人,将自动处理机器人调用请求。 若要处理反馈,请使用 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 SDK 生成的机器人,可以通过作添加 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 SDK 生成的机器人, 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 SDK,并在生成的消息中包含 AI 标签、反馈按钮、敏感度标签和引文。 | 不适用 | View |