AI によって生成されたコンテンツを含むボット メッセージ
ボットのメッセージ内の AI ラベル、引用、フィードバック ボタン、秘密度ラベルは、ユーザー エンゲージメントを向上させ、透明性と信頼を高めます。
- AI ラベル を使用すると、ユーザーは AI を使用してメッセージが生成されたことを識別できます。
- 引用により 、ユーザーはテキスト内引用と参照を通じてボット メッセージのソースを参照できます。
- フィードバック ボタンを 使用すると、ユーザーはボット メッセージに肯定的または否定的なフィードバックを提供できます。
- 秘密度ラベル を使用すると、ユーザーはボット メッセージの機密性を理解できます。
次のスクリーンショットは、AI ラベル、引用、フィードバック ボタン、秘密度ラベルを使用してボット メッセージを強化する方法を示しています。
注:
- AI ラベル、引用、フィードバック ボタン、秘密度ラベルは、1 対 1 およびグループ チャットの パブリック開発者プレビュー で利用できますが、チャネルではサポートされていません。
- AI ラベル、引用、フィードバック ボタン、秘密度ラベルは、Teams Web クライアントとデスクトップ クライアントでのみ使用できます。
- AI ラベル、引用、フィードバック ボタン、秘密度ラベルは、 Government Community Cloud (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
を含めます。 コード スニペットの例を次に示します。
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 によって生成されたラベルは、SendActivity
を使用して新しいメッセージを送信する場合にのみ使用できます。
UpdateActivity
を使用してメッセージを更新すると、[編集済み] ラベルが追加されます。
エラー処理
エラー コード | 説明 |
---|---|
400 | 配列の下に複数のルート メッセージ エンティティ entities 見つかりました |
400 |
entities 配列からのメッセージ エンティティの解析中にエラーが発生しました |
引用
ユーザーがフォローアップの質問をしたり、独立した調査を行ったりするのに役立つボット メッセージのソースを引用することが重要です。 ファイル、メッセージ、電子メール、作業項目などのデータ ソースを引用して、ユーザーに貴重な分析情報を提供します。 引用は、検索拡張生成 (RAG) などの手法を使用するボットにとって重要です。
ボット メッセージへの引用には、テキスト内引用、引用文献参照の詳細、参照されるコンテンツの秘密度ラベルが含まれます。
- テキスト内引用 は、ボット メッセージに追加された引用番号を [#] 形式で表し、それぞれ参照に対応します。 引用文献は、テキスト内の任意の場所に挿入できます。
- 引用文献の詳細 には、タイトル、キーワード、抽象、ハイパーリンク、秘密度の情報が含まれます。 参照は、テキスト内引用ごとにポップアップ ウィンドウとして表示されます。
- 引用に対する秘密度ラベル は、参照されている引用コンテンツの機密性を示し、自動的には追加されません。 引用の秘密度ラベルを追加するには、「 秘密度ラベルを追加する」を参照してください。
注:
- 最大 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 |
String | はい | 引用文献のオブジェクト。 許可される値は Claim のみです。 |
citation.position |
整数 | はい | 引用番号を表示します。 値は 8 未満に制限されています。 |
citation.appearance |
オブジェクト | はい | 引用の外観に関する情報。 |
citation.appearance.@type |
String | はい | 引用の外観のオブジェクト。 許可される値は DigitalDocument のみです。 |
citation.appearance.name |
String | はい | 参照先コンテンツのタイトル。 |
citation.appearance.url |
String | いいえ | 参照されるコンテンツの URL。 |
citation.appearance.abstract |
String | いいえ | 参照されるコンテンツの抽出は、1,000 文字未満に制限されます。 |
citation.appearance.keywords |
配列 | いいえ | 参照されるコンテンツのキーワード。 3 つ以上のキーワードを追加することはできません。 |
引用を有効にすると、ボット メッセージにテキスト内引用と参照が含まれます。 テキスト内引用は、ユーザーが引用文献にマウス ポインターを合わせると参照の詳細を表示します。
エラー処理
エラー コード | 説明 |
---|---|
400 | 配列の下に複数のルート メッセージ エンティティ entities 見つかりました |
400 |
entities 配列からのメッセージ エンティティの解析中にエラーが発生しました |
400 | 10 件を超える引用を含むボット メッセージ |
400 |
appearance オブジェクトが空です |
400 | ID を持つ引用エンティティの解析中のエラー: X |
フィードバック ボタン
ボット メッセージのフィードバック ボタンは、ユーザー エンゲージメントの測定、エラーの特定、ボットのパフォーマンスに関する分析情報の取得に不可欠です。 これらの分析情報により、ボットの会話機能がターゲットに設定され、効果的に強化される可能性があります。 フィードバック ボタンを有効にして、ユーザーがメッセージを好き嫌いしたり、詳細なフィードバックを提供したりできます。
ユーザーがフィードバック ボタンを選択すると、ユーザーの選択に基づいて、それぞれのフィードバック フォームが表示されます。
フィードバック ボタンはボットのメッセージのフッターにあり、ユーザーが選択できる 👍 (サムアップ) と 👎 (サムダウン) ボタンが含まれています。 ボットの応答に関するフィードバックは、1 対 1 のチャットとグループ チャットから収集できます。
フィードバック ボタンを追加する
Teams AI ライブラリを使用して構築されたボットの場合、enable_feedback_loop
が ai
モジュールでtrue
に設定されている場合、Teams はすべてのボット メッセージにフィードバック ボタンを有効にします。
export const app = new Application<ApplicationTurnState>({
ai: {
planner: planner,
enable_feedback_loop: true
},
詳細については、 const アプリ変数に関するページを参照してください。
フィードバック ボタンを有効にすると、ボットのすべての SAY コマンドが、channelData
オブジェクト内のtrue
に自動的に設定feedbackLoopEnabled
。
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 |
ブール型 | はい | ボットのメッセージのフィードバック ボタンを有効にします |
フィードバックを処理する
ボットは、ボットの呼び出しフローを通じて、フィードバック フォームで受け取ったユーザーの入力を受け取ります。
Teams AI ライブラリを使用して構築されたボットの場合、受信したボットの呼び出しは自動的に処理されます。 フィードバックを処理するには、 app.feedbackLoop
メソッドを使用して、ユーザーがフィードバックを提供するときに呼び出されたフィードバック ループ ハンドラーを登録します。
app.feedbackLoop(async (context, state, 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 | C# |
---|---|---|---|
Teams 会話ボット | このサンプル アプリでは、メッセージに AI ラベル、引用文献、フィードバック ボタン、秘密度ラベルが表示されます。 | 表示 | |
TeamsAzureOpenAI | この会話型ボットは Teams AI ライブラリを使用し、生成されたメッセージに AI ラベル、フィードバック ボタン、秘密度ラベル、引用が含まれています。 | 表示 |
関連項目
Platform Docs