1. 简介
从数据中获取数据洞见通常需要大量的时间、精力和深厚的 SQL 专业知识。在此 Codelab 中,您将探索 BigQuery 的智能体目录,这是一个新平台,可通过对话式数据智能体提供即时、AI 驱动的分析洞见。
您将通过创建精选数据代理,实现更高级的文本到 SQL 转换。您将了解如何通过业务背景信息、系统指令和经过验证的查询来丰富智能体,以确保获得高度准确的结果。最后,您将发布此代理,供组织中的其他用户使用。
前提条件
- 对 Google Cloud 有基本的了解
学习内容
- 如何浏览 BigQuery Agent 目录
- 如何创建自定义智能体并定义知识来源
- 如何使用 Gemini 生成语义元数据
- 如何添加系统指令和经过验证的查询来引导智能体
- 如何发布和分享智能体
所需条件
- Google Cloud 账号和 Google Cloud 项目
- 具备 BigQuery 和 SQL 的基础知识
- 网络浏览器,例如 Chrome
2. 设置和要求
选择项目
- 登录 Google Cloud 控制台,然后创建一个新项目或重复使用现有项目。如果您还没有 Gmail 或 Google Workspace 账号,则必须创建一个。



- 项目名称是此项目参与者的显示名称。它是 Google API 尚未使用的字符串。您可以随时对其进行更新。
- 项目 ID 在所有 Google Cloud 项目中是唯一的,并且是不可变的(一经设置便无法更改)。Cloud 控制台会自动生成一个唯一字符串;通常情况下,您无需关注该字符串。在大多数 Codelab 中,您都需要引用项目 ID(通常用
PROJECT_ID标识)。如果您不喜欢生成的 ID,可以再随机生成一个 ID。或者,您也可以尝试自己的项目 ID,看看是否可用。完成此步骤后便无法更改该 ID,并且此 ID 在项目期间会一直保留。 - 此外,还有第三个值,即部分 API 使用的项目编号,供您参考。如需详细了解所有这三个值,请参阅文档。
- 接下来,您需要在 Cloud 控制台中启用结算功能,以便使用 Cloud 资源/API。运行此 Codelab 应该不会产生太多的费用(如果有的话)。若要关闭资源以避免产生超出本教程范围的结算费用,您可以删除自己创建的资源或删除项目。Google Cloud 新用户符合参与 300 美元免费试用计划的条件。
3. 准备工作
为自己授予所需角色
前往项目的 IAM 页面,然后向您自己授予 Gemini Data Analytics Data Agent Owner 角色:
此角色授予您创建、修改、共享和删除项目中所有数据代理的权限。
启用所需的 API
使用侧边栏导航菜单或页面顶部的搜索菜单前往 BigQuery > 代理。
点击启用 Data Analytics API with Gemini:

同时启用 Gemini in BigQuery API 和 Gemini for Google Cloud API:

您现在应该会看到新的代理页面:

4. 创建代理
我们来使用 Google 趋势国际公共数据集创建您的第一个数据代理。此数据集可用于回答以下问题:哪些搜索字词在国际上呈热门趋势,以及这些兴趣与历史数据相比如何。
首先,请为您的智能体命名并提供简要说明。此说明仅供其他用户了解代理的用途。
代理名称
Google Trends Agent
代理说明
Data agent for the Google Trends International Top Terms public dataset
知识来源
现在,添加知识来源。知识源是指代理可用于回答问题的 BigQuery 表、视图或 UDF。
在此演示中,为简单起见,我们只添加一个表格。不过,请注意,您可以为每个代理添加最多 50 个知识源,以处理更复杂的数据场景。
在搜索框中输入下表,选中相应复选框,然后点击添加:
bigquery-public-data.google_trends.international_top_terms

结构化上下文
为了提高数据代理的准确性,请向表和列添加结构化上下文。点击Customise:

Gemini 会自动生成说明建议。点击表格说明旁边的接受:

如需将说明应用于所有列,请选中选择所有行,然后点击接受建议:

点击页面底部的更新以保存更改并返回到代理编辑器。
操作说明
在代理指令对话框中,您可以为代理提供额外的指导,以便其解读和查询数据源。其中包括:
- 同义词:关键字段的替代术语。
- 关键字段:用于分析的最重要字段。
- 排除的字段:数据代理应避免的字段。
- 过滤和分组:代理应用于对数据进行过滤和分组的字段。
- 联接关系:如何根据常用字段合并两个或更多个表。
复制并粘贴以下说明:
### System Instruction
* You are an expert data analyst for the Google Trends International public dataset.
* Always filter on yesterday's refresh_date = DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY).
* If yesterday returns no data, filter on 2 days ago's refresh_date = DATE_SUB(CURRENT_DATE(), INTERVAL 2 DAY).
* Default to country-level results (one row per term).
* "Top" queries must deduplicate snapshot rows.
* Only include week or score when the user explicitly asks for trends over time.
* This is an international dataset and does not include any data for the United States.
### Additional Descriptions
#### 1. Core model:
* refresh_date selects the daily Top-25 term set.
* week + score are historical weekly values attached to those terms.
* Filtering week does not change which terms appear.
#### 2. Deduplication rule (critical):
* Snapshot rows repeat across weeks and regions.
* For "top" queries, always GROUP BY term (country-level) and compute rank as MIN(rank).
#### 3. Defaults:
* Country-level results only.
* Use region_code only if the user explicitly asks for regions.
* Limit results unless the user asks otherwise.
#### 4. Time series usage:
* Only include week or score when the user asks for trends over time, historical context, or week-over-week score changes.
#### 5. Field guidance:
* Prefer country_code or region_code for filters.
* country_name / region_name are for display only.
* score is normalized; compare trends within a term, not across terms.
已验证的查询
经过验证的查询(之前称为“黄金查询”)可作为代理的参考,以提高回答的准确性。它们可确定代理的回答结构,并帮助代理了解您组织使用的业务逻辑。
我们来为代理添加两个示例。点击添加查询,然后复制 / 粘贴以下问题和查询:
问题 1:
What are the top search terms in the UK right now?
查询 1:
SELECT term, MIN(rank) AS rank
FROM `bigquery-public-data.google_trends.international_top_terms`
WHERE refresh_date = DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)
AND country_code = 'GB'
GROUP BY term
ORDER BY rank
LIMIT 25;
在保存此查询之前,我们先运行它,确保其有效。

我觉得不错!点击添加以保存已验证的查询。
我们再添加一个示例,以展示更复杂的用例。点击管理查询,然后添加:
问题 2:
Show the last 12 weeks of interest for the current top 5 terms in Auckland.
回答 2:
WITH top5 AS (
SELECT term, MIN(rank) AS rank
FROM `bigquery-public-data.google_trends.international_top_terms`
WHERE refresh_date = DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)
AND country_code = 'NZ'
AND region_code = 'NZ-AUK'
GROUP BY 1
ORDER BY 2
LIMIT 5
),
series AS (
SELECT term, week, score,
ROW_NUMBER() OVER (PARTITION BY term ORDER BY week DESC) AS rn
FROM `bigquery-public-data.google_trends.international_top_terms`
WHERE refresh_date = DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)
AND country_code = 'NZ'
AND region_code = 'NZ-AUK'
AND term IN (SELECT term FROM top5)
)
SELECT week, term, score
FROM series
WHERE rn <= 12
ORDER BY 1 DESC, 3
在继续学习下一部分之前,我们先来看看 Gemini 生成的建议:

您可以在此处看到一些建议的经过验证的查询。将来创建新代理时,这是一个很好的起点。只需确保验证您添加的任何查询即可!
术语库
我们来向术语库添加一个术语。如果您的企业使用 Dataplex,这些术语会直接从 Dataplex Universal Catalog 中的业务术语库导入。
点击添加字词,然后复制 / 粘贴以下示例:
期限:
refresh_date
定义:
Snapshot date that selects the daily Top 25 term set. All rows for that date belong to the same "what's trending now" snapshot. Attach Historical week and score values after this selection.
同义词:
today, latest, current, now, recent
然后依次点击“添加”和“保存”。
代理设置
在设置部分中,您可以配置标签和结算字节数上限。
标签
标签是用于将 Google Cloud 资源整理成逻辑组的键值对。为使本实验重点突出,请将标签留空。
收费字节数上限
为确保您不会意外生成任何费用高昂的查询,我们来设置每个查询的结算字节数上限。如果代理查询处理的字节数超出此限制,则查询会失败(不会产生费用)。输入以下值:
10000000000
10,000,000,000 字节约为 9.3 GB。如果您未指定值,则收费字节数上限默认为项目的每日查询使用量配额。
5. 保存和分享代理
预览
一切准备就绪!在继续之前,我们先测试一下您的代理。在屏幕右侧,您可以在修改配置的同时动态测试代理。预览会自动使用您提供的新元数据,而无需保存或发布更改。
我们来问问代理有权访问哪些数据。您可以随意用自己的话提问:

保存
测试几个提示后,保存,然后发布智能体:

发布代理后,该代理将在 BigQuery Studio、对话式分析 API 和 Looker Studio Pro 中提供(取决于许可):

我们计划在未来的版本中支持更多平台和集成。
分享
您应该会看到一条确认消息,告知您代理已发布。您现在可以与其他用户分享此代理。

与其他用户共享智能体时,您可以通过为他们分配特定角色来控制其访问权限级别。这些角色决定了协作者是只能查看您的代理,还是有权修改和管理其配置。
请务必注意,这些角色可以在两个不同的级别应用:
- 项目级:在项目级授予角色后,用户将获得相应权限,可用于该 Google Cloud 云项目中的所有 Agent。
- 代理级:如需进行更精细的控制,您可以为特定代理授予角色。如果您希望用户能够访问某个特定数据代理,但无法查看项目中的其他数据代理,此方法会非常有用。
对话式分析的预定义角色如下:
- Gemini Data Analytics Data Agent Owner (roles/geminidataanalytics.dataAgentOwner) - 创建、修改、共享和删除所有数据代理
- Gemini Data Analytics Data Agent Creator (roles/geminidataanalytics.dataAgentCreator) - 创建、修改、共享和删除您自己的数据智能体
- Gemini Data Analytics Data Agent Editor (roles/geminidataanalytics.dataAgentEditor) - 拥有对数据代理的聊天和编辑权限
- Data Analytics Data Agent User (roles/geminidataanalytics.dataAgentUser) - 拥有对数据代理的聊天和查看权限
- Gemini Data Analytics Data Agent Viewer (roles/geminidataanalytics.dataAgentViewer) - 对数据代理的查看(只读)访问权限
6. 与代理创建对话
我们退出分享标签页,然后创建一个新对话:

点击创建对话后,系统会生成新的无标题对话。
我们来问问英格兰有哪些时下流行字词(您可以随意替换为自己选择的地点!):
Based on the top 10 terms in England, how did they trend for the past 3 months?
解封响应流
数据智能体在回答问题时通常会遵循相同的回答流:
- 推理:智能体首先会“思考”提示。展开显示推理按钮,即可逐步了解智能体的决策过程。
- 摘要:代理会生成查询、生成的报告和可视化的简明摘要。
- 生成的 SQL:展开这是查询... 部分,检查 SQL。点击在编辑器中打开,以便在 BigQuery Studio 中手动微调查询。
- 数据结果:智能体以清晰的表格格式呈现查询结果。
- 可视化:图表会显示在简短说明旁边。代理会自动为您的数据推断最佳可视化图表类型(例如,多序列折线图)。
- 数据洞见:代理会总结结果中的关键趋势和要点。
- 后续问题:最后,智能体建议相关后续问题,帮助您继续分析。

BigQuery ML 支持
接下来,我们询问数据智能体是否可以根据这些结果运行一些预测。此方法利用 BigQuery ML 函数来预测未来的点。
输入以下提示(请务必将“monopoly board”替换为与您的查询相关的字词!):
Can you predict and visualize how monopoly board will trend in the next 4 weeks?
您可以看到,AI_FORECAST 用于预测时间序列。不过,2021 年 8 月出现了一个明显的峰值,这与伦敦大富翁真人版景点盛大开幕的时间相吻合,这很有趣!

7. 探索代理目录
在结束之前,我们先来探索一下代理目录。点击窗口顶部的代理目录:

本页面是数据代理管理的中心枢纽,分为以下几个部分:
- 我的代理:您当前已发布的代理。
- 我的草稿代理:您已保存但尚未发布的配置。
- 您组织中的其他人分享的代理:您有权访问的同事创建的代理。
- Google 提供的示例代理:预配置的示例,可帮助您快速入门。
对于您管理的任何代理,您都可以修改配置、复制代理和管理共享权限。
8. 总结
恭喜,您已成功构建对话式分析数据代理。查看参考资料,了解更多信息!

