本教學課程說明如何使用 Google Cloud 控制台,在 AlloyDB for PostgreSQL 中設定及使用 QueryData,並與應用程式整合。瞭解如何建構脈絡資料集檔案、建立使用脈絡資料集檔案的脈絡資料集、使用 MCP Toolbox 呼叫 Conversational Analytics API 中的 QueryData 方法,為自然語言問題生成 SQL 查詢,並將其整合至應用程式。
詳情請參閱「QueryData 總覽」。
目標
- 建立資料庫並填入資料。
- 使用脈絡工程代理建構脈絡資料集檔案。
- 建立脈絡資料集並上傳脈絡資料集檔案。
- 在 AlloyDB Studio 測試 QueryData 並生成 SQL 查詢。
- 使用 MCP Toolbox 中的 Gemini 資料分析 QueryData 工具,將 QueryData 整合至應用程式。
- 使用值搜尋查詢,為 LLM 回覆建立基準。
費用
在本文件中,您會使用下列 Google Cloud計費元件:
如要根據預測用量估算費用,請使用 Pricing Calculator。
初次使用 Google Cloud 的使用者可能符合免費試用期資格。
完成本文所述工作後,請刪除建立的資源,避免繼續計費。詳情請參閱「清除所用資源」一節。
事前準備
建立情境集前,請先完成下列前置作業。
啟用必要服務
為專案啟用下列服務:準備 AlloyDB for PostgreSQL 叢集、執行個體和資料庫
請確認您有權存取現有的 AlloyDB 叢集和執行個體,或建立新的叢集和執行個體。本教學課程需要 AlloyDB 執行個體中有資料庫。 詳情請參閱「建立資料庫」。
必要角色和權限
- 在資料庫層級將 Identity and Access Management (IAM) 使用者或服務帳戶新增至叢集。詳情請參閱「管理資料庫使用者」。
- 在專案層級將
alloydb.databaseUser、serviceusage.serviceUsageConsumer和geminidataanalytics.queryDataUser角色授予 IAM 使用者。詳情請參閱「新增專案的 IAM 政策繫結」。 - 如要建立、上傳及管理內容集,請在專案層級將 Dataplex Catalog 編輯者 (
roles/dataplex.catalogEditor) 或 Dataplex Catalog 管理員 (roles/dataplex.catalogAdmin) 角色授予 IAM 使用者。詳情請參閱「情境集權限」。
授予 AlloyDB for PostgreSQL 執行個體 executesql 權限
如要將 executesql 權限授予 AlloyDB for PostgreSQL 執行個體,並將 data_api_access 執行個體設定設為 ALLOW_DATA_API 值,請使用下列 curl 指令:
curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
https://alloydb.googleapis.com/v1alpha/projects/PROJECT_ID/locations/LOCATION/clusters/CLUSTER_ID/instances/INSTANCE_ID?updateMask=dataApiAccess \
-d '{
"dataApiAccess": "ENABLED",
}'
PROJECT_ID:專案的 ID。 Google CloudLOCATION:AlloyDB 叢集所在的區域。CLUSTER_ID:AlloyDB 叢集的 ID。INSTANCE_ID:AlloyDB 執行個體的 ID。
建立 flights 和 airports 結構定義和資料表
在本節中,您將為本教學課程建立 flights 和 airports 資料庫表格。
前往 Google Cloud 控制台的 AlloyDB 頁面。
從清單中選取叢集。
在導覽選單中,按一下「AlloyDB Studio」。
使用 Identity and Access Management 驗證機制登入 Studio。
按一下「驗證」。「Explorer」窗格會顯示資料庫中的物件清單。
點選「開啟新的 SQL 編輯器分頁」或「新增分頁」,開啟新分頁。
如要建立
airports資料表和結構定義,請執行下列 SQL 陳述式:CREATE TABLE IF NOT EXISTS airports ( id INT PRIMARY KEY, iata TEXT, name TEXT, city TEXT, country TEXT );建立
flights資料表和結構定義:CREATE TABLE IF NOT EXISTS flights ( id INT PRIMARY KEY, airline VARCHAR(10), flight_number INT, departure_airport VARCHAR(5), arrival_airport VARCHAR(5), departure_time TIMESTAMP, arrival_time TIMESTAMP, departure_gate VARCHAR(10), arrival_gate VARCHAR(10) );
填入 flights 和 airports 資料表
在本節中,您將使用提供的 SQL 指令碼填入 flights 和 airports 資料表。
填入
airports資料表。填入
flights資料表。執行下列查詢,確認資料表已填入資料:
SELECT * FROM "public"."flights" LIMIT 10; SELECT * FROM "public"."airports" LIMIT 10;
在 AlloyDB Studio 建立脈絡資料集
在本節中,請建立名為 flights-assistant 的內容集。這個情境組合不含任何上傳的情境組合檔案。
前往 Google Cloud 控制台的「AlloyDB」頁面。
從清單中選取叢集。
在導覽選單中,按一下「AlloyDB Studio」。
使用 IAM 驗證機制登入 Studio。
在「Explorer」窗格中,按一下「Context sets」旁邊的「更多動作」圖示 ()。
按一下「建立內容集」。
在「脈絡資料集名稱」中輸入
flights-assistant。點選「建立」。
在 Studio 中測試 QueryData
在本節中,您將使用 flights-assistant 設定的背景資訊,透過自然語言問題生成 SQL 查詢。由於脈絡資料集未上傳任何脈絡資料集檔案,即使提出 nighttime traffic 等脈絡問題,QueryData 生成的查詢仍不盡理想。
flights-assistant 代理提問,例如「飛往迪士尼世界的航班」,測試代理能否推論出正確的抵達城市。
- 在「Explorer」窗格中,按一下內容集旁邊的「更多動作」圖示 ()。
- 按一下「測試脈絡資料集」。
- 在查詢編輯器中,點選「使用 QueryData 生成 SQL 查詢,並搭配:flights-assistant」。
輸入下列自然語言問題來生成 SQL 查詢,然後點選「生成」。
Find flights from SFO to JFK.查看 SQL 查詢。請注意,QueryData 會針對這個明確的問題生成正確的 SQL。
SELECT * FROM "flights" WHERE "departure_airport" = 'SFO' AND "arrival_airport" = 'JFK';在「使用 QueryData 生成 SQL 查詢:flights-assistant」視窗,點選「編輯」。
輸入下列自然語言問題來生成 SQL 查詢,然後點選「更新」。
Tell me flights that can help me beat nighttime traffic if traveling from New York資料庫無法理解「
nighttime流量」一詞。這可能會導致系統無法生成 SQL 查詢,或生成忽略該字詞的查詢,如下列查詢所示。-- The database schema does not contain information about traffic. -- Returning all flights departing from New York airports. SELECT f.airline, f.flight_number, a.name AS departure_airport_name, f.departure_time, b.name AS arrival_airport_name, f.arrival_time FROM flights AS f JOIN airports AS a ON f.departure_airport = a.iata JOIN airports AS b ON f.arrival_airport = b.iata WHERE a.city = 'New York' ORDER BY f.departure_time;在「使用 QueryData 生成 SQL 查詢:flights-assistant」視窗,點選「編輯」。
輸入下列自然語言問題來生成 SQL 查詢,然後點選「更新」。
flight to disney world情境集邏輯會產生查詢,尋找名稱中含有「disney world」的機場。由於資料庫中沒有這類機場或城市,查詢不會傳回任何資料列。
SELECT "flights"."id", "flights"."airline", "flights"."flight_number", "flights"."departure_airport", "flights"."arrival_airport", "flights"."departure_time", "flights"."arrival_time", "flights"."departure_gate", "flights"."arrival_gate" FROM "flights" INNER JOIN "airports" ON "flights"."arrival_airport" = "airports"."iata" WHERE "airports"."name" ILIKE '%Disney World%';
生成脈絡資料集的脈絡
在本節中,您將準備環境並建立結構定義檔案,提升結構定義集的查詢功能。
設定環境
開始產生內容前,請先準備環境。
如要設定環境,請按照下列步驟操作:
- 安裝 Antigravity CLI。詳情請參閱「開始使用 Antigravity CLI」。
- 安裝 Google Cloud CLI。
設定應用程式預設憑證 (ADC)。在終端機中執行下列指令,進行驗證並選取專案:
gcloud auth application-default login安裝
uv,這是 Python 套件和專案管理工具,也是脈絡工程代理的必要條件。如果系統上沒有 Python,uv可以為您安裝。-
agy plugin install https://github.com/GoogleCloudPlatform/db-context-enrichment/tree/main/plugin 在終端機啟動 Antigravity CLI。
agy使用 MCP Toolbox 設定資料庫連線,以便生成背景資訊。連線定義在
tools.yaml設定檔中。如要在目前目錄中建立
tools.yaml設定檔,請輸入類似以下的提示:Help me set up a database connection.按照技能提供的指示操作。如要進一步瞭解
tools.yaml檔案,請參閱 MCP Toolbox 說明文件。建立
tools.yaml檔案後,請在 Antigravity CLI 執行下列指令,並按照指示重新載入 Toolbox MCP 伺服器,重新載入設定:/mcp選取「
db-context-engineering_toolbox」。選取「
Restart」。
確認 MCP 工具箱和情境工程代理外掛程式已連線,可供使用。
/mcp
生成範本背景資訊
在上一節中,QueryData 無法辨識「nighttime traffic」一詞。為解決這個問題,請在本節的內容集檔案中,將該詞定義為 5:00 PM 到 7:00 PM 之間的流量。
如要生成範本內容,請按照下列步驟操作:
在 Antigravity CLI 輸入下列提示詞:
Generate a template for the question: "Tell me flights that can help me beat nighttime traffic if traveling from New York" with the following SQL query: SELECT f.airline, f.flight_number, a.name AS airport_name, f.departure_time FROM flights f JOIN airports a ON f.departure_airport = a.iata WHERE a.city = 'New York' AND ( EXTRACT(HOUR FROM f.departure_time) < 17 OR EXTRACT(HOUR FROM f.departure_time) >= 19 ) ORDER BY f.departure_time;代理會將輸入內容轉換為特定格式,提升脈絡集在各種使用者查詢中的成效。詳情請參閱「情境組合總覽」。
查看生成的查詢範本。您可以將查詢範本儲存為新的代理結構定義檔案,或附加至現有的代理結構定義檔案。
提示代理儲存範本:
Save it to context_set.json.代理會在同一個目錄中建立檔案,並加入以下內容:
{ "templates": [ { "nl_query": "Tell me flights that can help me beat nighttime traffic if traveling from New York", "sql": "SELECT f.airline, f.flight_number, a.name AS airport_name, f.departure_time FROM flights f JOIN airports a ON f.departure_airport = a.iata WHERE a.city = 'New York' AND (EXTRACT(HOUR FROM f.departure_time) < 17 OR EXTRACT(HOUR FROM f.departure_time) >= 19) ORDER BY f.departure_time;", "intent": "Tell me flights that can help me beat nighttime traffic if traveling from New York", "manifest": "Tell me flights that can help me beat nighttime traffic if traveling from a given city", "parameterized": { "parameterized_sql": "SELECT f.airline, f.flight_number, a.name AS airport_name, f.departure_time FROM flights f JOIN airports a ON f.departure_airport = a.iata WHERE a.city = ? AND (EXTRACT(HOUR FROM f.departure_time) < 17 OR EXTRACT(HOUR FROM f.departure_time) >= 19) ORDER BY f.departure_time;", "parameterized_intent": "Tell me flights that can help me beat nighttime traffic if traveling from ?" } } ] }
生成值搜尋內容
在本節中,您將產生值搜尋內容,協助內容集邏輯將值片語對應至資料庫欄中儲存的特定值。舉例來說,如果使用者詢問「前往迪士尼世界的航班」,值搜尋功能可以根據資料庫中與 airports.city 欄相關的概念類型,將這項要求對應至「奧蘭多」市的迪士尼世界。
如要產生值搜尋內容,請按照下列步驟操作:
在代理測試工具中輸入下列提示詞:
輸入
postgresql,選取 AlloyDB 做為資料庫引擎。輸入值搜尋設定,如下所示:
Generate a value search on table "airports" for column "city" with concept "Airport City" using match function "SEMANTIC_SIMILARITY_MATCH".查看產生的值搜尋定義。您可以將值搜尋定義儲存為新的情境集檔案,或附加至現有的情境集檔案。
對代理下達
Append the context to context_set.json提示詞。這會將值搜尋定義新增至先前建立的結構定義檔案。輸入資料庫執行個體和資料庫名稱,也就是產生情境集檔案的資料庫。
現有的結構定義檔案會更新為值搜尋定義,內容如下:
{ "templates": [ { "nl_query": "Tell me flights that can help me beat nighttime traffic if traveling from New York", "sql": "SELECT f.airline, f.flight_number, a.name AS airport_name, f.departure_time FROM flights f JOIN airports a ON f.departure_airport = a.iata WHERE a.city = 'New York' AND (EXTRACT(HOUR FROM f.departure_time) < 17 OR EXTRACT(HOUR FROM f.departure_time) >= 19) ORDER BY f.departure_time;", "intent": "Tell me flights that can help me beat nighttime traffic if traveling from New York", "manifest": "Tell me flights that can help me beat nighttime traffic if traveling from a given city", "parameterized": { "parameterized_sql": "SELECT f.airline, f.flight_number, a.name AS airport_name, f.departure_time FROM flights f JOIN airports a ON f.departure_airport = a.iata WHERE a.city = $1 AND (EXTRACT(HOUR FROM f.departure_time) < 17 OR EXTRACT(HOUR FROM f.departure_time) >= 19) ORDER BY f.departure_time;", "parameterized_intent": "Tell me flights that can help me beat nighttime traffic if traveling from $1" } } ], "value_searches": [ { "query": "/* Requires extensions: vector, google_ml_integration */ WITH SemanticMetrics AS ( SELECT T.city AS original_value, ( (google_ml.embedding('gemini-embedding-001', $value)::vector <=> google_ml.embedding('gemini-embedding-001', T.city)::vector) / 2.0 ) AS normalized_dist FROM airports T WHERE T.city IS NOT NULL) SELECT original_value AS value, 'airports.city' AS columns, 'Airport City' AS concept_type, normalized_dist AS distance, ''::text AS context FROM SemanticMetrics", "concept_type": "Airport City", "description": "Semantic search for airport city name" } ] }
將脈絡資料集檔案上傳至 QueryData
在本節中,您會將脈絡資料集檔案上傳至 QueryData,提升 QueryData 在資料庫生成 SQL 的能力。
如要上傳背景資訊,請按照下列步驟操作:
前往 Google Cloud 控制台的「AlloyDB」頁面。
從清單中選取叢集。
在導覽選單中,按一下「AlloyDB Studio」。
使用 Identity and Access Management 驗證機制登入 Studio。
在「Explorer」窗格中,按一下「Context sets」旁邊的「Actions」圖示 。
按一下「Edit context set」。
按一下「Upload context set file」部分的「Browse」,然後選取先前產生的情境集檔案。
按一下 [儲存]。
使用 QueryData 生成 SQL 查詢
在本節中,您將使用上傳的內容集檔案,以自然語言提問。這樣一來,您就能確認 QueryData 是否正確理解並套用 nighttime traffic 等字詞和其他相關詞組的定義,以及值搜尋是否將值詞組對應至儲存在資料庫資料欄中的特定值 (例如將「迪士尼世界」對應至「奧蘭多」)。
如要生成 SQL 查詢,請按照下列步驟操作:
- 在「Explorer」窗格中,點選情境集旁邊的「更多動作 ()」圖示。
- 按一下「測試脈絡資料集」。
- 在查詢編輯器中,點選「使用 QueryData 生成 SQL 查詢,並搭配:flights-assistant」。
輸入下列自然語言問題來生成 SQL 查詢,然後點選「生成」。
Tell me flights that can help me beat nighttime traffic if traveling from New York生成的 SQL 查詢大致如下:
SELECT f.airline, f.flight_number, a.name AS airport_name, f.departure_time FROM flights f JOIN airports a ON f.departure_airport = a.iata WHERE a.city = 'New York' AND ( EXTRACT(HOUR FROM f.departure_time) < 17 OR EXTRACT(HOUR FROM f.departure_time) >= 19 ) ORDER BY f.departure_time;這個問題與您新增至 QueryData 內容的問題相同。您會發現 QueryData 現在可以準確解讀「
nighttime traffic」一詞。雖然脈絡來自特定問題,但 QueryData 會使用脈絡,針對各種類似問題強化 SQL 生成作業。
在「使用 QueryData 生成 SQL 查詢:flights-assistant」視窗,點選「編輯」。
輸入下列類似問題來生成 SQL 查詢,然後點選「更新」。
What are the flights that can help me avoid evening traffic if departing from Boston由於問題將
nighttime traffic一詞替換為類似的evening traffic,QueryData 會套用相同的解讀方式,為這個問題提供一致的答案。生成的 SQL 查詢大致如下:
-- What are the flights that can help me avoid evening traffic if departing from Boston SELECT f.airline, f.flight_number, a.name AS airport_name, f.departure_time FROM flights f JOIN airports a ON f.departure_airport = a.iata WHERE a.city = 'Boston' AND ( EXTRACT(HOUR FROM f.departure_time) < 17 OR EXTRACT(HOUR FROM f.departure_time) >= 19 ) ORDER BY f.departure_time;在「使用 QueryData 生成 SQL 查詢:flights-assistant」視窗,點選「編輯」。
輸入下列問題來生成 SQL 查詢,然後點選「更新」。
flights to disney world生成的 SQL 查詢大致如下:
SELECT "flights"."id", "flights"."airline", "flights"."flight_number", "flights"."departure_airport", "flights"."arrival_airport", "flights"."departure_time", "flights"."arrival_time", "flights"."departure_gate", "flights"."arrival_gate" FROM "flights" JOIN "airports" ON "flights"."arrival_airport" = "airports"."iata" WHERE "airports"."city" = 'Orlando';請注意,QueryData 現在可以準確解讀「disney world」與「Orlando」城市相關。
將 QueryData 整合至應用程式
在本節中,您將為航班搜尋應用程式建立資料代理。這個資料代理提供對話式介面,可存取您先前建立的 flights 和 airports 資料表。此外,您也會瞭解如何使用 Agent Development Kit (ADK)、Gemini 資料分析 QueryData MCP 工具和脈絡資料集,建立這類資料代理並整合至應用程式,提升回覆品質。
下載 MCP Toolbox 1.14.0 以上版本。MCP Toolbox 會將資料代理公開為工具,供應用程式連線。MCP Toolbox 與您先前安裝的脈絡工程代理不同,後者會生成脈絡。
-
gcloud auth application-default login 找出您先前建立的內容集 ID。如要進一步瞭解如何找出內容集 ID,請參閱「找出內容集 ID」。
將下列內容附加至
tools.yaml設定,以便使用 MCP Toolbox 連線至資料代理。詳情請參閱「Gemini 資料分析來源」和「Gemini 資料分析 QueryData 工具」。--- kind: source name: gda-api-source type: cloud-gemini-data-analytics projectId: "PROJECT_ID" --- kind: tool name: cloud_gda_query_tool type: cloud-gemini-data-analytics-query source: gda-api-source description: Use this tool to send natural language queries to the Gemini Data Analytics API and receive SQL, natural language answers, and explanations. location: "REGION_ID" context: datasourceReferences: alloydb: databaseReference: projectId: "PROJECT_ID" region: "REGION_ID" clusterId: "CLUSTER_ID" instanceId: "INSTANCE_ID" databaseId: "DATABASE_ID" agentContextReference: contextSetId: "CONTEXT_SET_ID" generationOptions: generateQueryResult: true generateNaturalLanguageAnswer: true generateExplanation: true generateDisambiguationQuestion: true更改下列內容:
PROJECT_ID: Google Cloud 專案 ID。REGION_ID:AlloyDB 叢集所在的區域 (例如us-central1)。CLUSTER_ID:AlloyDB 叢集的 ID。INSTANCE_ID:AlloyDB 主要執行個體的 ID。DATABASE_ID:要連線的資料庫名稱。CONTEXT_SET_ID:脈絡資料集 ID。如要進一步瞭解如何找出情境組合 ID,請參閱「找出情境組合 ID」。
使用
tools.yaml檔案執行 MCP Toolbox 伺服器。./toolbox --config autoctx/tools.yaml建立 ADK 應用程式,使用 MCP Toolbox 的 Python SDK 叫用 Gemini 資料分析 QueryData 工具。如要進一步瞭解如何使用 MCP Toolbox 的 Python SDK,請參閱 Toolbox 快速入門導覽課程。如要瞭解 Python ADK,請參閱 ADK 快速入門導覽課程。
- 建立目錄來儲存應用程式,例如
flight-assistant-app。 將目錄變更為
flight-assistant-app目錄。mkdir flight-assistant-appcd flight-assistant-app在
flight-assistant-app目錄下執行下列指令,建立虛擬環境並安裝必要元件。uv inituv add google-adk toolbox-core google-genai設定 ADK 代理。
建立 ADK 代理。
uv run adk create my_agent選取
gemini-3.8-flash或更新的模型。選取「Google AI」,然後輸入 Gemini API 金鑰。如要進一步瞭解如何找出 API 金鑰,請參閱「使用 Gemini API 金鑰」。(或者,如果不需要免費試用,可以選取「Vertex AI」,並指定已啟用計費功能的 Google Cloud 專案)。
將
agent.py檔案的內容,替換成下列「飛航資料助理」範例應用程式程式碼。from typing import cast from google.adk.agents.llm_agent import Agent from google.adk.agents.llm_agent import ToolUnion from toolbox_core import ToolboxSyncClient TOOLBOX_URL = "http://127.0.0.1:5000" INSTRUCTION = """ # ROLE You are a friendly and factual flight data assistant. Your goal is to help users find the best flights for their needs by providing accurate information with a helpful, professional tone. - use the Query Data Tool to answer the user's question, if the tool fails to generate a valid query, ask the user to clarify their question. # OPERATIONAL CONSTRAINTS - TOOL LIMITATION: You only have access to the Query Data Tool. Do not claim to have capabilities beyond what this tool provides. - TRANSPARENCY POLICY: Maintain a seamless user experience. Never mention that you are using a tool, querying a database, or generating SQL. Frame all responses as your own direct assistance. - SCOPE MANAGEMENT: If a user asks for something beyond your capabilities, politely state that you cannot perform that specific task. Guide the user towards what you can help with. # COMMUNICATION STYLE - Be concise and scannable when listing answers. - Maintain a helpful, professional persona. ===== # QUERY DATA TOOL Inputs: 1. query: A natural language formulation of a database query. Outputs: (all optional) 1. disambiguation_question: Clarification questions or comments where the tool needs the users' input. 2. generated_query: The generated query for the user query. 3. intent_explanation: An explanation for why the tool produced `generated_query`. 4. query_result: The result of executing `generated_query`. 5. natural_language_answer: The natural language answer that summarizes the `query` and `query_result`. Usage guidance: 1. If `disambiguation_question` is produced, then solicit the needed inputs from the user and try the tool with a new `query` that has the needed clarification. 2. If `natural_language_answer` is produced, use `intent_explanation` and `generated_query` to see if you need to clarify any assumptions for the user. 3. If the tool output indicates failure or empty results, explain that clearly using the provided reasoning. """ client = ToolboxSyncClient(TOOLBOX_URL) mcp_tool = client.load_tool("cloud_gda_query_tool") root_agent = Agent( model="gemini-3.8-flash", # Or newer. name="root_agent", instruction=INSTRUCTION, tools=cast(list[ToolUnion], [mcp_tool]), )
- 建立目錄來儲存應用程式,例如
在
flight-assistant-app目錄下執行下列指令,啟動應用程式並存取 ADK 網路伺服器 (http://127.0.0.1:8000)。uv run adk web --port 8000輸入任何文字 (例如
hello),開始與代理互動。ADK 代理會回答一般問題,並呼叫必要的 MCP 工具。
輸入下列航班相關問題。
How many flights depart from the west side?系統呼叫 MCP 工具來回答這個問題。不過,由於「
the west」一詞語意不明,未指定任何機場,因此 MCP 工具會傳回消歧問題,代理會使用該問題建構回覆。I cannot determine how many flights depart from the 'west side' as the database does not contain information about which airports are considered to be on the 'west side'. However, I can help you with questions like: 1. How many flights depart from a specific airport? 2. What are the departure airports for all flights? 3. How many flights depart from each airport? Would you like to rephrase your question based on these options?輸入問題,類似為代理生成的查詢範本。
Help me find flights from San Francisco that avoid the evening rush hour.根據先前新增的 QueryData 脈絡,MCP 工具會知道
evening traffic發生在下午 5 點到 7 點之間。MCP 工具會傳回相關資料,供代理建構回覆。Here are the flights departing from San Francisco that avoid the evening rush hour (defined as 5 PM to 7 PM): * UA 1532 departing at 05:50:00 * UA 1158 departing at 05:57:00 * CY 922 departing at 06:38:00 * OO 5441 departing at 07:08:00 * UA 616 departing at 07:14:00 * AA 24 departing at 07:14:00 * B6 434 departing at 08:00:00 * AA 242 departing at 08:18:00 * UA 1739 departing at 08:22:00 * OO 6336 departing at 08:32:00 * US 1784 departing at 08:47:00 * DL 1631 departing at 09:00:00 * DL 1106 departing at 09:06:00 * OO 5427 departing at 09:06:00 * CY 352 departing at 09:25:00根據您在 QueryData 代理脈絡中新增的概念類型,輸入問題。
Get me flights to disney world根據先前新增的值搜尋脈絡,QueryData 代理程式瞭解「迪士尼世界」與「奧蘭多」市相關,並傳回相關聯的資料,供 QueryData 代理程式用於建構回覆。
Here are the flights heading to Orlando, which is the location of Disney World: * Flight UA 1249 departs from SFO and arrives at MCO on 2025-01-02 at 18:15:00Z. * Flight UA 698 departs from SFO and arrives at MCO on 2025-01-02 at 22:33:00Z. * Flight UA 292 departs from SFO and arrives at MCO on 2025-01-03 at 06:37:00Z.
反覆調整代理效能
您可以在 ADK 網頁 UI 中,查看 Gemini 資料分析 QueryData MCP 工具的要求和回應。您可以透過這項回覆觀察工具回覆,例如生成的 SQL 查詢、結果集、意圖說明、消歧問題和自然語言答案,確認代理的回覆是否正確。
舉例來說,針對您先前輸入的文字 How many flights depart from the west side?,請點選代理泡泡。在左側導覽列的「Event」(事件) 分頁中,展開 functionResponse 即可查看下列回應。
"{"disambiguationQuestion": ["[NOT_ENOUGH_INFO] The database schema does not
contain information about which airports are on the 'west side'. Therefore, I
cannot determine how many flights depart from the west side.Possible alternative
questions: 1. How many flights depart from a specific airport? 2. What are the
departure airports for all flights? 3. How many flights depart from each
airport?"]}"
提升回覆準確度
您可以新增更多背景資訊,持續提升 Gemini 資料分析 QueryData 工具的回覆準確度。使用脈絡工程代理生成脈絡,然後將更新後的脈絡資料集檔案上傳至現有的 flights-assistant 資料代理。詳情請參閱「在 AlloyDB Studio 中管理內容集」。上傳新內容後,控制台會立即擷取,讓您提升代理程式的準確度,不必擔心應用程式停機。
多個代理
在開發環境中,您可以為 tools.yaml 檔案中的工具指派不同名稱,對多個資料代理程式環境執行 A/B 測試。舉例來說,您可以定義兩個名稱不同的 cloud-gemini-data-analytics-query 工具 (例如 cloud_gda_query_tool_v1 和 cloud_gda_query_tool_v2),建立不重複的 tools.yaml 設定。透過這項設定,您可以實作應用程式邏輯,選擇對應的工具名稱,以程式輔助方式選取所需內容版本。
以下範例 tools.yaml 說明如何為資料庫來源設定多個資料代理程式:
kind: source
name: gda-api-source
type: cloud-gemini-data-analytics
projectId: PROJECT_ID
---
kind: tool
name: cloud_gda_query_tool_v1
type: cloud-gemini-data-analytics-query
source: gda-api-source
context:
datasourceReferences:
DB_SOURCE:
databaseReference: ...
agentContextReference:
contextSetId: "V1_YOUR_CONTEXT_SET_ID"
generationOptions: ...
---
kind: tool
name: cloud_gda_query_tool_v2
type: cloud-gemini-data-analytics-query
source: gda-api-source
context:
datasourceReferences:
DB_SOURCE:
databaseReference: ...
agentContextReference:
contextSetId: "V2_YOUR_CONTEXT_SET_ID"
generationOptions: ...
更改下列內容:
PROJECT_ID: Google Cloud 專案 ID。V1_YOUR_CONTEXT_SET_ID:版本 1 的情境集 ID。V2_YOUR_CONTEXT_SET_ID:版本 2 的內容集 ID。
使用 SQL 檢視表新增安全存取層
將 QueryData 與應用程式整合後,QueryData 會根據自然語言輸入內容生成 SQL 查詢。為避免這些生成的查詢存取特定使用者範圍外的資料,請實作參數化安全檢視 (PSV)。如要進一步瞭解 PSV,請參閱「參數化安全檢視區塊總覽」。
PSV 提供安全層,確保 QueryData 代理程式只能查詢目前應用程式使用者有權存取的資料列。
這個安全層包含下列項目:
- 建立參數化安全檢視。這會根據應用程式提供的身分,限制資料列層級的存取權。
- 設定應用程式的安全性。這會將檢視表的
SELECT權限和基礎結構定義的USAGE權限,授予已授權的資料庫使用者。 - 查詢參數化安全檢視。以下範例說明如何使用 SQL 語法和含有 PSV 參數的 QueryData 要求,查詢參數化安全檢視區塊。
如要瞭解如何搭配使用 PSV 和情境組合,請參閱「使用參數化安全檢視區塊保護資料代理」。
清除所用資源
完成本教學課程後,請刪除建立的資源,以免持續產生費用。以下各節說明如何刪除這些資源。
刪除脈絡資料集
刪除叢集前,請先刪除您建立的內容集。
前往 Google Cloud 控制台的 AlloyDB 頁面。
從清單中選取叢集。
在導覽選單中,按一下「AlloyDB Studio」。
使用 Identity and Access Management 驗證機制登入 Studio。
在「Explorer」窗格中,點選情境集旁邊的「更多動作」圖示 。
在「Delete context set」(刪除內容集) 視窗中,於確認方塊中輸入
flight-assistant。按一下「確認」。
刪除叢集
刪除「事前準備」一節中建立的叢集時,您建立的所有物件也會一併刪除。
前往 Google Cloud 控制台的 AlloyDB 頁面。
從清單中選取叢集。
按一下「Delete cluster」(刪除叢集)。
在「Delete cluster」(刪除叢集) 中輸入叢集名稱,確認要刪除叢集。
後續步驟
- 進一步瞭解情境組合。
- 瞭解如何定義資料庫資料來源的編寫情境。