自訂 Model Context Protocol (MCP) 資料儲存庫的引用資訊對應,可讓您在 Gemini Enterprise 使用自訂 MCP 伺服器上的工具回答問題時,顯示來源引用資訊方塊。由於每個 MCP 伺服器都會以自己的 JSON 結構傳回結果,您可以使用 Discovery Engine REST API 設定 citation_mappings 動作參數,指定每個工具的回應中,各項結果的連結、標題、摘要和 ID 儲存位置。
您只能使用 v1 REST API 設定 citation_mappings。 Google Cloud 控制台不提供這項參數。
事前準備
為自訂 MCP 資料儲存庫設定引用來源對應前,請務必完成下列必要條件:
- 建立自訂 MCP 伺服器資料儲存庫,並啟用其動作。詳情請參閱「設定自訂 MCP 伺服器資料儲存庫」。
- 確認您具備 Discovery Engine 編輯者或 Gemini Enterprise 管理員角色。
- 取得自訂 MCP 資料儲存庫的集合 ID (
COLLECTION_ID)。自訂 MCP 資料儲存庫的 ID 為COLLECTION_ID_mcp_data,因此您可以從 Google Cloud 控制台取得資料儲存庫 ID,並移除_mcp_data後置字串,而不必呼叫collectionsAPI。如要進一步瞭解如何找出資料儲存庫的集合 ID,請參閱「取得資料儲存庫和實體詳細資料」。
引用對應的運作方式
Gemini Enterprise 呼叫自訂 MCP 伺服器上的工具來回答使用者問題時,答案可能會顯示引用資訊方塊 (小型資訊卡,可將答案中的論述連結至來源文件)。引用方塊與內嵌 Markdown 連結不同,後者是模型根據指令在答案文字中生成的連結。
為建立引用資料方塊,Gemini Enterprise 會從工具傳回的每項結果中,擷取最多四個欄位:連結 (uri)、標題 (title)、簡短文字摘錄 (snippet) 和來源 ID (id)。您可以使用下列概念,定義這些欄位在各工具回覆中的位置:
- 工具:MCP 伺服器公開的單一函式,以裸名識別,例如
search_docs。 - 工具回覆:工具針對單一呼叫傳回的 JSON 酬載。
- Item:工具回覆中的單一結果物件。每個項目都會成為一項引用。
- Role:JSON 指標填入的引用欄位:
items、uri、title、snippet或id。 - JSON 指標:RFC 6901 標準化的路徑字串,用於從 JSON 文件中選取值。例如,
/results會選取results欄位,而/author/name會選取author內的name。
citation_mappings 參數的結構
citation_mappings 參數是 JSON 物件。每個鍵都是工具名稱,每個值都是將引用角色對應至 JSON 指標的物件。
items 指標會從工具回覆的根目錄找出結果清單。其餘四個指標 (uri、title、snippet 和 id) 則是相對於個別項目進行評估,而非從工具回覆的根目錄開始。在實務上,uri 和 title 對使用者看到的內容影響最大,且必須提供 uri。
下表說明工具對應物件中支援的各個角色:
| 角色 | 指向 | 讀取來源 | 省略時的行為 |
|---|---|---|---|
items |
結果清單 | 工具回覆 |
系統會使用常見的欄位名稱 (例如 results、items、documents 或 content) 自動找出清單。 |
uri |
引用內容方塊開啟的連結 | 每項 |
這是必要旗標,每個涵蓋的工具都必須直接或透過預設項目 ("") 提供 uri。 |
title |
引用方塊中顯示的標題 | 每項 | 引用內容方塊會顯示 Untitled。 |
snippet |
引用方塊上顯示的簡短文字 | 每項 |
系統會自動從項目的常見欄位中選取摘要,例如 snippet、text、description 或 summary。 |
id |
來源的固定 ID | 每項 | 系統會使用 uri 值做為 ID。 |
引用內容對應範例
假設名為 search_docs 的工具傳回下列 JSON 酬載:
{
"results": [
{
"doc_id": "kb-1042",
"name": "Expense policy 2026",
"link": "https://intranet.cymbal.com/kb/1234",
"summary": "Meals are reimbursed up to 60 USD per day."
}
]
}
下列 citation_mappings 設定會將 search_docs 的欄位對應至引用內容方塊:
{
"search_docs": {
"items": "/results",
"uri": "/link",
"title": "/name",
"snippet": "/summary",
"id": "/doc_id"
}
}
在這個範例中,/results 會找出項目清單,並從清單中的每個項目讀取 /link、/name、/summary 和 /doc_id。產生的引用方塊會顯示 Expense policy 2026、連結至 https://intranet.cymbal.com/kb/1234,並顯示摘要做為摘要。
如果多個工具傳回相同形式的結果,您可以定義預設項目 (""),並視需要覆寫特定角色:
{
"": {
"items": "/results",
"uri": "/link",
"title": "/name"
},
"get_doc": {
"items": ""
}
}
在這個設定中,get_doc 會從預設項目繼承 uri (/link) 和 title (/name),並將 items 覆寫為 "",因為 get_doc 會傳回單一文件物件,而不是 /results 下方的清單。
工具重要規則
citation_mappings 中的工具金鑰適用下列規則:
- 使用不含前置字元的工具名稱:請按照 MCP 伺服器宣告的名稱指定工具,不含伺服器或連接器前置字元。
- 預設項目 (
""):空白鍵""定義的預設對應關係,適用於連接器上的所有工具。具名工具項目會逐一覆寫預設項目。舉例來說,如果工具項目只設定uri,則會從預設項目繼承items、title、snippet和id。 - 未對應的工具:如果沒有預設項目 (
""),任何沒有具名項目的工具都不會涵蓋在對應中。 - 項目數量上限:
citation_mappings最多支援 101 個項目 (最多 100 個具名工具,加上""預設項目)。
JSON 指標評估規則
citation_mappings 中的 JSON 指標遵循 RFC 6901。編寫指標時,請注意下列規則:
- 空白指標 (
""):空白字串""是指整個 JSON 文件或項目。如果是items,當工具回覆本身是項目清單或單一結果物件時,請使用""。 - 開頭斜線 (
/):每個非空指標都必須以/開頭,長度上限為 512 個字元。舉例來說,/results有效,results則無效。 - 陣列索引:非負整數會選取以零為基準的清單位置。例如,
/links/0/href會選取links中第一個元素的href欄位。 - 逸出字元:欄位名稱中的兩個字元必須逸出:
/寫成~1,~寫成~0。例如,將常值「a/b」寫入為「/a~1b」。 - 完全比對,區分大小寫:指標比對必須完全相符,且區分大小寫。除了
snippet之外,如果指標與欄位不符,Gemini Enterprise 不會猜測其他欄位:- 如果未命中
title分球,引用方塊會顯示Untitled。 - 如果個別項目缺少
uri指標,表示該項目仍用於生成答案,但不會顯示該項目的引用連結。 - 如果找不到
snippet指標,系統會自動從項目的常見欄位中選取摘要。
- 如果未命中
- 單一物件
items:如果items解析為 JSON 物件而非清單,Gemini Enterprise 會將該物件視為單一結果項目。 - 自動備用:如果對應找不到可用的呼叫,例如
items指標沒有相符項目,或沒有結果項目具有uri,對應就會停止,Gemini Enterprise 會改用自動回應處理機制處理該回應。
MCP 回應包裝函式的處理方式
items 指標的寫法取決於 MCP 伺服器如何設定工具回應的格式:
- 文字區塊內序列化的 JSON:許多 MCP 伺服器會將 JSON 以字串形式傳回文字內容區塊 (
{"content": [{"type": "text", "text": "..."}]})。text欄位必須包含有效的序列化 JSON 字串。Gemini Enterprise 會先解碼該 JSON 字串,因此您要針對工具傳回的解碼 JSON 編寫指標,而不是針對外部content包裝函式。如果工具傳回非結構化純文字 (例如原始 Markdown 或任意形式字串),JSON 指標就無法評估,citation_mappings也不會擷取引用內容方塊。 - 結構化內容:如果 MCP 工具傳回結構化內容,指標會指向頂層 MCP 結果物件。如要存取
structuredContent內的清單,請在指標中加入/structuredContent,例如/structuredContent/results。當items為""且structuredContent.result為物件時,項目指標 (uri、title、snippet和id) 會根據structuredContent.result本身解析。例如,單一物件工具可以使用/url,而非/structuredContent/result/url。
設定或更新引用對應
如要在自訂 MCP 資料儲存庫上設定 citation_mappings,請呼叫 v1 API 中的 updateDataConnector 方法,並將 updateMask 查詢參數設為 action_config.action_params。
執行更新要求前,請留意下列行為:
- 整個對應關係都會被取代:傳送
citation_mappings會覆寫對應關係中所有現有的工具項目。如要新增或修改單一工具,請傳送完整的citation_mappings物件,並附上變更內容。如果您已對應現有工具,請按照下列步驟操作:- 執行
getDataConnector(GET),並僅從actionParams複製citation_mappingsJSON 區塊。 - 在複製的區塊中,新增或修改工具的項目。
- 在
PATCH要求中傳送更新後的citation_mappings區塊。
- 執行
- 保留其他連接器參數:要求中省略的動作參數 (例如 OAuth 設定) 會保留現有值。
actionParams中只能包含citation_mappings。請勿將GET回應中的所有actionParams欄位複製到PATCH要求:在 OAuth 連接器上,GET不會傳回client_id,因此傳回GET輸出內容會失敗,並顯示Connector params must contain client_id。 - 使用窄更新遮罩:指定
updateMask=action_config.action_params。雖然系統也接受updateMask=action_config,但會重寫要求中未包含的其他actionConfig欄位。 - 變更會套用至新對話:已開啟的對話會保留原先的連接器設定。啟動新的對話工作階段,測試更新後的引用內容對應。
- 對應關係屬於單一連接器:如果刪除自訂 MCP 資料儲存庫並重新建立,重新建立的資料儲存庫不會有引用對應關係,您必須再次設定
citation_mappings。
如要設定或更新 citation_mappings,請執行下列指令:
curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-H "X-Goog-User-Project: PROJECT_ID" \
"https://ENDPOINT/v1/projects/PROJECT_NUMBER/locations/LOCATION/collections/COLLECTION_ID/dataConnector?updateMask=action_config.action_params" \
-d '{
"actionConfig": {
"actionParams": {
"citation_mappings": {
"search_docs": {
"items": "/results",
"uri": "/link",
"title": "/name"
}
}
}
}
}'
更改下列內容:
PROJECT_ID:專案 ID。ENDPOINT:資料儲存庫位置的 API 端點:discoveryengine.googleapis.com適用於global位置us-discoveryengine.googleapis.com適用於us多區域eu-discoveryengine.googleapis.com適用於eu多區域
PROJECT_NUMBER: Google Cloud 專案的編號。LOCATION:資料儲存庫的位置 (global、us或eu)。COLLECTION_ID:自訂 MCP 資料儲存庫所在集合的 ID。
如要確認更新是否成功,請參閱「驗證引用項目對應」。
查看引用內容對應
如要讀取自訂 MCP 資料儲存庫目前的引用資料對應,請在資料連接器資源上呼叫 getDataConnector 方法:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "X-Goog-User-Project: PROJECT_ID" \
"https://ENDPOINT/v1/projects/PROJECT_NUMBER/locations/LOCATION/collections/COLLECTION_ID/dataConnector"
更改下列內容:
PROJECT_ID:專案 ID。ENDPOINT:資料儲存庫位置的 API 端點:discoveryengine.googleapis.com適用於global位置us-discoveryengine.googleapis.com適用於us多區域eu-discoveryengine.googleapis.com適用於eu多區域
PROJECT_NUMBER: Google Cloud 專案的編號。LOCATION:資料儲存庫的位置 (global、us或eu)。COLLECTION_ID:自訂 MCP 資料儲存庫所在集合的 ID。
在回應中,設定的對應會顯示在 actionConfig.actionParams.citation_mappings 下方。如果未設定任何對應,包括在傳送 "citation_mappings": {} 後,回應會完全省略 actionConfig.actionParams 中的 citation_mappings,而不是傳回 {}。
驗證引用內容對應
設定或更新引用資訊對應後,請檢查是否正常運作:
- 按照「查看引用對應」一節所述呼叫
getDataConnector,並確認對應關係顯示在actionConfig.actionParams.citation_mappings下方。 - 在 Gemini Enterprise 發起新對話。已開啟的即時通訊會保留原先的連接器設定。
- 提出問題,讓代理呼叫其中一項對應工具。
- 在對話回覆中,查看工具執行指標或資訊卡 (例如「顯示思考過程」下方),確認代理叫用了對應的工具。如果模型根據自身知識回答,未呼叫工具,就不會顯示引用內容方塊。
- 確認答案顯示的引用資訊方塊包含預期的標題、說明或摘要和連結。
如果未顯示引用晶片,請參閱「排解引用對應問題」。
移除引用資料對應
如要從自訂 MCP 資料儲存庫中移除所有引用資料對應,請在 actionConfig.actionParams 中傳送空白物件 ("citation_mappings": {}):
curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-H "X-Goog-User-Project: PROJECT_ID" \
"https://ENDPOINT/v1/projects/PROJECT_NUMBER/locations/LOCATION/collections/COLLECTION_ID/dataConnector?updateMask=action_config.action_params" \
-d '{
"actionConfig": {
"actionParams": {
"citation_mappings": {}
}
}
}'
更改下列內容:
PROJECT_ID:專案 ID。ENDPOINT:資料儲存庫位置的 API 端點:discoveryengine.googleapis.com適用於global位置us-discoveryengine.googleapis.com適用於us多區域eu-discoveryengine.googleapis.com適用於eu多區域
PROJECT_NUMBER: Google Cloud 專案的編號。LOCATION:資料儲存庫的位置 (global、us或eu)。COLLECTION_ID:自訂 MCP 資料儲存庫所在集合的 ID。
排解引用內容對應問題
如果 API 拒絕引用項目對應,或引用項目方塊未如預期顯示,請檢查下列驗證錯誤和常見問題。
驗證錯誤
格式錯誤的對應會遭到拒絕,並顯示 400 INVALID_ARGUMENT 錯誤。錯誤訊息會指出發生錯誤的工具和角色:
| 錯誤訊息 (簡短) | 原因和解決方法 |
|---|---|
must be an object mapping each tool name to its citation field
pointers
|
citation_mappings 不是 JSON 物件。確認 citation_mappings 的值是 JSON 物件 ({...})。 |
declares N tools, more than the supported maximum of
101
|
對應項目過多。請減少項目數量,最多只能有 100 個具名工具和預設項目 ("")。 |
entry for tool "TOOL_NAME" must be an object mapping
citation role to JSON Pointer
|
工具的值不是 JSON 物件。將每個工具名稱對應至包含角色對指標鍵/值組合的物件。 |
entry for tool "TOOL_NAME" has unknown citation role
"ROLE"
|
角色名稱拼寫錯誤,例如 titel 而非 title。有效角色為 items、uri、title、snippet 和 id。 |
role "ROLE" on tool "TOOL_NAME" must be a
string JSON Pointer
|
指標值不是字串。將每個 JSON 指標值格式化為 JSON 字串。 |
exceeds the maximum pointer length of 512 characters
|
JSON 指標過長。請將指標縮短至 512 個半形字元以內。 |
is not a valid RFC 6901 JSON Pointer
|
非空白指標缺少開頭的 /,或含有無效的 ~ 逸出序列。請使用 ~0 處理 ~,並使用 ~1 處理 /。
|
entry for tool "TOOL_NAME" declares no "uri"
role
|
具名工具項目和預設項目 ("") 都未指定 uri 指標。在工具項目或預設項目中新增 uri 角色。 |
Data Connector parameters must be one of: ... but got:
citation_mapping
|
actionParams 中的參數名稱拼寫錯誤。使用 citation_mappings。 |
常見問題
如果對應儲存時未發生錯誤,但未顯示引用資料方塊,或顯示非預期的值,請檢查下列常見錯誤:
- 從回應根目錄寫入項目指標:
items選取結果清單後,系統會讀取與單一項目相關的角色指標 (uri、title、snippet和id)。請指定/link,而非/results/0/link。 - 工具名稱前置字串:請勿在工具名稱前加上 MCP 伺服器名稱或連接器名稱。使用 MCP 伺服器宣告的裸工具名稱。
- 在更新中只傳送變更的工具:更新
citation_mappings會取代整個對應物件。修改某個工具的對應關係時,請一併加入要保留的所有其他工具項目。 - 在現有對話中測試:更新後的對應關係只會套用至新對話。更新
citation_mappings後,請啟動新的對話工作階段。 - 混淆引用方塊和內嵌連結:模型根據指令寫入答案文字的 Markdown 連結,與
citation_mappings控制的來源引用方塊不同。