使用 Vertex AI 构建 Google 品质的搜索系统

1. 准备工作

在继续学习本 Codelab 之前,请注意以下几点。

前提条件

  • 对 LLM 有基本的了解
  • 对 RAG 系统有基本的了解

学习内容

  • 如何构建一个 Google 品质的搜索引擎,该引擎可以根据您上传的数据回答您的问题
  • 如何创建 Vertex AI 数据存储区
  • 如何创建 Vertex AI 智能体
  • 如何利用 Cloud Run 部署应用

所需条件

  • Google Cloud 账号
  • Google Cloud 项目
  • 带有终端的 IDE

简介

Google 搜索是一款功能强大的工具,它使用庞大的网页和其他内容索引,为用户查询提供相关结果。这得益于一种称为“检索增强生成”(RAG) 的技术,该技术是现代 AI 的关键技术。

RAG 的工作方式是,首先从文档语料库中检索相关段落。这可以通过多种方法实现,例如关键字匹配、语义相似度和机器学习。检索到相关段落后,系统会使用这些段落生成摘要或回答用户的问题。

RAG 的主要优势在于,它能让语言模型避免出现幻觉。“幻觉”一词用于描述生成文档语料库中的证据不支持的文本。如果语言模型无法区分相关信息和不相关信息,就可能会出现这种情况。

RAG 可确保生成的文本始终基于文档语料库中的证据,从而有助于避免幻觉。这使得它成为更可靠、更值得信赖的信息来源。

RAG 是一种强大的技术,已广泛应用于各种应用,包括搜索引擎、聊天机器人和问答系统。在未来几年内,它可能会在 AI 领域发挥越来越重要的作用。

以下是一些 RAG 的实际应用示例:

  • 许多搜索系统都使用 RAG 来生成与用户查询相关的搜索结果。
  • 聊天机器人使用 RAG 生成信息丰富且富有吸引力的用户问题回答。
  • 问答系统使用 RAG 生成准确而全面的用户问题答案。

RAG 是一种多用途技术,可用于在各种领域和应用中生成文本。它是一种强大的工具,有助于让 AI 变得更加智能和信息丰富。

在此 Codelab 中,我们将构建一个 RAG 系统,该系统可以根据您上传的语料库回答您的问题。Vertex AI Search/Agent Builder 是一款开箱即用的 RAG 平台,可帮助您快速构建 RAG 系统,从而避免手动收集文档、解析、分块、生成嵌入、查询扩展、候选检索和排名。虽然开箱即用的 RAG 系统可帮助您快速入门,但 Google Cloud 还为每个流程提供离散的 API,以便您构建自己的 DIY RAG 系统,从而帮助您微调 RAG 系统以满足业务需求。

构建内容

在此 Codelab 结束时,您将部署一个可正常运行的 RAG 系统,该系统可以根据事实信息回答您的问题,并提供正确的参考资料作为依据和引用。

您还将更好地了解如何使用 Vertex AI Search API 在 Google Cloud 上构建此 RAG 架构。此外,您还将学习如何在 Cloud Run 上部署此 RAG 架构应用(包含前端和后端),Cloud Run 是一个无服务器平台,可在 Google Cloud 上以容器形式部署应用。

2d055ded874603a6.png

申请流程

  • 上传数据:用户可以上传自己的数据语料库(即 PDF 文件)作为输入。
  • 在搜索栏中提出查询:用户可以在搜索栏中根据上传的数据集提出问题。
  • 检索答案:用户可以检索搜索结果/候选答案,并根据查询的相关性检查检索到的答案的事实性/依据。

2. 环境设置

  1. Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目
  2. 确保您的 Google Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能
  3. 您将使用 Cloud Shell,它是在 Google Cloud 中运行的命令行环境。如需访问该工具,请点击 Google Cloud 控制台顶部的“激活 Cloud Shell”。

1829c3759227c19b.png

  1. 连接到 Cloud Shell 后,您可以使用以下命令检查自己是否已通过身份验证,以及项目是否已设置为您的项目 ID:
gcloud auth list
  1. 在 Cloud Shell 中运行以下命令,以确认 gcloud 命令了解您的项目。
gcloud config list project
  1. 如果项目未设置,请使用以下命令进行设置:
gcloud config set project <YOUR_PROJECT_ID>
  1. 确保已启用以下 API:
  • Cloud Run
  • Vertex AI
  • Cloud Storage

除了使用 gcloud 命令之外,您还可以通过此链接在控制台中完成操作。如需了解 gcloud 命令和用法,请参阅文档

3. 第 1 步:创建 GCP 存储分区

  • 前往控制台,然后在搜索栏中输入“Cloud Storage”。
  • 从建议的结果中选择 Cloud Storage。21d2bc910e71f7ec.png
  • 点击“创建存储分区”

adf5c0382f6c3540.png

  • 为存储分区提供全局唯一的名称
  • 点击“继续”
  • 在“位置类型”中,选择“多区域”
  • 在下拉菜单中,请务必选择 us (multiple regions in United States) 选项

731aead7d8497725.png

  • 点击“创建存储分区”

f7ac409ed9c4af21.png

4. 第 2 步:创建 Vertex AI 数据存储区

  • 在控制台页面的搜索栏中,输入“Vertex AI Agent Builder”
  • 选择第一个产品“Agent Builder”

c4a67b92bb7900e3.png

  • 在 Agent Builder 页面上,点击左侧导航栏中的“数据存储区”,如图所示

f86f67d344d398fb.png

  • 点击“创建数据存储区”

e64e771f33543f46.png

  • 选择 Cloud Storage 作为数据存储区
  • 点击 Cloud Storage 图标下方的“选择”

3a8d22888e7eedc2.png

  • 在“文件夹”选项下方的标签页中,点击“浏览”按钮
  • 选择您在第 1 步中创建的存储分区
  • 在以下选项中,请务必选择“链接的非结构化文档(包含元数据的 JSONL)”
  • 点击“继续”

13876b5d12dbe1fb.png

  • 在“配置”页面上,选择“全球”作为数据存储区的位置
  • 为数据存储区提供一个易于识别的名称
  • 点击“创建”

618b7a456fbffad4.png

Brownie

  • 在“创建”按钮的正上方,您可以看到文档处理选项。
  • 您可以尝试使用不同的解析器,例如数字解析器、OCR 解析器或布局解析器
  • 您还可以启用高级分块并提供自己的自定义分块大小限制

38471c1d3411610d.png

5. 第 3 步:创建 Agent

  • 创建数据存储区后,点击左侧导航栏中的应用,然后选择“应用”
  • 点击“创建应用”按钮
  • 选择应用类型为“搜索”(您还可以创建代理、对话机器人、推荐等)

ae5294e33f63567c.png

  • 确保在“内容”下方选择“通用”。您还可以根据要构建的数据存储区、数据类型和系统来选择“媒体”或“推荐”。
  • 确保同时开启企业版和高级 LLM 功能
  • 提供您的申请名称
  • 提供贵公司的名称

f8a41c9751f7a8d3.png

  • 请务必选择“全球”作为区域
  • 点击“继续”ed17b18e094ba59a.png
  • 在下一个界面中,选择您在第 2 步中创建的数据存储区
  • 点击“创建”

bc77006e0025ae9e.png

6. 第 4 步:将应用容器化

  • 在 Google Cloud 控制台中打开终端
  • 使用以下命令克隆代码库 <sample_repository_link>

git clone https://github.com/kkrishnan90/vertex-ai-search-agent-builder-demo

  • 使用以下命令更改目录并导航到克隆的代码库

cd vertex-ai-search-agent-builder-demo

  • 文件夹结构
  • 后端 - 这将包含一个基于 Python 的 API 实现,可帮助您创建前端可与之交互的 RESTful 端点。
  • 前端 - 这将包含一个基于 React 的应用,并提供界面。它还将包含通过 REST 端点向后端发出的必要应用级调用
  • Dockerfile - 此文件将包含用于创建 Docker 容器的所有相关命令
  • 在代码库目录的根目录下,运行以下命令,该命令将有助于构建 Docker 映像(注意:在 MacBook 中构建使用 Apple Silicon 芯片(如 M1、M2 等)的 Docker 容器时,请务必使用 - - platform 标志。如果您使用 Windows 机器进行构建,或者您的 CPU 架构基于 Intel,则无需使用此标志)

docker build --platform linux/amd64 -t your-image-name .

  • 成功构建 Docker 容器后,运行以下命令来使用正确的标记标记容器,以确保您提供映像的版本。请注意,应用可能有多个版本,因此 Docker 容器中也可能有多个版本作为代码。从 DevOps 角度来看,确保始终使用最新的稳定版本是一种很好的推荐方法。

docker tag your-image-name REGION-docker.pkg.dev/PROJECT-ID/REPOSITORY-NAME/IMAGE-NAME:TAG

  • 成功标记 Docker 容器映像后,我们现在将映像推送到 Google Artifact Registry (GAR)。GAR 是 Google 提供的完全托管式平台,可帮助您管理 Docker 容器并进行版本控制。运行以下命令,将上述已标记的容器推送到 GAR。如需了解详情,请参阅以下链接 [ https://cloud.google.com/artifact-registry/docs/docker/pushing-and-pulling]

docker push REGION-docker.pkg.dev/PROJECT-ID/REPOSITORY-NAME/IMAGE-NAME:TAG

7. 第 5 步:在 Cloud Run 上部署应用

  • 最小化终端。在 Google Cloud 控制台搜索栏中,搜索 Cloud Run
  • 点击建议的 Cloud Run 产品

592103eb61c16738.png

  • 点击“创建服务”
  • 在下一页中,确保选中“从现有容器映像部署一个修订版本”
  • 点击下方的“选择”
  • 系统现在会在右侧显示一个导航栏。
  • 确保检查 Artifact Registry 是否已选为标签页
  • 确保检查项目是否已正确选择
  • 点击箭头展开已部署的容器映像链接上的手风琴
  • 选择容器代码并展开(始终选择已部署的最新代码 - 具有正确的最新标记,即 v1、v2 等)
  • 点击容器标记名称下方显示的容器映像

aac35d55d7dd874e.png

  • 在“配置”区域中
  • 为 Cloud Run 应用提供服务名称(当您在 Cloud Run 上部署应用时,此名称将成为网址的一部分)
  • 选择适当的区域(在本例中为 us-central1 或您选择的任何区域)
  • 在“身份验证”下
  • 确保选中“允许未经身份验证的调用”
  • 在“CPU 分配和价格”下
  • 选择“仅在请求处理期间才分配 CPU”
  • 将服务自动扩缩修改为 1(出于生产目的,建议运行最少的实例来处理日常流量,您甚至可以将其保留为 0,即零)
  • 将“入站流量控制”设置为“全部”,以允许来自互联网的流量访问您的应用
  • 点击“创建”
  • 这会部署一个 Cloud Run 实例,而预配该实例可能需要几分钟时间

b8b147265b8d457b.png

  • 部署完成后,您将能够看到可用于访问 Web 应用的公开网址

1dfdb007c52581a1.png

8. 所有这一切是如何做到的

  • 进入应用的首页后,点击“上传证件”按钮
  • 上传 PDF 文件
  • 上传完成后
  • 点击网页顶部的搜索栏
  • 开始搜索与上传的文档相关的查询
  • 输入查询内容并点击“搜索”后,系统应会显示您刚刚上传的文档中的所有相关答案
  • 您可以查看后端代码并添加更多配置(如下所示),自行尝试
  • 添加代码段
  • 添加提取式片段
  • 添加答案
  • 调整前 k 个结果,以帮助 LLM 总结答案(类似于 Google 搜索中的 AI 概览)
  • 作为插件,您还可以在上传文档时添加元数据标记。这有助于生成多面搜索和可过滤的类别

9. 清理

为避免系统因本 Codelab 中使用的资源向您的 Google Cloud 账号收取费用,请按照以下步骤操作:

  1. 在 Google Cloud 控制台中,前往管理资源页面。
  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关停以删除项目。
  4. 或者,您也可以在控制台中前往 Cloud Run,选择刚刚部署的服务,然后将其删除。

10. 恭喜

恭喜!您已成功使用由 Google 提供支持的先进模型构建了一个开箱即用的快速 RAG 系统,可为您的搜索查询提供 Google 品质的搜索结果。本 Codelab 仅用于演示目的,对于生产用例,必须设置更多安全措施和防护措施。点击此处可查看完整的代码库。借助 Google Cloud,只需 5 个步骤,我们就能生成一个端到端 RAG 系统,该系统可在几分钟内为您提供开箱即用的 Google 质量结果。随着生成式 AI 和大语言模型的发展,构建此类 RAG 系统还有助于我们避免出现幻觉和显示未引用信息等陷阱。

虽然这只是一个起点,但我们可以利用完全可自定义的 DIY RAG API 创造奇迹,该 API 可为您提供更高的透明度、更强大的功能和更高的效率,以便您有效地处理流水线流程的每个环节。