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

1. 准备工作

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

前提条件

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

学习内容

  • 如何构建一个 Google 品质的搜索引擎,从您上传的数据中回答您的问题
  • 如何创建 Vertex AI 数据存储区
  • 如何创建 Vertex AI Agents
  • 如何利用 CloudRun 部署应用

所需条件

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

简介

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

RAG 的工作原理是首先从文档语料库中检索相关段落。为此,您可以使用各种方法,例如关键字匹配、语义相似度和机器学习。检索到相关段落后,系统会使用这些段落生成摘要或回答用户的查询。

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

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

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

以下是 RAG 在实际中的应用示例:

  • 许多搜索系统都使用 RAG 生成与用户查询相关的搜索结果。
  • 聊天机器人使用 RAG 为用户的问题生成既有参考价值又有吸引力的回答。
  • 问答系统使用 RAG 生成准确、全面的用户问题解答。

RAG 是一种多用途技术,可用于在各种领域和应用中生成文本。它是一款功能强大的工具,有助于提升 AI 的智能程度和信息量。

在此 Codelab 中,我们将构建一个 RAG 系统,该系统可以根据您上传的提供的语料库帮助回答您的问题。开箱即用的 RAG 平台 Vertex AI Search/Agent Builder 可帮助您加快构建 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

  • 在“代理构建器”页面上,点击左侧导航栏中的“数据存储区”

f86f67d344d398fb.png

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

e64e771f33543f46.png

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

3a8d22888e7eedc2

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

13876b5d12dbe1fb.png

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

618b7a456fbffad4

Brownie

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

38471c1d3411610d

5. 第 3 步:创建代理

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

ae5294e33f63567c.png

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

f8a41c9751f7a8d3.png

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

bc77006e0025ae9e.png

6. 第 4 步:对应用进行 Docker 化

  • 在 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 映像(注意:在使用 M1、M2 等 Apple Silicon 芯片的 Macbook 中构建 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,也可以选择任何其他区域)
  • 在“Authentication”(身份验证)下
  • 确保已选择“允许未经身份验证的调用”
  • 在 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 仅用于演示目的,对于生产用例,您必须设置更多安全措施和防护措施。完整代码库的链接在此处。只需 5 个步骤,您就可以利用 Google Cloud 生成端到端 RAG 系统,该系统可在几分钟内为您提供 Google 品质的结果。随着生成式 AI 和大语言模型的不断发展,构建此类 RAG 系统还有助于我们避免出现幻觉和显示未引用信息的陷阱。

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