使用 BigQuery 创建 RAG 应用
实验
1 小时
universal_currency_alt
5 个积分
show_chart
中级
info
此实验可能会提供 AI 工具来支持您学习。
GSP1289

概览
担心出现 AI 幻觉问题?尽管 AI 是一种宝贵的资源,但它有时也会生成不准确、过时或过于笼统的答案,这种现象称为“幻觉”。本实验会教您如何通过实现检索增强生成 (RAG) 流水线来解决此问题。RAG 可利用特定数据集中与上下文相关的信息,将 Gemini 等大语言模型 (LLM) 的输出接地,从而改进这些模型。
假设您正在帮助一家创新型移动咖啡供应商 Coffee-on-Wheels 分析客户对其服务的反馈。如果无法使用最新数据,Gemini 给出的答案可能会不准确。为解决此问题,您决定构建一个 RAG 流水线,其中包含以下三个步骤:
-
生成嵌入:将客户的反馈文本转换为向量嵌入。向量嵌入是数据的数值表示,用于捕捉语义含义。
-
搜索向量空间:创建这些向量的索引,搜索并检索相似项。
-
生成更优质的回答:利用检索到的信息使 Gemini 生成更准确、更相关的回答。
BigQuery 可以让您无缝连接到 Vertex AI 上的远程生成式 AI 模型。它还提供各种函数,让您能够直接通过 SQL 查询或 Python 笔记本执行嵌入、向量搜索和文本生成任务。
如需了解详情,请在 Google Cloud Skills Boost 上查看使用 BigQuery 创建嵌入、向量搜索和 RAG 课程。
学习内容
- 创建来源连接并授予 IAM 权限。
- 生成嵌入并将文本数据转换为向量嵌入。
- 搜索向量空间并检索相似项。
- 利用搜索结果使 Gemini 生成更优质的回答。
前提条件
要完成此实验,您应该熟悉 BigQuery 并具有 SQL 编码经验。
设置和要求
点击“开始实验”按钮前的注意事项
请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。
此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。为此,我们会向您提供新的临时凭据,您可以在该实验的规定时间内通过此凭据登录和访问 Google Cloud。
为完成此实验,您需要:
- 能够使用标准的互联网浏览器(建议使用 Chrome 浏览器)。
注意:请使用无痕模式(推荐)或无痕浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。
注意:请仅使用学生账号完成本实验。如果您使用其他 Google Cloud 账号,则可能会向该账号收取费用。
如何开始实验并登录 Google Cloud 控制台
-
点击开始实验按钮。如果该实验需要付费,系统会打开一个对话框供您选择支付方式。左侧是“实验详细信息”窗格,其中包含以下各项:
- “打开 Google Cloud 控制台”按钮
- 剩余时间
- 进行该实验时必须使用的临时凭据
- 帮助您逐步完成本实验所需的其他信息(如果需要)
-
点击打开 Google Cloud 控制台(如果您使用的是 Chrome 浏览器,请右键点击并选择在无痕式窗口中打开链接)。
该实验会启动资源并打开另一个标签页,显示“登录”页面。
提示:将这些标签页安排在不同的窗口中,并排显示。
注意:如果您看见选择账号对话框,请点击使用其他账号。
-
如有必要,请复制下方的用户名,然后将其粘贴到登录对话框中。
{{{user_0.username | "<用户名>"}}}
您也可以在“实验详细信息”窗格中找到“用户名”。
-
点击下一步。
-
复制下面的密码,然后将其粘贴到欢迎对话框中。
{{{user_0.password | "<密码>"}}}
您也可以在“实验详细信息”窗格中找到“密码”。
-
点击下一步。
重要提示:您必须使用实验提供的凭据。请勿使用您的 Google Cloud 账号凭据。
注意:在本实验中使用您自己的 Google Cloud 账号可能会产生额外费用。
-
继续在后续页面中点击以完成相应操作:
- 接受条款及条件。
- 由于这是临时账号,请勿添加账号恢复选项或双重验证。
- 请勿注册免费试用。
片刻之后,系统会在此标签页中打开 Google Cloud 控制台。
注意:如需访问 Google Cloud 产品和服务,请点击导航菜单,或在搜索字段中输入服务或产品的名称。
任务 1. 创建来源连接并授予 IAM 权限
创建来源连接
要在 BigQuery 中使用 Vertex AI 上的远程生成式 AI 模型(如 Gemini 和嵌入模型),请创建新的外部来源连接。
- 在 Google Cloud 控制台中,点击导航菜单 (
) 下的 BigQuery。
- 前往探索器,点击 + 添加,然后选择与外部数据源的连接。
- 在连接类型下拉菜单中,选择 Vertex AI 远程模型、远程函数和 BigLake(Cloud 资源)。
- 在连接 ID 字段中,输入
embedding_conn
。
- 点击创建连接。
- 创建连接后,在弹出的确认窗口中点击转至连接,前往该连接并复制服务账号 ID 值。您稍后需要使用该 ID 为此账号分配权限。
授予 IAM 权限
要使用 BigQuery 数据和 Vertex AI 资源,请向服务账号授予必要的 IAM 权限。
- 接下来,您需要通过 IAM 授予权限。请执行以下步骤:
- 在 Google Cloud 控制台的导航菜单 (
) 中,前往 IAM 和管理 > IAM。
- 点击授予访问权限。
- 在添加主账号部分中,执行以下操作:
- 在新的主账号文本字段中,粘贴您之前复制的服务账号 ID 值。
- 在分配角色下,选择以下角色(如有需要,可搜索这些角色):
- BigQuery Data Owner
- Vertex AI User
- 点击保存应用更改。
- 通过导航菜单 (
) 进入 API 和服务页面,点击 + 启用 API 和服务,搜索 Vertex AI API
,然后点击启用按钮。
点击检查我的进度以验证是否完成了以下目标:
创建来源连接并授予 IAM 权限。
任务 2. 生成嵌入
-
在 Google Cloud 控制台中,点击导航菜单 (
) 下的 BigQuery。
-
在探索器中,点击项目旁边的三点状图标,然后点击创建数据集。在数据集 ID 中,输入 CustomerReview
。其他选项保留默认值,点击创建数据集。
-
如要连接到嵌入模型,请在查询编辑器中运行以下 SQL 查询:
CREATE OR REPLACE MODEL `CustomerReview.Embeddings`
REMOTE WITH CONNECTION `us.embedding_conn`
OPTIONS (ENDPOINT = 'text-embedding-005');
- 若要从 CSV 文件上传数据集,请运行以下 SQL 查询:
LOAD DATA OVERWRITE CustomerReview.customer_reviews
(
customer_review_id INT64,
customer_id INT64,
location_id INT64,
review_datetime DATETIME,
review_text STRING,
social_media_source STRING,
social_media_handle STRING
)
FROM FILES (
format = 'CSV',
uris = ['gs://spls/gsp1249/customer_reviews.csv']
);
-
(可选)若要查看表中上传的数据,请点击转到表。查找表的架构并预览数据。
-
若要基于近期的客户反馈生成嵌入并将其存储在表中,请在查询编辑器中运行以下 SQL 查询:
CREATE OR REPLACE TABLE `CustomerReview.customer_reviews_embedded` AS
SELECT *
FROM ML.GENERATE_EMBEDDING(
MODEL `CustomerReview.Embeddings`,
(SELECT review_text AS content FROM `CustomerReview.customer_reviews`)
);
- (可选)如需查看嵌入结果,请点击转到表。查找表的架构并预览数据。请注意,嵌入结果为浮点数,此时可能无法解释其含义。
点击检查我的进度以验证是否完成了以下目标:
生成嵌入。
任务 3. 搜索向量空间并检索相似项
- 要创建向量搜索空间的索引,请运行以下 SQL 查询:
注意:少于 5,000 行的数据集(如本实验中的数据集)无需创建索引。此步骤演示的是在需要为较大数据集创建向量空间索引时应使用的代码。
CREATE OR REPLACE VECTOR INDEX `CustomerReview.reviews_index`
ON `CustomerReview.customer_reviews_embedded`(ml_generate_embedding_result)
OPTIONS (distance_type = 'COSINE', index_type = 'IVF');
- 要搜索向量空间并检索相似项,请运行以下 SQL 查询:
CREATE OR REPLACE TABLE `CustomerReview.vector_search_result` AS
SELECT
query.query,
base.content
FROM
VECTOR_SEARCH(
TABLE `CustomerReview.customer_reviews_embedded`,
'ml_generate_embedding_result',
(
SELECT
ml_generate_embedding_result,
content AS query
FROM
ML.GENERATE_EMBEDDING(
MODEL `CustomerReview.Embeddings`,
(SELECT 'service' AS content)
)
),
top_k => 5,
options => '{"fraction_lists_to_search": 0.01}'
);
- (可选)如要查看查询结果,请点击转到表。查找表的架构并预览数据。
点击检查我的进度以验证是否完成了以下目标:
搜索向量空间并检索相似项。
任务 4. 生成更优质的回答
-
要连接到 Gemini 模型,请运行以下 SQL 查询:
CREATE OR REPLACE MODEL `CustomerReview.Gemini`
REMOTE WITH CONNECTION `us.embedding_conn`
OPTIONS (ENDPOINT = 'gemini-pro');
-
为提高 Gemini 的回答质量,可运行以下查询来向其提供通过向量搜索检索到的最新相关数据:
SELECT
ml_generate_text_llm_result AS generated
FROM
ML.GENERATE_TEXT(
MODEL `CustomerReview.Gemini`,
(
SELECT
CONCAT(
'Summarize what customers think about our services',
STRING_AGG(FORMAT('review text: %s', base.content), ',\n')
) AS prompt
FROM
`CustomerReview.vector_search_result` AS base
),
STRUCT(
0.4 AS temperature,
300 AS max_output_tokens,
0.5 AS top_p,
5 AS top_k,
TRUE AS flatten_json_output
)
);
- 在查询编辑器下方的查询结果部分,查看 Gemini 生成的结果。
请回答以下问题:
1. 如何判断 Gemini 使用 RAG 生成的回答是否比不使用 RAG 生成的回答更好?尝试使用代码进行验证。
2. 如何改进代码?例如,能否省略将向量搜索结果保存到表中(任务 3)这个步骤,直接将该流程嵌入到答案生成中(任务 4),以进行实时检索?
请在实验剩余时间探索这些问题。祝您好运!
点击检查我的进度以验证是否完成了以下目标:
使用通过向量搜索检索到的数据生成更优质的回答。
恭喜!
为了帮助 Coffee-on-Wheels 从客户对其服务的反馈中获得数据洞见,您成功地在 BigQuery 中实现了 RAG 流水线,为 Gemini 提供了最新的相关信息。您连接到了远程生成式 AI 模型(包括嵌入模型和 Gemini),并执行了以下三个步骤:创建嵌入、搜索向量空间、生成更优质的回答。实验目标是让您能够运用这种方法来解决自己遇到的 AI 幻觉问题。
Google Cloud 培训和认证
…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。
本手册的最后更新时间:2025 年 1 月 22 日
本实验的最后测试时间:2025 年 1 月 22 日
版权所有 2025 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。