AI で生成されたボット メッセージを強化する
ボットのメッセージ内の AI ラベル、引用、フィードバック ボタン、秘密度ラベルにより、ユーザー エンゲージメントが向上し、透明性と信頼が促進されます。
- AI ラベル を使用すると、ユーザーは AI を使用してメッセージが生成されたことを識別できます。
- 引用 により、ユーザーはテキスト内引用と参照を通じてボット メッセージのソースを参照できます。
- フィードバック ボタンを 使用すると、ユーザーはボット メッセージに肯定的または否定的なフィードバックを提供できます。
- 秘密度ラベル を使用すると、ユーザーはボット メッセージの機密性を理解できます。
次のスクリーンショットは、AI ラベル、引用、フィードバック ボタン、秘密度ラベルを使用してボット メッセージを強化する方法を示しています。
注:
- AI ラベル、引用、フィードバック ボタン、秘密度ラベルは、個人用チャット、グループ チャット、チャネルのボットで使用できます。
- AI ラベル、引用、フィードバック ボタン、秘密度ラベルは、 Government Community Cloud (GCC)、GCC High、および国防総省 (DoD) 環境で利用できます。
AI ラベル
ボット メッセージの AI ラベルは、AI によって生成されていることを示します。 大規模言語モデル (LLM) を使用する AI を利用したボットは一般的に信頼性が高くなりますが、ラベルは情報のソースに関する混乱を防ぐのに役立ちます。
AI ラベルを追加する
Teams AI ライブラリを使用してボットを構築している場合、AI ラベルは、PredictedSayCommand
アクション内の 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 |
配列 | はい | ボット メッセージで AI ラベルを有効にします。 許可される値: AIGeneratedContent |
AI ラベルを追加すると、ボットの名前の横に AI によって生成された ラベルがボットのメッセージに表示されます。 AI ラベルにカーソルを合わせると、 AI によって生成されたコンテンツが正しくないという免責事項が表示されます。 AI ラベルと免責事項は、AI を利用するボット用にカスタマイズすることはできません。
エラー処理
エラー コード | 説明 |
---|---|
400 | 配列の下に複数のルート メッセージ エンティティ entities 見つかりました。 |
400 | 配列からメッセージ エンティティ entities 解析中にエラーが発生しました。 |
引用
ボット メッセージのソースを引用すると、ユーザーがフォローアップの質問をしたり、独立した調査を行ったりするのに役立ちます。 ファイル、メッセージ、電子メール、作業項目などのデータ ソースを引用して、貴重な分析情報を提供します。 引用は、Retrieval-Augmented 生成 (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 |
オブジェクト | ✔️ | 引用文献の詳細。 |
citation.@type |
String | ✔️ | 引用文献のオブジェクト。 許可される値: Claim |
citation.position |
整数 | ✔️ | 引用番号を表示します。 |
citation.appearance |
オブジェクト | ✔️ | 引用の外観に関する情報。 |
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 |
配列 | 参照されるコンテンツのキーワード。 3 つ以上のキーワードを追加することはできません。 各キーワード (keyword)に含めることができる文字数は 28 文字のみです。 | |
citation.appearance.encodingFormat |
String |
citation.appearance.text フィールドのエンコード形式。許可される値: application/vnd.microsoft.card.adaptive |
|
citation.appearance.image |
オブジェクト | 引用文献のアイコンに関する情報。 | |
citation.appearance.image.@type |
String | ✔️ | 引用アイコンのオブジェクト。
ImageObject である必要があります。 |
citation.appearance.image.name |
String | ✔️ | 定義済みのアイコンの名前。 引用文献の詳細に引用アイコンが表示されます。 使用できる値: Microsoft Word 、 Microsoft Excel 、 Microsoft PowerPoint 、 Microsoft OneNote 、 Microsoft SharePoint 、 Microsoft Visio 、 Microsoft Loop 、 Microsoft Whiteboard 、 Source Code 、 Sketch 、 Adobe Illustrator 、 Adobe Photoshop 、 Adobe InDesign 、 Adobe Flash 、 Image 、 GIF 、 Video 、 Sound 、 ZIP 、 Text 、 PDF |
引用を有効にすると、ボット メッセージにテキスト内引用と参照が含まれます。 テキスト内引用は、ユーザーが引用文献にマウス ポインターを合わせると参照の詳細を表示します。
エラー処理
エラー コード | 説明 |
---|---|
400 | 配列の下に複数のルート メッセージ エンティティ entities 見つかりました。 |
400 | 配列からメッセージ エンティティ entities 解析中にエラーが発生しました。 |
400 | 20 以上の引用を含むボット メッセージ。 |
400 |
appearance オブジェクトが空です。 |
400 | ID: X を使用して引用エンティティを解析中にエラーが発生しました。 |
フィードバック ボタン
ボット メッセージのフィードバック ボタンは、ユーザー エンゲージメントの追跡、エラーの特定、ボットのパフォーマンスに関する分析情報の取得に不可欠です。 これらの分析情報により、ボットの会話機能のターゲットを絞った機能強化が可能になります。 フィードバック ボタンを有効にして、ユーザーがメッセージを好き嫌いしたり、詳細なフィードバックを提供したりできます。
ユーザーがフィードバック ボタンを選択すると、ユーザーの選択に基づいてフィードバック フォームが表示されます。 既定のフィードバック フォームを使用するか、アプリのニーズに合わせてカスタマイズできます。
注:
カスタマイズ可能なフィードバック フォームは、 パブリック開発者プレビューで利用できます。
フィードバック ボタンはボットのメッセージのフッターにあり、ユーザーが選択する 👍 (サムアップ) と 👎 (サムダウン) ボタンが含まれます。
フィードバック ボタンを追加する
Teams AI ライブラリを使用して構築されたボットの場合、enable_feedback_loop
が ai
モジュールでtrue
に設定されている場合、Teams はすべてのボット メッセージのフィードバック ボタンを有効にします。
export const app = new Application<ApplicationTurnState>({
ai: {
planner: planner,
enable_feedback_loop: true
},
詳細については、 const アプリ変数に関するページを参照してください。
フィードバック ボタンを有効にすると、ボットのすべてのSAY
コマンドがchannelData
オブジェクトにfeedbackLoopEnabled
true
に自動的に設定されます。
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 |
オブジェクト | ✔️ | ボットのメッセージのフィードバック ボタンを有効にします。 |
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
}
}
}
この呼び出し呼び出しには、 task/fetch
呼び出しに応答するのと同じ方法で、ダイアログ (TeamsJS v1.x ではタスク モジュールと呼ばれます) を使用して応答する必要があります。 ボットでのダイアログの呼び出しの詳細については、「ボット でダイアログを使用する」を参照してください。
フィードバックを処理する
ボットは、ボット呼び出しフローを介してフィードバック フォームからユーザー入力を受け取ります。
Teams AI ライブラリを使用して構築されたボットの場合、ボット呼び出し要求は自動的に処理されます。 フィードバックを処理するには、 app.feedbackLoop
メソッドを使用して、ユーザーがフィードバックを提供したときに呼び出されるフィードバック ループ ハンドラーを登録します。
app.feedbackLoop(async (_context: TurnContext, _state: TurnState, feedbackLoopData: FeedbackLoopData) => {
// custom logic here...
});
詳細については、 非同期コールバック関数に関するページを参照してください。
Bot Framework SDK を使用して構築されたボットの場合は、フィードバックを処理するonInvokeActivity
ハンドラーが必要です。 応答として空の JSON オブジェクトを含む状態コード 200
を返すようにします。
次のコード スニペットは、ボット呼び出しで受信したフィードバックを処理し、状態コード 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 応答が空ではありません。 |
機密ラベル
ボットの応答には機密情報が含まれている場合や、organization内の特定の個人のみがアクセスできる場合があります。 秘密度ラベルを追加して、ユーザーがメッセージの機密性を識別できるようにし、メッセージを共有するときに注意を払うのに役立ちます。
注:
機密情報が含まれている場合にのみ、ボットのメッセージに秘密度ラベルを追加します。
秘密度ラベルを追加する
Teams AI ライブラリを使用して構築されたボットの場合は、PredictedSayCommand
アクションを使用して秘密度ラベルを追加できます。 詳細については、「 SensitivityUsageInfo インターフェイス」を参照してください。
Bot Framework SDK を使用して構築されたボットの場合は、entities
オブジェクトにusageInfo
を含むようにメッセージを変更して、秘密度ラベルをボット メッセージに追加します。
次のコード スニペットは、ボット メッセージと引用文献の両方に秘密度ラベルを追加する方法を示しています。
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 値が、少なくとも 1 つのインスタンスのメッセージ レベル usageInfo.@id と一致しません。 |
400 | 同じ@id を持つ複数の引用レベルのusageInfo プロパティがありますが、その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 インターフェイス」を参照してください。
コード サンプル
サンプルの名前 | 説明 | Node.js | .NET |
---|---|---|---|
Teams 会話ボット | このサンプル アプリでは、メッセージに AI ラベル、引用、フィードバック ボタン、秘密度ラベルが表示されます。 | 表示 | 該当なし |
データに対する Azure OpenAI | この会話型ボットは Teams AI ライブラリを使用し、生成されたメッセージに AI ラベル、フィードバック ボタン、秘密度ラベル、引用が含まれています。 | 該当なし | 表示 |
関連項目
Platform Docs