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 ラベルを示すスクリーンショット。

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 を利用するボット用にカスタマイズすることはできません。

エラー処理

エラー コード 説明
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 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_loopai モジュールで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 応答が空ではありません。

機密ラベル

ボットの応答には、機密性の高い情報や、組織内の特定の個人のみがアクセスできる情報が含まれている場合があります。 ユーザーがメッセージの機密性を識別できるように秘密度ラベルを追加し、メッセージを共有するときに注意を払う必要があります。

AI ボットの秘密度ラベルを示すスクリーンショット。

注:

機密情報が含まれている場合にのみ、ボットのメッセージに秘密度ラベルを追加します。

秘密度ラベルを追加する

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プロパティがありますが、その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 インターフェイス」を参照してください。

コード サンプル

サンプルの名前 説明 Node.js C#
Teams 会話ボット このサンプル アプリでは、メッセージに AI ラベル、引用文献、フィードバック ボタン、秘密度ラベルが表示されます。 表示
TeamsAzureOpenAI この会話型ボットは Teams AI ライブラリを使用し、生成されたメッセージに AI ラベル、フィードバック ボタン、秘密度ラベル、引用が含まれています。 表示

関連項目