Copilot Studio には、SharePoint や Dataverse などの組み込みのナレッジ ソースが含まれています。 多くの組織では、実行されるクエリを完全に制御しながら、カスタム API、既存のエンタープライズ検索システム、Azure AI Search などの独自の検索エンドポイントも使用しています。
Copilot Studio では、 OnKnowledgeRequested トリガーを使用してこのシナリオがサポートされています。 このトリガーを使用するトピックは、カスタムのナレッジ ソースとして機能し、生成的な回答に結果を提供します。
この記事では、 OnKnowledgeRequested トリガーを使用して Copilot Studio でカスタム ナレッジ ソースを構築および統合する方法について説明します。 Copilot Studio がクエリを書き換える方法、独自の検索 API に接続する方法、生成的な回答の結果を書式設定する方法、カスタムナレッジを使用する際のベスト プラクティスについて説明します。
OnKnowledgeRequested トリガー
次の 2 つの状況で、 OnKnowledgeRequested トリガーを使用します。
- オーケストレーターが、ユーザー クエリに応答するためにナレッジの取得が必要であると判断したとき。
- 生成応答ノードが会話で明示的に呼び出されたとき。
Important
このトリガーは、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
Copilot Studio は検索要求を行う前に会話コンテキストでユーザー クエリを自動的に書き換えるため、 System.KeywordSearchQuery をベース URL に連結します。 この手順は、複数ターンの会話間でコンテキストを維持するために重要です。
ヒント
生の HTTP 要求の代わりに、カスタム コネクタ、Azure AI Search などの組み込みコネクタ、エージェント フローなど、検索エンドポイントから結果を取得する任意のメソッドを使用できます。
クエリの書き換えの例
- ユーザー クエリ 1: "顧客レコードの公式データ保持期間は何ですか?
- フォローアップ クエリ: "金融情報に対して変更がありますか?"
- フォローアップ クエリ: "例外はありますか?
書き換えられたクエリは、"データ保持ポリシーの顧客に対する例外と財務データ保持例外規制の除外ポリシー例外処理コンプライアンス ガイドライン" になります。
書き換えられたクエリに注目してください。
- 「そこをデータ保持ポリシーに基づいて解決します」
- 顧客データと財務データの両方の前のターンからコンテキストを引き出します
- エンタープライズ ポリシー言語を追加: 例外、除外、規制、ガイドライン
手順 3: 結果を変換する
カスタムナレッジソースは、Copilot Studio が期待する形式で結果を出力する必要があります。 この形式では、次の形式が使用されます。
- コンテンツ: スニペットまたは抜粋。
- ContentLocation (省略可能): URL。
- タイトル (省略可能): 結果のタイトル。
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 アクションは、次の両方の操作を実行します。
-
ForAll関数は、各検索結果の変換、snippetへのContentのマッピング、urlへのContentLocation、titleへのTitleを行います。 - 変換されたテーブルは
System.SearchResultsに割り当てられます。これは、Copilot Studio が回答の生成に使用する変数です。
考慮事項
カスタムナレッジソースを構築するときは、これらの重要な考慮事項に留意してください。
結果の制限
Copilot Studio では、 System.SearchResults から最大 15 個のスニペットを使用して応答を生成します。 API からさらに多くの結果が返される場合は、次の点を考慮してください。
- 最初に最適な結果を返す関連性スコアリングを実装します。
- API 応答を 15 件の結果に制限する。
- 変換前の関連性による結果の並べ替え。
複数のカスタム知識テーマ
OnKnowledgeRequestedを使用して複数のトピックを作成でき、各トピックは異なるバックエンド システムに対してクエリを実行できます。 Copilot Studio は、知識が必要な場合に、それらのすべてを同時に呼び出します。 この方法では、さまざまな検索エンドポイントに対してクエリを実行したり、フォールバック戦略を実装したりすることができます。
Warnung
結果の制限は、結合されたすべてのナレッジ トピックに適用されます。 トピック A が 10 件の結果を返し、トピック B が 8 を返す場合、上位 15 件の結合結果のみが使用されます。
レコメンデーション
- 結果を返す前に並べ替えまたはスコア付けします。
- 応答スキーマの一貫性を維持します。
- 明確なトピック名と説明を使用します。 この方法は、大きな結果セットで関連性のフィルター処理が必要な場合に便利です。