Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Zitate schaffen vertrauen, dass eine Microsoft 365 Copilot Antwort genau und begründet ist. Der Antworttext enthält automatisch Zitate für synthetisierte Copilot-Antworten. Der Endbenutzer kann die Informationsquelle jedoch möglicherweise nicht öffnen. Wenn Copilot eine Antwort auf öffentliche Webinhalte angibt, wird die URL automatisch zitiert.
Für Inhalte, die von einem MCP-Server (Model Context Protocol) oder einer API stammen, muss dieser Inhalt eine URL zurückgeben, die ein Endbenutzer öffnen und überprüfen kann. Sie definieren response_semantics in Ihrer Plug-In-Definition, damit Copilot weiß, wo sich diese URL in der Plug-In-Antwort befindet, und kann das Zitat mit dem rechten Link anklickbar machen.
Wenn Sie diesen Schritt überspringen, enthält die Antwort weiterhin ein Zitat, jedoch nur mit einer repräsentativen Pille oder einem Symbol. Der Endbenutzer kann sich nicht durchklicken und die Daten von Ihrer Website bestätigen. Aus diesem Grund sind klickbare Zitate auch eine Microsoft 365 Copilot Agents Store-Richtlinienanforderung für Apps, die im Store veröffentlicht werden.
Copilot kann auch automatisch Zitatmetadaten aus allgemeinen Feldnamen ableiten, sodass Sie nicht mehr explizit definieren response_semanticsmüssen. Explizit response_semantics hat weiterhin Vorrang, wenn Sie sie bereitstellen. Die Verwendung dieses dynamischen Fallbacks ist besonders nützlich, wenn Sie die dynamische Toolermittlung verwenden, bei der sich die Tooloberfläche zur Laufzeit ändern kann. Weitere Informationen finden Sie unter Dynamische Antwortsemantik.
Wichtig
Sie benötigen keine adaptive Karte, um Zitate zu erhalten. Die Antwortsemantik allein - ein data_path Plus von einigen properties Zuordnungen - reicht aus, damit Copilot ein klickbares Zitat rendert, das auf Ihre Quelle verweist.
Erwägen Sie die Verwendung interaktiver MCP-Apps für eine umfassende UX, die über Zitate hinausgeht.
Verwenden der Antwortsemantik
Die in Ihrem Plug-In-Manifest definierte Antwortsemantik fungiert als Vertrag zwischen Ihrem MCP-Server oder ihrer API und Copilot.
Ihr Tool gibt JSON zurück.
Im Plug-In-Manifest:
- Sie teilen Copilot mit , wo sich in diesem JSON-Code die zitierfähigen Elemente befinden (
data_path). - Sie teilen Copilot mit , welche Felder in den einzelnen Elementen dem Titel, dem Untertitel und der URL (
properties) des Zitats zugeordnet sind.
- Sie teilen Copilot mit , wo sich in diesem JSON-Code die zitierfähigen Elemente befinden (
Copilot rendert ein Zitat für jedes Element. Benutzer klicken sich bis zu Ihrer Quelle durch.
Wenn Sie explizite properties Zuordnungen bereitstellen, verwendet Copilot diese unverändert. Dynamische Rückschlüsse gelten nur, wenn diese Zuordnungen fehlen. Weitere Informationen finden Sie unter Dynamische Antwortsemantik.
Mindestkonfiguration
Ihre response_semantics Konfiguration wird von der Form der Antwort Ihres Tools gesteuert, nicht durch das Protokoll Ihrer Toolantwort. Copilot-Agents mit allen Toolprotokollen (MCP, OpenAPI, Nachrichtenerweiterungen) verwenden dasselbe Manifestschema.
Die meisten Toolantworten fallen in eine von zwei Formen:
- Ein Array von Ergebnissen (wie ein Suchtool): Das Tool gibt mehrere Elemente zurück, von denen jedes sein eigenes Zitat werden sollte.
- Ein einzelnes Objekt (z. B. ein Abruftool): Das Tool gibt genau ein Dokument oder einen Datensatz zurück, der zu einem einzelnen Zitat wird.
Ergebnisarray (Suchstil)
Tools, die mehrere Elemente zurückgeben, geben in der Regel ein Array unter einem (oder einem results entsprechenden) Schlüssel zurück, wie im folgenden Beispiel gezeigt.
{
"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"
}
]
}
Das folgende Beispiel zeigt eine Minimale Antwortsemantikkonfiguration im Plug-In-Manifest.
"capabilities": {
"response_semantics": {
"data_path": "$.results",
"properties": {
"title": "$.title",
"subtitle": "$.publishedDate",
"url": "$.url"
}
}
}
Die data_path -Eigenschaft zeigt auf das Array. Jedes Element erzeugt ein eigenes klickbares Zitat. Die properties JSONPaths werden relativ zu jedem Arrayelement aufgelöst, nicht zum Stamm.
Einzelnes Objekt (Fetch-Style)
Das folgende Beispiel zeigt eine Antwort mit genau einem Datensatz - einem Dokument, einer Entität und einer Datei -, die als eine Quelle zitiert werden soll.
{
"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" }
}
Das folgende Beispiel zeigt eine Minimale Antwortsemantikkonfiguration im Plug-In-Manifest.
"capabilities": {
"response_semantics": {
"data_path": "$",
"properties": {
"title": "$.title",
"subtitle": "$.publishedDate",
"url": "$.url"
}
}
}
Die data_path auf $ festgelegte Eigenschaft wählt das Stammobjekt als einzelnes Zitatelement aus. Dies ist die richtige Wahl, wenn das Tool einen Datensatz zurückgibt , auch wenn der Datensatz geschachtelte Felder wie metadataenthält.
MCP-Inhaltswrapper
MCP-Tools umschließen ihre Antwort in einem content Array von TextContentBlock Elementen. Copilot analysiert das text Feld jedes Blocks als JSON und wendet dann ihren data_path auf den analysierten Wert an. Die Form innerhalb der text Zeichenfolge steuert Ihre Konfiguration , nicht den äußeren content Wrapper.
MCP-Beispielantwort
{
"content": [
{
"type": "text",
"text": "{\"id\":\"tr-001\",\"title\":\"Forecasting AI adoption in the enterprise (2026)\",\"url\":\"https://www.treyresearch.net/notes/ai-adoption-2026\"}"
}
]
}
Der Parser entpackt zuerst die text Nutzlast und hinterlässt ein einzelnes Objekt. Sie verwenden die Konfiguration eines einzelnen Objekts ("data_path": "$"). Ein MCP-Suchtool, das ein Array innerhalb des text Felds zurückgibt, verwendet das Array der Ergebniskonfiguration (data_path: "$.results").
Dynamische Antwortsemantik (Zero-config-Fallback)
Explizit response_semantics funktioniert nur gut, wenn Ihre Tools stabil und unveränderlich sind. Das ist oft nicht der Fall: Ein Connector, der auf einem MCP-Server eines Drittanbieters basiert, aktualisiert häufig seine Tools, sodass Sie das Manifest bei der Weiterentwicklung des Servers synchron halten müssen. Wenn sich der Server ändert, das Manifest jedoch nicht, greift das strukturierte Erding im Hintergrund auf unformatierten Text zurück, und Zitate beenden das Rendern.
Wenn Ihr Manifest die expliziten properties Zuordnungen auslässt, leitet Copilot Zitatfelder ab, indem jedes Ergebnisobjekt anhand einer priorisierten Liste bekannter Aliase abgeglichen wird. Dieses Nullkonfigurations-Fallback ist besonders nützlich bei der dynamischen Toolermittlung, bei der Sie ein Manifest nicht an eine feste Tooloberfläche anheften können.
Feldaliase
Für jedes Zitatfeld überprüft Copilot die folgenden Aliase in der Reihenfolge der Priorität und verwendet die erste gefundene Übereinstimmung.
| Zitatfeld | Aliase (Prioritätsreihenfolge) |
|---|---|
| URL |
display_url, displayUrl, web_url, webUrl, url, citation_url, citationUrl, reference_url, referenceUrl, website_url, websiteUrl, web_link, webLink, link, href |
| Position |
display_title, displayTitle, title, name, display_name, displayName, web_title, webTitle, subject, heading, caption |
| Untertitel |
subtitle, description, summary, snippet, source, provider, site_name, siteName, highlight |
| Miniaturansicht |
thumbnail_url, thumbnailUrl, thumbnail, image_url, imageUrl, logo_url, logoUrl, icon_url, iconUrl |
| Array von Ergebnissen |
results, items, data, value, records, entries |
Lösungsregeln
- URL ist die harte Anforderung. Wenn keine nicht leere URL gefunden wird, überspringt Copilot das Element und gibt kein Zitat aus.
- Der Titel greift auf den Hostnamen zurück , wenn kein Titelalias vorhanden ist.
- Untertitel und Miniaturansichten sind opportunistisch. Copilot schließt sie ein, wenn es ein übereinstimmende Feld erkennt und andernfalls auslässt.
Beispiel
Wenn Ihr MCP-Tool die folgende Antwort zurückgibt, müssen Sie nicht explizit definieren response_semantics . Copilot leitet die Zitatfelder aus den bekannten Aliasen ab.
{
"isError": false,
"content": [
{
"type": "text",
"text": "<stringified results>"
}
]
}
Das text Feld enthält die Zeichenfolgenergebnisse:
{
"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"
}
]
}
Da results, , titleurlund subtitle alle mit bekannten Aliasen übereinstimmen, rendert Copilot für jedes Element ein klickbares Zitat. Alle entsprechenden Aliase funktionieren an ihrer Stelle, items z. B. oder data anstelle von resultsoder webUrl oder href anstelle von url.
Zitateigenschaften
Die folgenden Eigenschaften sind für Zitate verfügbar. Alle Werte sind relative JSONPath-Ausdrücke für ein von data_pathausgewähltes Element.
| Eigenschaft | Erforderlich | Funktion der Einstellung |
|---|---|---|
title |
Ja (praktisch) | Die klickbare Überschrift des Zitats. |
subtitle |
Nein | Zweite Zeile : Datumsangaben, Autoren, Kategorien. |
url |
Ja (praktisch) | Wo das Zitat beim Klicken navigiert wird. Muss ein kanonischer Link zurück zu Ihrer Quelle sein. |
thumbnail_url |
Nein | Kleines Bild neben dem Zitat. |
Hinweis
Wenn url fehlt, kann nicht auf das Zitat geklickt werden. Diese fehlende Eigenschaft ist ein sehr häufiger Grund, warum Entwickler nicht funktionale Zitate sehen.
Einstellung data_path
Die data_path -Eigenschaft ist ein JSONPath-Ausdruck (RFC 9535). Die Verwendung eines falschen JSONPath-Ausdrucks ist einer der häufigsten Gründe, warum Zitate nicht angezeigt werden.
| Wenn Ihre Antwort wie folgt aussieht: | Verwenden Sie data_path |
|---|---|
{ "results": [ ... ] } |
$.results |
{ "content": [ { "results": [ ... ] } ] } (MCP-Stil geschachtelt) |
$.content[0].results |
| Ein einzelnes Objekt am Stamm (kein Arraywrapper) | $ |
{ "content": [ { "type": "text", "text": "<stringified JSON>" } ] } (raw MCP) |
$ für root oder $.results , wenn der innere JSON-Code über ein Array verfügt |
Tipp
Vereinfachen Sie Ihre Arrays. Geschachtelte Arrays mit mehreren Ebenen (z. B. ) sind das Schemamuster, $.content[0].results[0].itemsdas am wahrscheinlichsten im Hintergrund fehlschlägt. Wenn Sie das Toolantwort-Shape besitzen, geben Sie ein flaches results: [...] Array zurück.
Geht über die Antwortsemantik hinaus
Erwägen Sie als erste Einstellung,Ihrem Agent umfangreiche UI-Widgets hinzuzufügen. Dieser Ansatz ist zukunftsfähiger und KI-nativer und ermöglicht intelligentere, adaptivere und nahtlose Interaktionen.
Fügen Sie als letztes Mittel eine adaptive Karte hinzu , wenn Sie eine der folgenden Bedingungen benötigen:
- Ein benutzerdefiniertes visuelles Layout allein für das Zitat (mehrspaltige, Bildbanner, formatierte Textblöcke) oder mehrere Felder, die im Zitat Karte Textkörper gerendert werden (über Titel, Untertitel und URL hinaus).
-
Aktionsschaltflächen , die über das Standardverhalten "Klick auf das Zitat" hinausgehen (z. B
Action.Execute. , Symbolleisten mit mehreren Schaltflächen).
Für die überwiegende Mehrheit der Zitatszenarien – "Zeige mir die Quelle und lass mich mich durchklicken" – überspringen Sie adaptive Karten vollständig. Sie erhöhen die Komplexität, sind schwieriger zu debuggen, und die Standardbenutzeroberfläche für Zitate ist sauber und konsistent mit dem Rest von Copilot.
Beispiel mit adaptiver Karte
"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}"
}
}
}
Beachten Sie die ${title}Token , ${subtitle}und ${url} – diese Token werden von der oben properties gezeigten Zuordnung aufgefüllt. Die adaptive Karte ist eine Präsentationsschicht über der Antwortsemantik. sie wird nicht ersetzt.
Checkliste zur Problembehandlung
Wenn keine Zitate angezeigt werden, verwenden Sie die folgende Checkliste.
- Zeigt
data_pathauf den richtigen Knoten? Fügen Sie die unformatierte JSON-Antwort Ihres Tools in einen JSONPath-Tester ein, und vergewissern Sie sich, dass Ihr Ausdruck das erwartete Array oder Objekt zurückgibt. - Verfügt jedes Element über ein nicht leeres
urlElement? Fehlende URLs führen zu nicht klickbaren Zitaten. - Ist das
textFeld für MCP-Tools inTextContentBlockgültigem JSON-Code enthalten? Analysieren Sie sie zur Bestätigung manuell. - Ist das Schema flach? Wenn Sie tief geschachtelte Arrays haben, versuchen Sie, ein einzelnes flaches Array zurückzugeben.
- Haben Sie pro Funktion (innerhalb dieser Funktion
capabilitiesim Plug-In-Manifest) und nicht am Plug-In-Stamm deklariertresponse_semantics? Sie müssen den Bereich auf die Funktion festlegen.