カスタムサポート情報ソースに接続する

Copilot Studio には、SharePoint や Dataverse などの組み込みサポート情報ソースが含まれています。 多くの組織では、実行されるクエリを完全に制御しながら、カスタム API や既存のエンタープライズ検索システム、Azure AI 検索 など、独自の検索エンドポイントも利用しています。

Copilot Studio は、このシナリオに OnKnowledgeRequested トリガーで対応しています。 このトリガーを利用するトピックは、カスタム サポート情報ソースとして機能し、生成応答に結果を提供します。

この記事では、OnKnowledgeRequested トリガーを使って Copilot Studio でカスタム サポート情報ソースを構築し統合する方法を説明します。 Copilot Studio でクエリを書き換える方法、ご自身の検索 API に接続する方法、生成応答用に結果をフォーマットする方法、そしてカスタム ナレッジを扱う際のベスト プラクティスについて習得できます。

OnKnowledgeRequested トリガー

OnKnowledgeRequested トリガーは、以下の 2 つの状況で使用してください:

  • オーケストレーターがユーザーの質問に答えるために知識の取得が必要と判断した場合。
  • 会話中に生成応答ノードが明示的に呼び出された場合。

重要

コード ビュー でのみ、YAML を使用してこのトリガーを構成できます。 ビジュアル デザイナーで設定することはできません。

OnKnowledgeRequested を使用するトピックは、通常のトピックでは利用できないシステム変数にアクセスできます:

  • System.SearchQuery: コンテキストを考慮してセマンティック検索向けに書き換えられたユーザーのクエリ。
  • System.KeywordSearchQuery: キーワードベースの検索エンジン向けに最適化された書き直されたクエリ。
  • System.SearchResults: フォーマット済みの知識スニペットをトピックが格納する場所。

Copilot Studio は会話履歴を活用してクエリを賢く書き換え、複数ターンのコンテキストを保持できるようにしています。

カスタム サポート情報ソースの作成

カスタム サポート情報ソースを構築するには、検索 API を呼び出し、その結果を Copilot Studio が求める形式に変換する OnKnowledgeRequested トリガーを持つトピックを作成します。

手順 1: トリガーを作成する

Copilot Studio の新しいトピックを作成しコード ビューに切り替え、OnKnowledgeRequested トリガーを定義します。

kind: AdaptiveDialog
beginDialog:
  kind: OnKnowledgeRequested
  id: main
  intent: {}
  actions:
    # Actions go here
inputType: {}
outputType: {}

この構造は、Copilot Studio にこのトピックが知識リクエストの処理を担当していることを示しています。

手順 2: HTTP 要求を追加する

検索エンドポイントを呼び出す HTTP アクションを追加します。

例:

- kind: HttpRequestAction
  id: searchRequest
  url: = "https://search-api.contoso.com/search?q=" & System.KeywordSearchQuery
  response: Topic.searchResults
  responseSchema:
    kind: Record
    properties:
      query: String
      results:
        type:
          kind: Table
          properties:
            snippet: String
            title: String
            url: String

System.KeywordSearchQuery をベース URL に連結してください。Copilot Studio は検索リクエストを出す前に、会話コンテキストで自動的にユーザー クエリを書き換えるためです。 この手順は、複数ターンにわたる会話のコンテキストを維持するために重要です。

ヒント

生の HTTP 要求の代わりに、検索エンドポイントから結果を取得するための任意の方法 (カスタム コネクター、Azure AI 検索 などの組み込みコネクター、またはエージェント フローなど) を使用できます。

クエリ書き換えの例

  • ユーザー クエリ 1: 「顧客レコードの公式なデータ保持期間はどれくらいですか?」
  • フォローアップ クエリ: 「財務情報の場合は変わりますか?」
  • フォローアップ クエリ: 「例外はあるのですか?」

書き換えられたクエリは次のようになります: 「データ保持ポリシーの例外・顧客データと財務データの保持例外・規制の例外・ポリシーの例外・例外処理・コンプライアンス ガイドライン」

書き直されたクエリに注目します:

  • 「そこ」をデータ保持ポリシーに解決する
  • 前回の両ターンからコンテキストを引き出します: 顧客データ + 財務データ
  • 企業のポリシー用語を追加: 例外、免除、規制、ガイドライン

手順 3: 結果を変換する

カスタム サポート情報ソースは、Copilot Studio が期待する形式で結果を出力する必要があります。 このフォーマットでは次を使用します:

  • Content: スニペットまたは抜粋。
  • ContentLocation (任意): URL。
  • Title (任意): 結果のタイトル。

HTTP 応答の構造を定義するには、Copilot Studio のユーザー インターフェイスで応答スキーマを設定してください。

  • 応答データ タイプにはサンプル データからを選択します。
  • サンプル JSON からスキーマを取得を選択します。
  • サンプル JSON ペイロードを貼り付けてスキーマを自動的に生成します。

このプロセスは YAML ファイル内の応答スキーマを生成します。

responseSchema:
  kind: Record
  properties:
    query: String
    results:
      type:
        kind: Table
        properties:
          snippet: String
          title: String
          url: String

次に、API の応答をこの形式に合わせて変換します。 変換されたデータを System.SearchResultsに割り当てます。

変換例

kind: AdaptiveDialog
beginDialog:
  kind: OnKnowledgeRequested
  id: main
  intent: {}
  actions:
    - kind: HttpRequestAction
      id: searchRequest
      url: ="https://search-api.contoso.com/search?q=" & System.KeywordSearchQuery
      response: Topic.searchResults
      responseSchema:
        kind: Record
        properties:
          query: String
          results:
            type:
              kind: Table
              properties:
                snippet: String
                title: String
                url: String
    
    - kind: SetVariable
      id: setSearchResults
      variable: System.SearchResults
      value: |-
        =ForAll(Topic.searchResults.results,
        {
          Content: snippet,
          ContentLocation: url,
          Title: title
        })

inputType: {}
outputType: {}

SetVariableアクションは以下の 2 つの操作を実行します:

  • ForAll 関数は各検索結果を変換し、snippetContent に、urlContentLocation に、titleTitle にマッピングします。
  • 変換されたテーブルは System.SearchResults に割り当てられ、これは Copilot Studio が回答を生成するために使用する変数です。

考慮事項

カスタム サポート情報ソースを構築する際には、これらの重要な考慮点を念頭に置いてください。

結果の制限

Copilot Studio は System.SearchResults から最大 15 件のスニペットを使用して応答を生成します。 API が返す結果が多い場合は、以下を考慮してください:

  • 関連性スコアリングを実装して、最初に最良の結果を返します。
  • API の応答を 15 件に制限します。
  • 変換前に、結果を関連度順に並べ替えます。

複数のカスタム知識トピック

OnKnowledgeRequested を使用して複数のカスタム知識トピックを作成でき、それぞれのトピックは異なるバックエンド システムに問い合わせることができます。 知識が必要なとき、Copilot Studio はすべてのトピックを同時に呼び出します。 このアプローチにより、異なる検索エンドポイントに問い合わせたり、フォールバック戦略を実装したりできます。

警告

結果制限は全知識トピックに対して適用されます。 トピック A が 10 件、トピック B が 8 件を返した場合でも、全体の中から上位 15 件のみが使用されます。

レコメンデーション

  • 返却する前に結果を並べ替えるかスコアリングします。
  • 応答スキーマは一貫性を保ちます。
  • 明確なトピック名と説明を使います。 大規模な結果セットで関連性フィルタリングが必要な場合、この方法は有用です。