正在加载…
未找到任何结果。

在 Google Cloud 控制台中运用您的技能

03

在 Google Cloud 上创建生成式 AI 应用

访问 700 多个实验和课程

使用 AlloyDB 和 Vertex AI 构建基于 LLM 和 RAG 的聊天应用

实验 1 小时 30 分钟 universal_currency_alt 5 个积分 show_chart 中级
info 此实验可能会提供 AI 工具来支持您学习。
访问 700 多个实验和课程

概览

检索增强生成 (RAG) 是提升大语言模型 (LLM) 回答质量的最佳工具之一。RAG 是一种数据检索模式,可以检索一些非公开数据,并使用这些数据来增强发送给 LLM 的提示。RAG 使 LLM 能够根据提示中包含的数据生成更准确的回答。

您将使用 Google Cloud 的数据库 AlloyDB 来存储和搜索一种称为向量嵌入的特殊向量数据,这种数据库具备可伸缩和高性能特性,并且兼容 PostgreSQL。向量嵌入可以使用语义搜索进行检索,从而检索到与用户的自然语言查询最匹配的可用数据。系统随后会将检索到的数据发送到 LLM 的提示中。

您还将使用 Google Cloud 的全托管式统一 AI 开发平台 Vertex AI 来构建和使用生成式 AI。您的应用使用 Gemini Pro,这是一个多模态基础模型,支持在文本或聊天提示中添加图片、音频、视频和 PDF 文件,还支持长上下文理解。

您将学到的内容

在本实验中,您将学习:

  • RAG 如何通过从知识库中检索相关信息来增强 LLM 的功能。
  • 如何使用 AlloyDB 通过语义搜索查找相关信息。
  • 如何使用 Vertex AI 和 Google 的基础模型为应用提供强大的生成式 AI 功能。

设置和要求

点击“开始实验”按钮前的注意事项

注意:请阅读以下说明。

实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。

Qwiklabs 实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。为此,我们会向您提供新的临时凭据,您可以在该实验的规定时间内通过此凭据登录和访问 Google Cloud。

所需条件

为完成此实验,您需要:

  • 能够使用标准的互联网浏览器(建议使用 Chrome 浏览器)。
  • 为完成实验留出时间。
注意:如果您有自己的个人 Google Cloud 账号或项目,请不要在此实验中使用。 注意:如果您使用的是 Pixelbook,请在无痕式窗口中运行此实验。

如何开始实验并登录控制台

  1. 点击开始实验按钮。如果该实验需要付费,系统会打开一个弹出式窗口供您选择付款方式。左侧面板中包含您在进行该实验时必须使用的临时凭据。

  2. 复制用户名,然后点击打开 Google 控制台。 该实验会启动资源并打开另一个标签页,显示选择账号页面。

    注意:请在单独的窗口打开标签页,让它们并排显示。
  3. 在“选择账号”页面中点击使用其他账号。“登录”页面即会打开。

  4. 粘贴您从“连接详情”面板复制的用户名,然后复制并粘贴相应的密码。

注意:您必须使用“连接详情”面板中的凭据,请勿使用您的 Google Cloud Skills Boost 凭据。如果您拥有自己的 Google Cloud 账号,请不要在此实验中使用,以免产生费用。
  1. 继续在后续页面中点击以完成相应操作:
  • 接受条款及条件。
  • 由于该账号为临时账号,请勿添加账号恢复选项或双重验证。
  • 请勿注册免费试用。

片刻之后,系统会在此标签页中打开 Cloud 控制台。

注意:您可以点击左上角的导航菜单来查看列有 Google Cloud 产品和服务的菜单。

激活 Google Cloud Shell

Google Cloud Shell 是一种装有开发者工具的虚拟机。它提供了一个永久性的 5GB 主目录,并且在 Google Cloud 上运行。

Google Cloud Shell 提供了可用于访问您的 Google Cloud 资源的命令行工具。

  1. 在 Cloud 控制台右上角的工具栏中,点击“打开 Cloud Shell”按钮。

  2. 点击继续

预配并连接到环境需要一些时间。如果您连接成功,即表示您已通过身份验证,且项目 ID 会被设为您的 PROJECT_ID。例如:

gcloud 是 Google Cloud 的命令行工具。它会预先安装在 Cloud Shell 上,且支持 Tab 自动补全功能。

  • 您可以通过以下命令列出有效的账号名称:
gcloud auth list

输出:

Credentialed accounts: - @.com (active)

输出示例

Credentialed accounts: - google1623327_student@qwiklabs.net
  • 您可以通过以下命令列出项目 ID:
gcloud config list project

输出:

[core] project =

输出示例

[core] project = qwiklabs-gcp-44776a13dea667a6 注意:有关 gcloud 的完整文档,请参阅 gcloud CLI 概览指南

任务 1.初始化数据库环境

在此任务中,您将安装 PostgreSQL 客户端,并将它连接到 AlloyDB 实例。

安装 PostgreSQL 客户端

已创建一个虚拟机 (VM)。用该虚拟机托管应用。您还将在该虚拟机上创建 PostgreSQL 客户端。

  1. 如需连接到虚拟机,请运行以下命令:

    gcloud compute ssh app-vm --zone={{{project_0.default_zone | ZONE }}}

    如果系统提示您进行授权,请点击授权

  2. 对于 gcloud compute ssh 命令提出的每个问题,点击 Enter 键或 Return 键来指定默认输入。

    稍等片刻后,您将登录到虚拟机。

  3. 如需安装 PostgreSQL 客户端,请在虚拟机会话中运行以下命令:

    sudo apt-get update sudo apt-get install --yes postgresql-client 注意:客户端可能已安装。

连接到 AlloyDB 实例

已创建 AlloyDB 实例

  1. 如需创建所需的 shell 变量,请运行以下命令:

    export PGUSER={{{project_0.startup_script.gcp_alloydb_user | PG_USER}}} export PGPASSWORD={{{project_0.startup_script.gcp_alloydb_password | PG_PASSWORD}}} export PROJECT_ID=$(gcloud config get-value project) export REGION={{{project_0.default_region | REGION }}} export ADBCLUSTER={{{project_0.startup_script.gcp_alloydb_cluster_name | CLUSTER}}} export INSTANCE_IP=$(gcloud alloydb instances describe $ADBCLUSTER-pr --cluster=$ADBCLUSTER --region=$REGION --format="value(ipAddress)")
  2. 如需使用 psql 连接到 AlloyDB 实例,请运行以下命令:

    psql "host=$INSTANCE_IP user=$PGUSER sslmode=require"

    psql 连接到 AlloyDB 数据库,并显示 postgres=> 提示。您现在已连接到数据库。

  3. 如需退出 psql 会话,请运行以下命令:

    exit 注意:请勿关闭 SSH 会话。

任务 2.创建向量数据库

在此任务中,您将使用 PostgreSQL 客户端创建 AlloyDB 数据库,并启用向量嵌入。

创建数据库

  1. 如需创建新数据库,请在虚拟机会话中运行以下命令:

    export PGPASSWORD={{{project_0.startup_script.gcp_alloydb_password | PG_PASSWORD}}} psql "host=$INSTANCE_IP user=$PGUSER" -c "CREATE DATABASE assistantdemo"

    psql 会回答 CREATE DATABASE

    要使数据库支持语义搜索,实体应该以向量嵌入的形式表示。

  2. 如需在该数据库中启用向量嵌入,请运行以下命令:

    psql "host=$INSTANCE_IP user=$PGUSER dbname=assistantdemo" -c "CREATE EXTENSION vector"

    psql 会回答 CREATE EXTENSION

点击检查我的进度,验证是否完成了目标。

创建 AlloyDB 数据库,并启用 pgVector 扩展程序。

任务 3.安装 Python

在此任务中,您将在虚拟机中安装 Python。使用 Python 填充数据库。

  1. 如需在虚拟机中安装 Python 和 Git,请运行以下命令:

    sudo apt install -y python3.11-venv git python3 -m venv .venv source ~/.venv/bin/activate pip install --upgrade pip

    安装完成后,您将处于虚拟 Python 环境中,系统会显示 (.venv) 提示。

    如果虚拟机 SSH 会话超时或标签页关闭,您可以再次通过 SSH 登录虚拟机,并使用 source ~/.venv/bin/activate 命令重启虚拟 Python 环境。

  2. 如需确认 Python 版本,请运行以下命令:

    python -V

    您的响应应如下所示:

    (.venv) student@app-vm:~$ python -V Python 3.11.2 (.venv) student@app-vm:~$

任务 4.填充示例数据库

在此任务中,您将使用示例数据填充 AlloyDB 中的向量数据库。这些数据会用于示例聊天应用。

示例应用和数据存储在名为 genai-databases-retrieval-app 的 GitHub 代码库中。

  1. 如需克隆此代码库,请在虚拟机中运行以下命令:

    git clone https://github.com/GoogleCloudPlatform/genai-databases-retrieval-app.git
  2. 如需查看数据模型,请运行以下命令:

    cd ~/genai-databases-retrieval-app cat retrieval_service/models/models.py

    此处显示 Python 数据模型。该模型包括机场、航班、航站楼内服务设施、政策和机票。

  3. 如需查看机场数据示例,请运行以下命令:

    head -1 data/airport_dataset.csv; grep SFO data/airport_dataset.csv

    这些命令会显示包含机场数据集列名称的 CSV 标题行,随后一行是旧金山国际机场 (SFO) 对应的数据记录。机场模型中的数据可按国际航空运输协会 (IATA) 代码或国家/地区、城市和机场名称进行检索。您可以使用关键字搜索来查找此表中的行,因此,此数据没有向量嵌入。

  4. 如需查看航班数据示例,请运行以下命令:

    head -1 data/flights_dataset.csv; grep -m10 "SFO" data/flights_dataset.csv

    这些命令会显示包含航班数据集列名称的 CSV 标题行,随后是往返旧金山国际机场的航班的前 10 行数据记录。航班模型中的数据可按航空公司和航班号,或出发和到达机场代码进行检索。

  5. 如需查看服务设施数据示例,请运行以下命令:

    head -2 data/amenity_dataset.csv

    此命令会显示包含服务设施数据集列名称的 CSV 标题行,随后是该数据集的第一项服务设施记录。

    您会发现,第一项服务设施记录有几个简单的值,包括名称、说明、位置、航站楼、类别和营业时间。下一个值是 content,其中包含名称、说明和位置。最后一个值是 embedding,即相关行的向量嵌入。

    嵌入是一个包含 768 个数字的数组,用于执行语义搜索。这些嵌入由 Vertex AI 提供的 AI 模型计算得出。当用户提交查询时,系统会根据查询创建向量嵌入,并检索与搜索嵌入相近的向量嵌入数据。

    政策数据也以类似的方式使用向量嵌入。

    注意:嵌入的计算需要一些时间,因此预先提供了嵌入。可以查看“run_generate_embeddings.py”脚本,了解嵌入的生成方式。
  6. 如需创建数据库配置文件,请运行以下命令:

    export PGUSER={{{project_0.startup_script.gcp_alloydb_user | PG_USER}}} export PGPASSWORD={{{project_0.startup_script.gcp_alloydb_password | PG_PASSWORD}}} export PROJECT_ID=$(gcloud config get-value project) export REGION={{{project_0.default_region | REGION }}} export ADBCLUSTER={{{project_0.startup_script.gcp_alloydb_cluster_name | CLUSTER}}} export INSTANCE_IP=$(gcloud alloydb instances describe $ADBCLUSTER-pr --cluster=$ADBCLUSTER --region=$REGION --format="value(ipAddress)") cd ~/genai-databases-retrieval-app/retrieval_service cp example-config.yml config.yml sed -i s/127.0.0.1/$INSTANCE_IP/g config.yml sed -i s/my-user/$PGUSER/g config.yml sed -i s/my-password/$PGPASSWORD/g config.yml sed -i s/my_database/assistantdemo/g config.yml cat config.yml

    已创建配置文件 config.yml,并更新了实例 IP 地址、用户名、密码和数据库。您的配置文件现在应如下所示:

    host: 0.0.0.0 # port: 8080 datastore: # Example for AlloyDB kind: "postgres" host: 10.65.0.2 # port: 5432 database: "assistantdemo" user: "postgres" password: "samplepassword"
  7. 如需使用示例数据集填充数据库,请运行以下命令:

    pip install -r requirements.txt python run_database_init.py

    第一个命令将所有必需的软件包添加到 Python 虚拟环境中,第二个命令将数据填充到数据库中。

使用示例数据集填充数据库。

任务 5.为检索服务创建服务账号

在此任务中,您将为检索服务创建一个服务账号。

检索服务负责从数据库中提取相关信息。它根据 AI 应用的请求从数据库中提取必要信息。此服务账号用作该 Cloud Run 服务的身份。

创建服务账号

SSH 用户没有项目实例的权限,无法为服务账号提供正确的角色。您可以使用新的 Cloud Shell 标签页创建服务账号。

  1. 在 Cloud Shell 中,点击打开新标签页 (+) 可以打开新的 Cloud Shell 标签页。

  2. 如需创建服务账号并为其授予必要的特权,请在新标签页中运行以下命令:

    export PROJECT_ID=$(gcloud config get-value project) gcloud iam service-accounts create retrieval-identity gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:retrieval-identity@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/aiplatform.user"

    系统授予此服务账号 roles/aiplatform.user 角色,该角色允许服务调用 Vertex AI。

  3. 如需关闭新标签页,请运行以下命令:

    exit
创建 retrieval-identity 服务账号。

任务 6.将检索服务部署到 Cloud Run

在此任务中,您会将检索服务部署到 Cloud Run。

  1. 如需部署检索服务,请在虚拟机 SSH Cloud Shell 标签页中运行以下命令:

    export REGION={{{project_0.default_region | REGION }}} cd ~/genai-databases-retrieval-app gcloud alpha run deploy retrieval-service \ --source=./retrieval_service/\ --no-allow-unauthenticated \ --service-account retrieval-identity \ --region $REGION \ --network=default \ --quiet

    请等待几分钟,直到部署完成。

  2. 如需验证服务,请运行以下命令:

    curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $(gcloud run services list --filter="(retrieval-service)" --format="value(URL)")

    如果您看到“Hello World”消息,则表示服务已启动且正在处理请求。

部署检索服务。

任务 7.注册 OAuth 权限请求页面

在此任务中,您将注册向登录用户显示的 OAuth 权限请求页面。

当您使用 OAuth 2.0 进行授权时,Google 会显示权限请求页面,以征得用户的同意来与应用共享数据。

  1. 在 Google Cloud 控制台中,选择导航菜单 (),然后选择 API 和服务 > OAuth 权限请求页面

  2. 点击开始

  3. 应用名称中,输入 Cymbal Air

  4. 点击用户支持电子邮件,然后点击学生电子邮件,再点击下一步

  5. 受众群体部分,选择内部,然后点击下一步

    对项目具有访问权限的用户应该能够登录此应用。

  6. 在实验说明的左侧面板中,复制用户名

  7. 联系信息部分,粘贴复制的用户名。

  8. 点击下一步

  9. 点击复选框以同意《用户数据政策》,然后点击继续,再点击创建

    权限请求页面现已设置完毕。

任务 8.为应用创建客户端 ID

在此任务中,您将为应用创建客户端 ID。

该应用需要有客户端 ID 才能使用 Google 的 OAuth 服务。您将配置可发出此请求的获准来源,以及用户同意登录后 Web 应用重定向到哪个 URI。

  1. 在 Google Cloud 控制台中,选择导航菜单 (),然后选择 API 和服务 > 凭据

  2. 点击 + 创建凭据,然后点击 OAuth 客户端 ID

    客户端 ID 用于向 Google 的 OAuth 服务器标识单个应用。

  3. 应用类型部分,选择 Web 应用

  4. 名称部分,输入 Cymbal Air

    您可以使用 Cloud Shell 生成 JavaScript 来源和重定向 URI。

  5. 在 Cloud Shell 中,点击打开新标签页 (+) 可以打开新的 Cloud Shell 标签页。

  6. 如需获取来源和重定向 URI,请在新标签页中运行以下命令:

    echo "origin:"; echo "https://8080-$WEB_HOST"; echo "redirect:"; echo "https://8080-$WEB_HOST/login/google"
  7. 对于已获授权的 JavaScript 来源,点击 + 添加 URI

    注意:选择“已获授权的 JavaScript 来源”下的添加 URI 按钮,而不是“已获授权的重定向 URI”下的按钮。
  8. 复制由 echo 命令创建的来源 URI,然后将该 URI 粘贴到 URI 1 中。

  9. 已获授权的重定向 URI 部分,点击 + 添加 URI

    注意:这是“已获授权的重定向 URI”下的第二个添加 URI 按钮。
  10. 复制由 echo 命令创建的重定向 URI,然后将该 URI 粘贴到 URI 1 中。

  11. 点击创建

    客户端 ID 和客户端密钥已创建。对于此测试应用,您只需使用客户端 ID。

  12. 如需创建环境变量,请在虚拟机 SSH Cloud Shell 标签页中粘贴以下命令,但不要点击 Enter 键:

    export CLIENT_ID=
  13. 点击复制客户端 ID ()。

    客户端 ID 已复制到剪贴板。

    注意:您也可以从凭据页面复制客户端 ID。
  14. 在虚拟机 SSH Cloud Shell 标签页中,粘贴客户端 ID,然后点击 Enter 键。

    生成的内容应如下所示:

    export CLIENT_ID=937631684809-q7hs2r191jbks7f7dopih2uafuknb92h.apps.googleusercontent.com
为应用创建客户端 ID。

任务 9.部署示例应用

在此任务中,您将运行一个使用检索服务的示例聊天应用。

运行应用

  1. 如需为聊天应用安装 Python requirements 文件中的依赖项,请在虚拟机 SSH Cloud Shell 标签页中运行以下命令:

    cd ~/genai-databases-retrieval-app/llm_demo pip install -r requirements.txt

    在启动应用之前,您需要设置一些环境变量。应用的基本功能(包括查询航班和返回机场服务设施)需要一个名为 BASE_URL 的环境变量,其中包含检索服务的基础网址。

  2. 如需指定检索服务的基础网址,请运行以下命令:

    export BASE_URL=$(gcloud run services list --filter="(retrieval-service)" --format="value(URL)") echo $BASE_URL

    本地应用使用基础网址来访问检索服务。

  3. 如需运行该应用,请运行以下命令:

    python run_app.py

    您的响应应如下所示:

    (.venv) student-03-b2f40c6c89d6@app-vm:~/genai-databases-retrieval-app/llm_demo$ python run_app.py INFO: Started server process [32894] INFO: Waiting for application startup. Loading application... INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:8081 (Press CTRL+C to quit)

    该应用现在正在运行。

连接到虚拟机

您可以通过多种方式连接到虚拟机上运行的应用。例如,您可以在 VPC 中使用防火墙规则打开虚拟机上的端口 8081,或创建具有公共 IP 的负载均衡器。在这里,您将使用通向虚拟机的 SSH 隧道,将 Cloud Shell 端口 8080 转换为虚拟机端口 8081。

  1. 在 Cloud Shell 中,点击打开新标签页 (+) 可以打开新的 Cloud Shell 标签页。

  2. 如需创建连接到虚拟机端口的 SSH 隧道,请在新标签页中运行以下命令:

    gcloud compute ssh app-vm --zone={{{project_0.default_zone | ZONE }}} -- -L 8080:localhost:8081

    gcloud 命令将 Cloud Shell 中的端口 8080 与虚拟机上的端口 8081 连接起来。您可以忽略“无法分配请求的地址”错误。

  3. 如需在网络浏览器中运行应用,请点击网页预览,然后选择在端口 8080 上预览

    浏览器中会打开一个新标签页,应用将会运行。Cymbal Air 应用显示“欢迎使用 Cymbal Air!您需要哪些方面的帮助?”

  4. 输入以下查询:

    飞往达拉斯的下一趟航班是在什么时候?

    应用会在回答中提供从 SFO 机场飞往达拉斯/沃思堡的下一趟航班的信息。

  5. 输入以下查询:

    哪些餐馆靠近登机口?

    应用会理解上下文,并列出 SFO 机场登机口附近的餐馆。

任务 10.登录应用(可选)

在此任务中,您将登录应用来预订航班。

  1. 点击登录

    系统随即会弹出一个窗口。

  2. 在弹出式窗口中,选择学生。

    学生账号已登录。

  3. 如果系统要求您确认是否要以学生身份登录,请点击确认

  4. 输入以下查询:

    请预订该航班。

    应用会显示正在讨论的航班。

  5. 点击看起来不错。预订

    航班便已预订。

  6. 输入以下查询:

    我预订了哪些航班?

    系统会显示您刚刚预订的航班。

    聊天应用可以帮助回答用户的问题,例如:

    • 飞往迈阿密的下一趟航班是在什么时候?
    • D50 号登机口附近有没有奢侈品商店?
    • A6 号登机口附近在哪里可以喝杯咖啡?

    该应用使用最新的 Google 基础模型来生成回答,并通过运行中的 AlloyDB 数据库提供的航班和服务设施相关信息来增强回答内容。如需详细了解此演示版应用,请访问项目的 GitHub 页面

恭喜!

您已成功构建一个聊天应用,该应用利用大语言模型 (LLM) 和检索增强生成 (RAG) 技术来创建富有吸引力且内容丰富的对话。

后续步骤/了解详情

结束实验

完成实验后,请点击结束实验。Google Cloud Skills Boost 会移除您使用过的资源并为您清理帐号。

系统会提示您为实验体验评分。请选择相应的星级数,输入评论,然后点击提交

星级数的含义如下:

  • 1 颗星 = 非常不满意
  • 2 颗星 = 不满意
  • 3 颗星 = 一般
  • 4 颗星 = 满意
  • 5 颗星 = 非常满意

如果您不想提供反馈,可以关闭该对话框。

如果要留言反馈、提出建议或做出更正,请使用支持标签页。

版权所有 2024 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名称和产品名称可能是其各自相关公司的商标。

上一步 下一步

准备工作

  1. 实验会创建一个 Google Cloud 项目和一些资源,供您使用限定的一段时间
  2. 实验有时间限制,并且没有暂停功能。如果您中途结束实验,则必须重新开始。
  3. 在屏幕左上角,点击开始实验即可开始

此内容目前不可用

一旦可用,我们会通过电子邮件告知您

太好了!

一旦可用,我们会通过电子邮件告知您

一次一个实验

确认结束所有现有实验并开始此实验

使用无痕浏览模式运行实验

请使用无痕模式或无痕式浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。
预览