
准备工作
- 实验会创建一个 Google Cloud 项目和一些资源,供您使用限定的一段时间
- 实验有时间限制,并且没有暂停功能。如果您中途结束实验,则必须重新开始。
- 在屏幕左上角,点击开始实验即可开始
Create a database and enable pgVector extension
/ 20
Populate database with the sample dataset
/ 20
Create the service account retrieval-identity
/ 20
Deploy the Retrieval Service
/ 20
Create a Client Id
/ 20
检索增强生成 (RAG) 是提升大语言模型 (LLM) 回答质量的最佳工具之一。RAG 是一种数据检索模式,可以检索一些非公开数据,并使用这些数据来增强发送给 LLM 的提示。RAG 使 LLM 能够根据提示中包含的数据生成更准确的回答。
您将使用 Google Cloud 的数据库 AlloyDB 来存储和搜索一种称为向量嵌入的特殊向量数据,这种数据库具备可伸缩和高性能特性,并且兼容 PostgreSQL。向量嵌入可以使用语义搜索进行检索,从而检索到与用户的自然语言查询最匹配的可用数据。系统随后会将检索到的数据发送到 LLM 的提示中。
您还将使用 Google Cloud 的全托管式统一 AI 开发平台 Vertex AI 来构建和使用生成式 AI。您的应用使用 Gemini Pro,这是一个多模态基础模型,支持在文本或聊天提示中添加图片、音频、视频和 PDF 文件,还支持长上下文理解。
在本实验中,您将学习:
Qwiklabs 实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。为此,我们会向您提供新的临时凭据,您可以在该实验的规定时间内通过此凭据登录和访问 Google Cloud。
为完成此实验,您需要:
点击开始实验按钮。如果该实验需要付费,系统会打开一个弹出式窗口供您选择付款方式。左侧面板中包含您在进行该实验时必须使用的临时凭据。
复制用户名,然后点击打开 Google 控制台。 该实验会启动资源并打开另一个标签页,显示选择账号页面。
在“选择账号”页面中点击使用其他账号。“登录”页面即会打开。
粘贴您从“连接详情”面板复制的用户名,然后复制并粘贴相应的密码。
片刻之后,系统会在此标签页中打开 Cloud 控制台。
Google Cloud Shell 是一种装有开发者工具的虚拟机。它提供了一个永久性的 5GB 主目录,并且在 Google Cloud 上运行。
Google Cloud Shell 提供了可用于访问您的 Google Cloud 资源的命令行工具。
在 Cloud 控制台右上角的工具栏中,点击“打开 Cloud Shell”按钮。
点击继续。
预配并连接到环境需要一些时间。如果您连接成功,即表示您已通过身份验证,且项目 ID 会被设为您的 PROJECT_ID。例如:
gcloud 是 Google Cloud 的命令行工具。它会预先安装在 Cloud Shell 上,且支持 Tab 自动补全功能。
输出:
输出示例:
输出:
输出示例:
在此任务中,您将安装 PostgreSQL 客户端,并将它连接到 AlloyDB 实例。
已创建一个虚拟机 (VM)。用该虚拟机托管应用。您还将在该虚拟机上创建 PostgreSQL 客户端。
如需连接到虚拟机,请运行以下命令:
如果系统提示您进行授权,请点击授权。
对于 gcloud compute ssh
命令提出的每个问题,点击 Enter 键或 Return 键来指定默认输入。
稍等片刻后,您将登录到虚拟机。
如需安装 PostgreSQL 客户端,请在虚拟机会话中运行以下命令:
已创建 AlloyDB 实例
如需创建所需的 shell 变量,请运行以下命令:
如需使用 psql 连接到 AlloyDB 实例,请运行以下命令:
psql 连接到 AlloyDB 数据库,并显示 postgres=>
提示。您现在已连接到数据库。
如需退出 psql 会话,请运行以下命令:
在此任务中,您将使用 PostgreSQL 客户端创建 AlloyDB 数据库,并启用向量嵌入。
如需创建新数据库,请在虚拟机会话中运行以下命令:
psql 会回答 CREATE DATABASE
。
要使数据库支持语义搜索,实体应该以向量嵌入的形式表示。
如需在该数据库中启用向量嵌入,请运行以下命令:
psql 会回答 CREATE EXTENSION
。
点击检查我的进度,验证是否完成了目标。
在此任务中,您将在虚拟机中安装 Python。使用 Python 填充数据库。
如需在虚拟机中安装 Python 和 Git,请运行以下命令:
安装完成后,您将处于虚拟 Python 环境中,系统会显示 (.venv)
提示。
如果虚拟机 SSH 会话超时或标签页关闭,您可以再次通过 SSH 登录虚拟机,并使用 source ~/.venv/bin/activate
命令重启虚拟 Python 环境。
如需确认 Python 版本,请运行以下命令:
您的响应应如下所示:
在此任务中,您将使用示例数据填充 AlloyDB 中的向量数据库。这些数据会用于示例聊天应用。
示例应用和数据存储在名为 genai-databases-retrieval-app 的 GitHub 代码库中。
如需克隆此代码库,请在虚拟机中运行以下命令:
如需查看数据模型,请运行以下命令:
此处显示 Python 数据模型。该模型包括机场、航班、航站楼内服务设施、政策和机票。
如需查看机场数据示例,请运行以下命令:
这些命令会显示包含机场数据集列名称的 CSV 标题行,随后一行是旧金山国际机场 (SFO) 对应的数据记录。机场模型中的数据可按国际航空运输协会 (IATA) 代码或国家/地区、城市和机场名称进行检索。您可以使用关键字搜索来查找此表中的行,因此,此数据没有向量嵌入。
如需查看航班数据示例,请运行以下命令:
这些命令会显示包含航班数据集列名称的 CSV 标题行,随后是往返旧金山国际机场的航班的前 10 行数据记录。航班模型中的数据可按航空公司和航班号,或出发和到达机场代码进行检索。
如需查看服务设施数据示例,请运行以下命令:
此命令会显示包含服务设施数据集列名称的 CSV 标题行,随后是该数据集的第一项服务设施记录。
您会发现,第一项服务设施记录有几个简单的值,包括名称、说明、位置、航站楼、类别和营业时间。下一个值是 content
,其中包含名称、说明和位置。最后一个值是 embedding
,即相关行的向量嵌入。
嵌入是一个包含 768 个数字的数组,用于执行语义搜索。这些嵌入由 Vertex AI 提供的 AI 模型计算得出。当用户提交查询时,系统会根据查询创建向量嵌入,并检索与搜索嵌入相近的向量嵌入数据。
政策数据也以类似的方式使用向量嵌入。
如需创建数据库配置文件,请运行以下命令:
已创建配置文件 config.yml
,并更新了实例 IP 地址、用户名、密码和数据库。您的配置文件现在应如下所示:
如需使用示例数据集填充数据库,请运行以下命令:
第一个命令将所有必需的软件包添加到 Python 虚拟环境中,第二个命令将数据填充到数据库中。
在此任务中,您将为检索服务创建一个服务账号。
检索服务负责从数据库中提取相关信息。它根据 AI 应用的请求从数据库中提取必要信息。此服务账号用作该 Cloud Run 服务的身份。
SSH 用户没有项目实例的权限,无法为服务账号提供正确的角色。您可以使用新的 Cloud Shell 标签页创建服务账号。
在 Cloud Shell 中,点击打开新标签页 (+) 可以打开新的 Cloud Shell 标签页。
如需创建服务账号并为其授予必要的特权,请在新标签页中运行以下命令:
系统授予此服务账号 roles/aiplatform.user
角色,该角色允许服务调用 Vertex AI。
如需关闭新标签页,请运行以下命令:
在此任务中,您会将检索服务部署到 Cloud Run。
如需部署检索服务,请在虚拟机 SSH Cloud Shell 标签页中运行以下命令:
请等待几分钟,直到部署完成。
如需验证服务,请运行以下命令:
如果您看到“Hello World”消息,则表示服务已启动且正在处理请求。
在此任务中,您将注册向登录用户显示的 OAuth 权限请求页面。
当您使用 OAuth 2.0 进行授权时,Google 会显示权限请求页面,以征得用户的同意来与应用共享数据。
在 Google Cloud 控制台中,选择导航菜单 (),然后选择 API 和服务 > OAuth 权限请求页面。
点击开始。
在应用名称中,输入 Cymbal Air
。
点击用户支持电子邮件,然后点击学生电子邮件,再点击下一步。
在受众群体部分,选择内部,然后点击下一步。
对项目具有访问权限的用户应该能够登录此应用。
在实验说明的左侧面板中,复制用户名。
在联系信息部分,粘贴复制的用户名。
点击下一步。
点击复选框以同意《用户数据政策》,然后点击继续,再点击创建。
权限请求页面现已设置完毕。
在此任务中,您将为应用创建客户端 ID。
该应用需要有客户端 ID 才能使用 Google 的 OAuth 服务。您将配置可发出此请求的获准来源,以及用户同意登录后 Web 应用重定向到哪个 URI。
在 Google Cloud 控制台中,选择导航菜单 (),然后选择 API 和服务 > 凭据。
点击 + 创建凭据,然后点击 OAuth 客户端 ID。
客户端 ID 用于向 Google 的 OAuth 服务器标识单个应用。
在应用类型部分,选择 Web 应用。
在名称部分,输入 Cymbal Air
。
您可以使用 Cloud Shell 生成 JavaScript 来源和重定向 URI。
在 Cloud Shell 中,点击打开新标签页 (+) 可以打开新的 Cloud Shell 标签页。
如需获取来源和重定向 URI,请在新标签页中运行以下命令:
对于已获授权的 JavaScript 来源,点击 + 添加 URI。
复制由 echo 命令创建的来源 URI,然后将该 URI 粘贴到 URI 1 中。
在已获授权的重定向 URI 部分,点击 + 添加 URI。
复制由 echo 命令创建的重定向 URI,然后将该 URI 粘贴到 URI 1 中。
点击创建。
客户端 ID 和客户端密钥已创建。对于此测试应用,您只需使用客户端 ID。
如需创建环境变量,请在虚拟机 SSH Cloud Shell 标签页中粘贴以下命令,但不要点击 Enter 键:
点击复制客户端 ID ()。
客户端 ID 已复制到剪贴板。
在虚拟机 SSH Cloud Shell 标签页中,粘贴客户端 ID,然后点击 Enter 键。
生成的内容应如下所示:
在此任务中,您将运行一个使用检索服务的示例聊天应用。
如需为聊天应用安装 Python requirements 文件中的依赖项,请在虚拟机 SSH Cloud Shell 标签页中运行以下命令:
在启动应用之前,您需要设置一些环境变量。应用的基本功能(包括查询航班和返回机场服务设施)需要一个名为 BASE_URL
的环境变量,其中包含检索服务的基础网址。
如需指定检索服务的基础网址,请运行以下命令:
本地应用使用基础网址来访问检索服务。
如需运行该应用,请运行以下命令:
您的响应应如下所示:
该应用现在正在运行。
您可以通过多种方式连接到虚拟机上运行的应用。例如,您可以在 VPC 中使用防火墙规则打开虚拟机上的端口 8081,或创建具有公共 IP 的负载均衡器。在这里,您将使用通向虚拟机的 SSH 隧道,将 Cloud Shell 端口 8080 转换为虚拟机端口 8081。
在 Cloud Shell 中,点击打开新标签页 (+) 可以打开新的 Cloud Shell 标签页。
如需创建连接到虚拟机端口的 SSH 隧道,请在新标签页中运行以下命令:
gcloud 命令将 Cloud Shell 中的端口 8080 与虚拟机上的端口 8081 连接起来。您可以忽略“无法分配请求的地址”错误。
如需在网络浏览器中运行应用,请点击网页预览,然后选择在端口 8080 上预览。
浏览器中会打开一个新标签页,应用将会运行。Cymbal Air 应用显示“欢迎使用 Cymbal Air!您需要哪些方面的帮助?”
输入以下查询:
应用会在回答中提供从 SFO 机场飞往达拉斯/沃思堡的下一趟航班的信息。
输入以下查询:
应用会理解上下文,并列出 SFO 机场登机口附近的餐馆。
在此任务中,您将登录应用来预订航班。
点击登录。
系统随即会弹出一个窗口。
在弹出式窗口中,选择学生。
学生账号已登录。
如果系统要求您确认是否要以学生身份登录,请点击确认。
输入以下查询:
应用会显示正在讨论的航班。
点击看起来不错。预订。
航班便已预订。
输入以下查询:
系统会显示您刚刚预订的航班。
聊天应用可以帮助回答用户的问题,例如:
该应用使用最新的 Google 基础模型来生成回答,并通过运行中的 AlloyDB 数据库提供的航班和服务设施相关信息来增强回答内容。如需详细了解此演示版应用,请访问项目的 GitHub 页面。
您已成功构建一个聊天应用,该应用利用大语言模型 (LLM) 和检索增强生成 (RAG) 技术来创建富有吸引力且内容丰富的对话。
完成实验后,请点击结束实验。Google Cloud Skills Boost 会移除您使用过的资源并为您清理帐号。
系统会提示您为实验体验评分。请选择相应的星级数,输入评论,然后点击提交。
星级数的含义如下:
如果您不想提供反馈,可以关闭该对话框。
如果要留言反馈、提出建议或做出更正,请使用支持标签页。
版权所有 2024 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名称和产品名称可能是其各自相关公司的商标。
此内容目前不可用
一旦可用,我们会通过电子邮件告知您
太好了!
一旦可用,我们会通过电子邮件告知您
一次一个实验
确认结束所有现有实验并开始此实验