引用により、Microsoft 365 Copilot の応答が正確で根拠があるという信頼が構築されます。 応答本文には、Copilot によって合成された応答の引用が自動的に含まれます。 ただし、エンド ユーザーが情報のソースを開くことができる場合と開いていない場合があります。 Copilot がパブリック Web コンテンツに基づいて応答すると、URL が自動的に引用されます。
モデル コンテキスト プロトコル (MCP) サーバーまたは API から送信されたコンテンツの場合、そのコンテンツはエンド ユーザーが開いて確認できる URL を返すことができます。 プラグイン定義で response_semantics を定義すると、Copilot はその URL がプラグインの応答内のどこにあるかを認識し、正しいリンクを使用して引用をクリックできるようにします。
この手順をスキップしても、応答に引用を含めることができますが、代表的なピルまたはアイコンのみが含まれます。 エンド ユーザーがサイトからクリックスルーしてデータを確認できません。
Copilot は一般的なフィールド名から引用メタデータを自動的に推論することもできるため、 response_semanticsを明示的に定義する必要がなくなりました。 明示的な response_semantics を提供する場合、引き続き明示的なが優先されます。 この動的フォールバックへの依存は、ツール サーフェスが実行時に変更される可能性がある動 的ツール検出を使用する場合に特に便利です。 詳細については、「 動的応答セマンティクス」を参照してください。
重要
引用を取得するためにアダプティブ カードは必要ありません。 応答セマンティクス ( data_path といくつかの properties マッピング) だけで、Copilot はソースを指すクリック可能な引用文献をレンダリングするのに十分です。
引用を超えた豊富な UX のために対話型 MCP アプリ を使用することを検討してください。
応答セマンティクスの使用
プラグイン マニフェストで定義されている応答セマンティクスは、MCP サーバーまたは API と Copilot の間の契約として機能します。
ツールは JSON を返します。
プラグイン マニフェストで次のようにします。
- 引用 可能な項目が JSON 内のどこに配置されているか (
data_path) を Copilot に伝えます。 -
各アイテムのどのフィールドが引用文献のタイトル、サブタイトル、URL (
properties) にマップされるかを Copilot に指示します。
- 引用 可能な項目が JSON 内のどこに配置されているか (
Copilot は各項目の引用をレンダリングします。 ユーザーがクリックスルーしてソースにアクセスします。
明示的な properties マッピングを指定した場合、Copilot はそれをそのまま使用します。 動的推論は、これらのマッピングが存在しない場合にのみ適用されます。 詳細については、「 動的応答セマンティクス」を参照してください。
最小構成
response_semantics構成は、ツールの応答のプロトコルではなく、ツールの応答の形状によって決まります。 すべてのツール プロトコル (MCP、OpenAPI、メッセージ拡張機能) を備えた Copilot エージェントは、同じマニフェスト スキーマを使用します。
ほとんどのツール応答は、次の 2 つの形態のいずれかに分類されます。
- 結果の配列 (検索ツールのようなもの): ツールは複数のアイテムを返し、それぞれが独自の引用になります。
- 単一のオブジェクト (フェッチ ツールなど): ツールは 1 つのドキュメントまたはレコードだけを返し、それが 1 つの引用になります。
結果の配列 (検索スタイル)
複数の項目を返すツールは、通常、次の例に示すように、 results (または同等の) キーの下にある配列を返します。
{
"results": [
{
"id": "tr-001",
"title": "Forecasting AI adoption in the enterprise (2026)",
"url": "https://www.treyresearch.net/notes/ai-adoption-2026",
"publishedDate": "2026-03-12",
"thumbnailUrl": "https://www.treyresearch.net/assets/trey-research-logo.png"
},
{
"id": "tr-005",
"title": "Enterprise AI spend, deep dive",
"url": "https://www.treyresearch.net/notes/ai-spend",
"publishedDate": "2026-03-28",
"thumbnailUrl": "https://www.treyresearch.net/assets/trey-research-logo.png"
}
]
}
次の例は、プラグイン マニフェストでの最小応答セマンティクスの構成を示しています。
"capabilities": {
"response_semantics": {
"data_path": "$.results",
"properties": {
"title": "$.title",
"subtitle": "$.publishedDate",
"url": "$.url"
}
}
}
data_path プロパティは配列を指します。 各要素は、独自のクリック可能な引用を生成します。
properties JSONPath は、ルートではなく、各配列要素を基準にして解決されます。
単一オブジェクト (フェッチ スタイル)
次の例では、1 つのソースとして引用されるレコード (ドキュメント、エンティティ、ファイル) が 1 つだけ含まれている応答を示しています。
{
"id": "tr-001",
"title": "Forecasting AI adoption in the enterprise (2026)",
"text": "Trey Research surveyed 412 enterprise CIOs across North America and EMEA between January and February 2026. We forecast that 64% of Fortune 500 firms will be running at least one production generative AI workload by end of 2026, up from 38% at the close of 2025...",
"url": "https://www.treyresearch.net/notes/ai-adoption-2026",
"publishedDate": "2026-03-12",
"thumbnailUrl": "https://www.treyresearch.net/assets/trey-research-logo.png",
"metadata": { "source": "trey-research", "category": "AI" }
}
次の例は、プラグイン マニフェストでの最小応答セマンティクスの構成を示しています。
"capabilities": {
"response_semantics": {
"data_path": "$",
"properties": {
"title": "$.title",
"subtitle": "$.publishedDate",
"url": "$.url"
}
}
}
$ に設定した data_path プロパティは、ルート オブジェクトを 1 つの引用文献項目として選択します。 レコードに metadata などの入れ子になったフィールドが含まれている場合でも、ツールが 1 つのレコードを返す場合は、これが正しい選択です。
MCP コンテンツ ラッパー
MCP ツールは、TextContentBlock項目のcontent配列で応答をラップします。 Copilot は各ブロックの text フィールドを JSON として解析し、解析された値に対して data_path を適用します。 外側のcontent ラッパーではなく、text文字列内の形状によって構成が駆動されます。
MCP 応答の例
{
"content": [
{
"type": "text",
"text": "{\"id\":\"tr-001\",\"title\":\"Forecasting AI adoption in the enterprise (2026)\",\"url\":\"https://www.treyresearch.net/notes/ai-adoption-2026\"}"
}
]
}
パーサーは最初に text ペイロードをアンラップし、1 つのオブジェクトを残します。
単一オブジェクト構成 ("data_path": "$") を使用します。
text フィールド内の配列を返す MCP 検索ツールは、結果構成の配列 (data_path: "$.results") を使用します。
動的応答セマンティクス (ゼロ構成フォールバック)
明示的な response_semantics は、ツールが安定していて変更されない場合にのみ適切に機能します。 サードパーティの MCP サーバー上に構築されたコネクタはツールを頻繁に更新するため、サーバーの進化に合わせてマニフェストを同期しておく必要があります。 サーバーが変更されてもマニフェストが変更されない場合、構造化典拠は自動的に生のテキストにフォールバックし、引用文献のレンダリングが停止します。
マニフェストで明示的な properties マッピングが省略されている場合、Copilot は、既知のエイリアスの優先順位付けされた一覧に対して各結果オブジェクトをスキャンすることで、引用フィールドを推論します。 このゼロ構成フォールバックは、マニフェストを固定されたツール サーフェイスにピン留めすることができない動 的ツール検出で特に便利です。
フィールド エイリアス
Copilot は各引用フィールドに対して、次のエイリアスを優先度順にチェックし、最初に見つかった一致を使用します。
| [引用文献] フィールド | エイリアス (優先順位) |
|---|---|
| URL |
display_url, displayUrl, web_url, webUrl, url, citation_url, citationUrl, reference_url, referenceUrl, website_url, websiteUrl, web_link, webLink, link, href |
| タイトル |
display_title, displayTitle, title, name, display_name, displayName, web_title, webTitle, subject, heading, caption |
| サブタイトル |
subtitle, description, summary, snippet, source, provider, site_name, siteName, highlight |
| サムネイル |
thumbnail_url, thumbnailUrl, thumbnail, image_url, imageUrl, logo_url, logoUrl, icon_url, iconUrl |
| 結果の配列 |
results, items, data, value, records, entries |
解決ルール
- URL はハード要件です。 空でない URL が見つからない場合、Copilot は要素をスキップし、引用を出力しません。
- タイトル エイリアスが存在しない場合、タイトルはホスト名にフォールバックします。
- 字幕とサムネイルは日和見的です。 Copilot は、一致するフィールドを認識したときにそれらを含め、それ以外の場合は省略します。
例
MCP ツールが次の応答を返す場合は、 response_semantics を明示的に定義する必要はありません。 Copilot は、よく知られたエイリアスから引用フィールドを推測します。
{
"isError": false,
"content": [
{
"type": "text",
"text": "<stringified results>"
}
]
}
[ text ] フィールドには、文字列化された結果が含まれています。
{
"results": [
{
"url": "https://example.com/result1",
"title": "Result 1",
"subtitle": "Subtitle for Result 1"
},
{
"url": "https://example.com/result2",
"title": "Result 2",
"subtitle": "Subtitle for Result 2"
}
]
}
results、url、title、subtitle はすべて既知のエイリアスと一致するため、Copilot は各アイテムに対してクリック可能な引用をレンダリングします。 同等のエイリアスは、代わりに機能します。たとえば、results ではなく items または data や、url ではなく webUrl または href などです。
引用プロパティ
次のプロパティは引用で利用できます。 すべての値は、 data_path によって選択された 1 つのアイテムに対する相対 JSONPath 式です。
| プロパティ | 必須 | 機能 |
|---|---|---|
title |
はい (実質的) | 引用のクリック可能な見出し。 |
subtitle |
不要 | 2行目 - 日付、著者、カテゴリ。 |
url |
はい (実質的) | クリックしたときに引用文献が移動する場所。 ソースに戻る正規のリンクである必要があります。 |
thumbnail_url |
不要 | 引用と一緒に表示されている小さな画像。 |
注:
urlがない場合は、引用はクリックできません。 このプロパティの欠落は、開発者が機能していない引用を見る非常に一般的な理由です。
設定 data_path
data_path プロパティは JSONPath (RFC 9535) 式です。 正しくない JSONPath 式を使用することは、引用が表示されない最も一般的な理由の 1 つです。
| あなたの応答が次のようになりますか? | この data_path を使用する |
|---|---|
{ "results": [ ... ] } |
$.results |
{ "content": [ { "results": [ ... ] } ] } (MCP スタイルの入れ子) |
$.content[0].results |
| ルートの単一オブジェクト (配列ラッパーなし) | $ |
{ "content": [ { "type": "text", "text": "<stringified JSON>" } ] } (raw MCP) |
$(root の場合)または内部 JSON に配列がある場合は $.results |
ヒント
配列をフラット化します。 複数レベルの入れ子になった配列 ( $.content[0].results[0].items など) は、サイレントに失敗する可能性が最も高いスキーマ パターンです。 ツールの応答形状を所有している場合は、フラットな results: [...] 配列を返します。
応答セマンティクスを超える
第 1 の優先事項として、リッチ UI ウィジェットをエージェントに追加することを検討してください。 このアプローチは、より将来に備え、AI ネイティブであり、よりインテリジェントで適応性が高くシームレスな対話を可能にします。
注:
このセクションのアダプティブ カード ガイダンスは、 宣言型エージェントにのみ適用されます。 引用の staticTemplate プロパティとアダプティブ カード レンダリングは、Copilot コネクタではサポートされていません。
次のいずれかの条件が必要な場合にのみ、最後の手段としてアダプティブ カードを追加します。
- 引用文献のみ (複数列、画像バナー、書式設定されたテキスト ブロック)、または引用カード本文にレンダリングされた複数のフィールド (タイトル、サブタイトル、URL 以外) のカスタムビジュアル レイアウト。
- 既定の "引用文献をクリックする" 動作を超える動作 (
Action.Execute、マルチボタン ツールバーなど)
大半の引用シナリオ (「出典を表示して、クリックで表示させる」) では、アダプティブ カードを完全にスキップします。 これらは複雑さを増し、デバッグが難しく、既定の引用 UI はクリーンで Copilot の他の部分と一貫しています。
アダプティブ カードを使用した例
"response_semantics": {
"data_path": "$.content[1].results",
"properties": {
"title": "$.title",
"subtitle": "$.publishedDate",
"url": "$.url"
},
"staticTemplate": {
"type": "AdaptiveCard",
"version": "1.4",
"body": [
{
"type": "TextBlock",
"text": "${title}",
"weight": "bolder",
"size": "medium"
},
{
"type": "TextBlock",
"text": "${subtitle}",
"isSubtle": true
},
{
"type": "TextBlock",
"text": "${text}",
"wrap": true
}
],
"selectAction": {
"type": "OpenUrl",
"url": "${url}"
}
}
}
${title}、${subtitle}、${url} トークンに注目してください。 前に表示したのと同じ properties マップに、これらのトークンが設定されます。 アダプティブ カードは、応答セマンティクス上にある プレゼンテーション レイヤー です。置き換えるものではありません。
トラブルシューティング チェックリスト
引用が表示されない場合は、次のチェックリストを使用してください。
-
data_pathは正しいノードを指していますか? ツールの未加工の JSON 応答を JSONPath テスターに貼り付け、式が期待どおりの配列またはオブジェクトを返すことを確認します。 - 各項目の
urlが空ではないか? URL が見つからない場合は、クリックできない引用文献になります。 - MCP ツールの場合、
textフィールドは有効な JSONTextContentBlockですか? 手動で解析して確認します。 - スキーマはフラットですか? 深く入れ子になった配列がある場合は、1 つのフラット配列を返してみてください。
- プラグインのルートではなく、関数ごとに (プラグイン マニフェストのその関数の
capabilities内) でresponse_semanticsを宣言しましたか? スコープを関数に指定する必要があります。