次の方法で共有


AI で生成されたボット メッセージを強化する

ボットのメッセージ内の AI ラベル、引用、フィードバック ボタン、秘密度ラベルにより、ユーザー エンゲージメントが向上し、透明性と信頼が促進されます。

  • AI ラベル を使用すると、ユーザーは AI を使用してメッセージが生成されたことを識別できます。
  • 引用 により、ユーザーはテキスト内引用と参照を通じてボット メッセージのソースを参照できます。
  • フィードバック ボタンを 使用すると、ユーザーはボット メッセージに肯定的または否定的なフィードバックを提供できます。
  • 秘密度ラベル を使用すると、ユーザーはボット メッセージの機密性を理解できます。

次のスクリーンショットは、AI ラベル、引用、フィードバック ボタン、秘密度ラベルを使用してボット メッセージを強化する方法を示しています。

イベント前

AI ラベル、引用、フィードバック ボタン、秘密度ラベルのないボット メッセージを示すスクリーンショット。

イベント後

Teams デスクトップ クライアントの 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) などの手法を使用するボットにとって重要です。

引用

Teams デスクトップ クライアントで引用を含む AI を利用したボット応答を示すスクリーンショット。

モーダル ウィンドウ

スクリーンショットは、Teams デスクトップ クライアントの AI を利用したボット メッセージの引用からのモーダル ウィンドウポップアップを示しています。

ボットのメッセージの引用には、次のものが含まれます。

  • テキスト内引用 は、ボット メッセージに追加された引用番号を [#] 形式で表し、それぞれ参照に対応します。 引用文献は、テキスト内の任意の場所に挿入できます。
  • 引用文献の詳細 には、タイトル、アイコン、キーワード、抽象、ハイパーリンク、秘密度情報、および追加のコンテンツを含むモーダル ウィンドウを開くボタンが含まれます。 参照は、テキスト内引用ごとにポップアップ ウィンドウとして表示されます。
  • 引用に対する秘密度ラベル は、参照されている引用コンテンツの機密性を示し、自動的には追加されません。 引用の秘密度ラベルを追加するには、「 秘密度ラベルを追加する」を参照してください。
  • 追加のコンテンツを含むモーダル ウィンドウ では、対話型項目を含まないアダプティブ カードがレンダリングされます。

注:

  • 最大 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 WordMicrosoft ExcelMicrosoft PowerPointMicrosoft OneNoteMicrosoft SharePointMicrosoft VisioMicrosoft LoopMicrosoft WhiteboardSource CodeSketchAdobe IllustratorAdobe PhotoshopAdobe InDesignAdobe FlashImageGIFVideoSoundZIPTextPDF

引用を有効にすると、ボット メッセージにテキスト内引用と参照が含まれます。 テキスト内引用は、ユーザーが引用文献にマウス ポインターを合わせると参照の詳細を表示します。

エラー処理

エラー コード 説明
400 配列の下に複数のルート メッセージ エンティティ entities 見つかりました。
400 配列からメッセージ エンティティ entities 解析中にエラーが発生しました。
400 20 以上の引用を含むボット メッセージ。
400 appearance オブジェクトが空です。
400 ID: X を使用して引用エンティティを解析中にエラーが発生しました。

フィードバック ボタン

ボット メッセージのフィードバック ボタンは、ユーザー エンゲージメントの追跡、エラーの特定、ボットのパフォーマンスに関する分析情報の取得に不可欠です。 これらの分析情報により、ボットの会話機能のターゲットを絞った機能強化が可能になります。 フィードバック ボタンを有効にして、ユーザーがメッセージを好き嫌いしたり、詳細なフィードバックを提供したりできます。

ユーザーがフィードバック ボタンを選択すると、ユーザーの選択に基づいてフィードバック フォームが表示されます。 既定のフィードバック フォームを使用するか、アプリのニーズに合わせてカスタマイズできます。

注:

カスタマイズ可能なフィードバック フォームは、 パブリック開発者プレビューで利用できます。

フィードバック ボタンはボットのメッセージのフッターにあり、ユーザーが選択する 👍 (サムアップ) と 👎 (サムダウン) ボタンが含まれます。

フィードバック ボタンを追加する

Teams AI ライブラリを使用して構築されたボットの場合、enable_feedback_loopai モジュールでtrueに設定されている場合、Teams はすべてのボット メッセージのフィードバック ボタンを有効にします。

export const app = new Application<ApplicationTurnState>({
    ai: {
        planner: planner,
        enable_feedback_loop: true
    },

詳細については、 const アプリ変数に関するページを参照してください。

フィードバック ボタンを有効にすると、ボットのすべてのSAY コマンドがchannelData オブジェクトにfeedbackLoopEnabledtrueに自動的に設定されます。

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 ✔️ ユーザーがフィードバック ボタンを選択したときに表示されるフィードバック フォームの種類を定義します。
使用できる値: customdefault

feedbackLoop.typedefaultに設定すると、ユーザーがフィードバック ボタンを選択すると、既定のフィードバック フォームが表示されます。 カスタム フィードバック フォームを表示する場合は、[ 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プロパティがありますが、その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 .NET
Teams 会話ボット このサンプル アプリでは、メッセージに AI ラベル、引用、フィードバック ボタン、秘密度ラベルが表示されます。 表示 該当なし
データに対する Azure OpenAI この会話型ボットは Teams AI ライブラリを使用し、生成されたメッセージに AI ラベル、フィードバック ボタン、秘密度ラベル、引用が含まれています。 該当なし 表示

関連項目