使用文档代理构建 AI 内容搜索

搜索信息是人工智能 (AI) 生成式模型最常见的用途之一。使用 AI 为您的内容构建对话式搜索界面,让用户能够提出具体问题并获得直接答案。

本教程介绍了如何为您的内容构建依托 AI 技术的对话式搜索界面。它基于 Docs Agent,这是一个开源项目,可使用 Google Gemini API 创建对话式搜索界面,而无需训练新的 AI 模型或使用 Gemini 模型进行模型调优。也就是说,您可以快速构建此搜索功能,并将其用于小型和大型内容集。

如需观看有关该项目及其扩展方式的视频简介(包括项目开发者的深入解析),请参阅:AI 内容搜索 | 使用 Google AI 进行构建。 否则,您可以按照以下说明开始扩展项目。

概览

Docs Agent 项目为特定内容集提供了对话式搜索界面,由 Google Gemini API 和生成式模型提供支持。用户可以以对话方式提出详细问题,并根据特定内容集获取详细答案。在后台,Google 文档助理会获取问题,并在内容的向量数据库中进行搜索,然后为生成式模型创建详细的提示,包括相关文本段落。生成式模型会生成对问题的回答,然后 Google 文档助理会设置回答的格式并将其呈现给用户。

Google 文档代理的工作原理图 图 1. Google 文档 Agent 项目应用的功能图。

要让 Google 文档助理能够回答与您的内容相关的问题,关键在于创建该内容的矢量数据库。您可以将内容拆分为逻辑文本块,并为每个文本块生成一个向量。这些矢量是每个分块中信息的数值表示,是使用 Google 生成式模型中的 AI 文本嵌入函数生成的。

当用户提出问题时,Google 文档客服助手会使用相同的文本嵌入函数来创建该问题的数字表示法,并使用该值搜索向量数据库以查找相关内容。它会获取前几条结果,并将这些信息添加到生成式模型的提示中。AI 模型会获取问题和其他背景信息,然后生成回答。

项目设置

以下说明将引导您设置 Docs Agent 项目,以便进行开发和测试。一般步骤包括安装一些必需软件、设置一些环境变量、从代码库克隆项目,以及运行配置安装。该代码项目使用 Python Poetry 来管理软件包和 Python 运行时环境。

安装必备组件

Docs Agent 项目使用 Python 3 和 Python Poetry 来管理软件包和运行应用。以下安装说明适用于 Linux 主机。

如需安装所需的软件,请执行以下操作:

  1. 安装 Python 3 和 Python 的 venv 虚拟环境软件包。
    sudo apt update
    sudo apt install git pip python3-venv
    
  2. 安装 Python Poetry 以管理项目的依赖项和打包。
    curl -sSL https://install.python-poetry.org | python3 -
    

如果您要扩展项目,可以使用 Python Poetry 添加更多 Python 库。

设置环境变量

设置一些环境变量,这些变量是运行 Docs 客服人员代码项目所必需的,包括 Google Gemini API 密钥和 Python Poetry 设置。如果您使用的是 Linux,则可能需要将这些变量添加到 $HOME/.bashrc 文件中,以将其设为终端会话的默认设置。

如需设置环境变量,请执行以下操作:

  1. 获取 Google Gemini API 密钥并复制密钥字符串。
  2. 将 API 密钥设置为环境变量。在 Linux 主机上,使用以下命令。
    export API_KEY=<YOUR_API_KEY_HERE>
    
  3. 通过设置 PYTHON_KEYRING_BACKEND 参数,解决 Python Poetry 的已知问题。在 Linux 主机上,使用以下命令。
    export PYTHON_KEYRING_BACKEND=keyring.backends.null.Keyring
    

克隆并配置项目

下载项目代码,然后使用 Poetry 安装命令下载所需的依赖项并配置项目。您需要 git 源代码控制软件才能检索项目源代码。external 如需下载和配置项目代码,请执行以下操作:

  1. 使用以下命令克隆 Git 代码库。
    git clone https://github.com/google/generative-ai-docs
    
  2. (可选)将本地 Git 代码库配置为使用稀疏检出,以便您只拥有 Docs Agent 项目的文件。
    cd generative-ai-docs/
    git sparse-checkout init --cone
    git sparse-checkout set examples/gemini/python/docs-agent/
    
  3. 移至 docs-agent 项目根目录。
    cd examples/gemini/python/docs-agent/
    
  4. 运行 Poetry 安装命令以下载依赖项并配置项目:
    poetry install
    

准备内容

Docs Agent 项目专为处理文本内容而设计,其中包含专门用于处理使用 Markdown 作为源格式的网站的工具。如果您要处理网站内容,则应保留(或复制)所提供网站的目录结构,以便内容处理任务能够映射并创建指向相应内容的链接。

根据内容的格式和详细信息,您可能需要清理内容,以移除不公开的信息、内部备注或您不希望可供搜索的其他信息。您应保留标题和标题等基本格式,这有助于在内容处理步骤中创建逻辑文本分块。

如需准备内容以供处理,请执行以下操作:

  1. 为您希望 AI 智能体搜索的内容创建一个目录。
    mkdir docs-agent/content/
    
  2. 将内容复制到 docs-agent/content/ 目录。如果内容是网站,请保留(或复制)所提供网站的目录结构。
  3. 根据需要清理或修改内容,以移除不公开的信息或您不希望在搜索结果中显示的其他信息。

使用 Flutter 文档进行测试

如果您需要一组内容来测试 Docs 客服人员,可以使用 Flutter 开发者文档进行测试。

如需获取 Flutter 开发者文档,请执行以下操作:

  1. 前往您希望 AI 客服人员搜索的内容所在的内容目录。
    cd docs-agent/content/
    
  2. 将 Flutter 文档克隆到 docs-agent/content/ 目录。
    git clone --recurse-submodules https://github.com/flutter/website.git
    

处理内容

为了让搜索代理能够有效搜索与用户问题相关的内容,您需要构建一个包含代表您内容的矢量的数据库。这些向量是使用名为文本嵌入的 AI 生成式模型函数生成的。文本嵌入是文本内容的数值表示法。它们以一组数字来近似表示文本的语义含义。通过对信息进行数值化表示,系统可以获取用户的问题,使用相同的文本嵌入函数近似推断其含义,然后使用k 最近邻 (k-NN) 算法以数学计算的方式查找相关信息。

拆分文本内容

文本嵌入向量能够有效表示的文本量是有限的。此项目将矢量中表示的文字限制为 3, 000 个字符或更少,这意味着您必须将内容拆分成不超过该字符数限制的多个部分。本部分介绍了如何使用 Docs Agent 项目随附的脚本将 Markdown 文件拆分为较小的文本块。如需有关使用其他内容格式的提示,请参阅处理其他格式

如需拆分 Markdown 格式内容,请执行以下操作:

  1. 通过修改 docs-agent/config.yaml 文件,为处理脚本配置输入参数。此示例定位到 Flutter 文档的一部分:
    input:
    - path: "content/website/src/ui"
      url_prefix: "https://docs.flutter.dev/ui"
  2. 将所做的更改保存到此配置文件。
  3. 导航到 docs-agent 项目目录:
    cd docs-agent/
    
  4. 运行 agent chunk 命令,拆分 Markdown 源内容:
    agent chunk
    

该脚本会处理输入内容,并在 docs-agent/data 目录中创建输出文本文件,并根据标题、标题和相关段落拆分文本。处理可能需要一些时间,具体取决于内容的大小。

创建文本嵌入向量

将内容拆分为大小适当且有意义的块后,您可以使用文本嵌入函数将内容填充到向量数据库中。Docs Agent 项目使用 Chroma 向量数据库存储文本嵌入向量。以下说明介绍了如何使用 Google 文档代理脚本将分屏内容填充到矢量数据库中。

如需生成文本嵌入并填充矢量数据库,请执行以下操作:

  1. 导航到 docs-agent 项目目录:
    cd docs-agent/
    
  2. 使用 agent populate 命令将内容填充到矢量数据库中:
    agent populate
    

此脚本使用 Google Gemini API 生成文本嵌入向量,然后将输出保存到向量数据库。处理可能需要一段时间,具体取决于内容的大小。

处理其他格式

Google 文档代理项目专为处理 Markdown 格式的网站内容而设计。项目作者构建了一些转换脚本,用于将其他类型的内容生成为 Markdown 格式,包括 Google 文档、便携式文档格式 (PDF) 和 Gmail。如需详细了解如何使用这些转换器,请参阅代码库的 docs-agent/apps_script 目录。

转换其他内容格式

您可以将其他内容格式与该项目搭配使用,但这些额外的方法需要由您或社区的其他成员构建。查看代码库的问题拉取请求,了解其他人构建类似解决方案的情况。

您需要构建的关键代码(以支持其他内容格式)是分屏脚本,例如 files_to_plain_text.py 脚本。目标是构建一个脚本或程序,使其生成与此脚本类似的输出。请注意,最终的文本输出应尽可能少采用格式设置和附加信息。如果您使用的是 HTML 或 JSON 等内容格式,请务必尽可能移除非信息性格式(标记、脚本、CSS),以免这些格式扭曲您从中生成的文本嵌入的值。

为内容格式构建分屏脚本后,您应该能够运行 populate_vector_database.py 脚本来填充矢量数据库。如需详细了解如何处理要与文档代理搭配使用的文件,请参阅文档代理预处理自述文件

测试应用

填充完矢量数据库后,项目就可以进行测试了。该项目提供了一个打包函数,可让您在本地运行该项目。

如需运行和测试项目 Web 界面,请执行以下操作:

  1. 导航到 docs-agent 项目目录:
    cd docs-agent/
    
  2. 运行 Web 应用启动脚本:
    agent chatbot
    
  3. 使用网络浏览器,前往启动脚本输出中显示的网址,然后测试应用。
    * Running on http://your-hostname-here:5000
    

实现选项

Gemini API 提供了可替换 Google 文档智能助理实现组件的编程工具,具体而言:语义检索和归因问题解答 (AQA) Gemini 模型变体。您可以使用 Gemini API 的语义检索功能来替换单独的矢量数据库。借助“语义检索”功能,您可以为内容生成嵌入,并存储这些内容。AQA Gemini 模型经过调优,可根据提示中提供的来源材料回答问题。您可以将语义检索与 AQA 模型结合使用,在 Gemini API 中回答有关内容的问题

Docs 客服人员包含用于使用 Semantic Retrieval API 功能或 AQA Gemini 模型(或两者兼用)的配置选项。如需了解详情,请参阅 Docs 代理自述文件

其他资源

如需详细了解 Docs 代理项目,请参阅代码库。如果您在构建应用时需要帮助,或者正在寻找开发者协作者,请访问 Google 开发者社区 Discord 服务器。

正式版应用

如果您打算面向大量受众群体部署 Google 文档客服助理,请注意,您在使用 Google Gemini API 时可能会受到速率限制和其他使用限制。如果您考虑使用 Gemini API 构建生产应用(例如 Google 文档客服),请查看 Google Cloud Vertex AI 服务,以提高应用的可伸缩性和可靠性。