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

1. 准备工作

在继续学习此 Codelab 之前,需要注意以下事项。

前提条件

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

学习内容

  • 如何构建可根据您上传的数据解答您的问题的 Google 优质搜索引擎
  • 如何创建 Vertex AI Datastore
  • 如何创建 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 系统,该系统可以使用您上传的语料库来帮助回答您的问题。名为 Vertex AI Search/Agent Builder 的开箱即用 RAG 平台可帮助您加速构建 RAG 系统,从而避免您需完成手动收集文档、解析、分块、生成嵌入、查询扩展、候选人检索和排名等工作。虽然开箱即用的 RAG 系统可帮助您快速上手,但 Google Cloud 还为每个流程提供独立的 API,以构建您自己的 DIY RAG 系统,从而帮助微调您的 RAG 系统以满足您的业务需求。

构建内容

学完此 Codelab 后,您将部署一个正常运行的 RAG 系统,该系统可帮助您以事实信息、有依据并以正确的参考引用的方式回答您的问题。

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

2d055ded874603a6

应用的运作方式

  • 上传您的数据:用户可以上传自己的数据资料库,即 PDF 文件作为输入。
  • 在搜索栏中提问:用户可以根据上传的数据语料库在搜索栏中提问。
  • 检索答案:用户可以检索搜索结果/候选内容,并根据查询的相关性检查所检索答案的真实性/有依据性。

2. 环境设置

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

1829c3759227c19b

  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
  • 点击“创建存储分区”

adf5c0382f6c3540.png

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

731aead7d8497725

  • 点击“创建存储分区”

f7ac409ed9c4af21.png

4. 第 2 步:创建 Vertex AI Datastore

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

c4a67b92bb7900e3.png

  • 在 Agent Builder 页面上,点击左侧导航栏中所示的“Data Stores”

f86f67d344d398fb.png

  • 点击“Create Data Store”

e64e771f33543f46.png

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

3a8d22888e7eedc2

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

13876b5d12dbe1fb.png

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

618b7a456fbffad4

Brownie

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

38471c1d3411610d

5. 第 3 步:创建代理

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

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 实现,将有助于为前端创建与之交互的静态端点。
  • 前端 - 它将存储基于反应的应用并将提供界面。这还包含通过 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

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

aac35d55d7dd874e.png

  • 在“配置”区域
  • 为您的 Cloud Run 应用提供服务名称(在 Cloud Run 上部署应用时,这将是网址的一部分)
  • 选择合适的区域(在本例中为 us-central1 或您选择的任何区域)
  • 在“Authentication”(身份验证)下
  • 确保已选中“允许未通过身份验证的调用”
  • 在 CPU 分配和价格下
  • 选择“仅在请求处理期间分配 CPU”
  • 将 Service Auto Scaling 修改为 1(在生产环境中,建议运行最小实例数以处理每日流量,甚至可以保留 0,即 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 可为您提供更高的透明度、更强大的功能和效率,以有效处理流水线流程的每个环节。