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

搜索信息是人工智能技术最常见的用途之一, 生成式 AI 模型。构建对话式搜索界面 借助 AI 技术,用户可以提出具体的问题 直接回答。

本教程介绍了如何构建依托 AI 技术的对话式搜索 内容界面其依据是 文档代理, 一个使用 Google Gemini API 创建对话 搜索界面,无需训练新的 AI 模型或使用 Gemini 模型。这意味着,您只需要快速构建好这一搜索功能, 适用于小型和大型内容集。

通过视频简要了解项目以及如何扩展项目(包括数据洞见) 请观看: AI 内容搜索 |使用 Google AI 构建。 否则,您可以按照说明开始扩展项目 。

概览

Google 文档代理项目为特定的、 由 Google Gemini API 和生成模型提供支持。用户可以 以对话的方式提出详细的问题,然后得到详细的答案 进行微调。在后台,文档代理负责 问题和搜索内容的矢量数据库,并创建 生成模型的详细提示,包括相关文本的片段。 生成模型生成对问题和文档代理的响应 设置响应的格式并将其呈现给用户。

文档代理的功能图 图 1. 文档代理项目应用的功能图。

要让文档代理能够回答有关您的内容的问题,关键在于 创建内容的矢量数据库。您将内容分成 并为每个文本块生成向量。这些向量 每个分块中的信息的数字表示形式, 一个基于 Google 生成模型的 AI 文本嵌入函数。

当用户提问时,文档代理会使用相同的文本嵌入 函数来创建该问题的数字表示形式,并使用 值来搜索矢量数据库并查找相关内容。它占据了 并将这些信息添加到生成模型的提示中。AI 模型会获取问题和其他上下文信息, 回答。

项目设置

这些说明将指导您为 开发和测试。常规步骤包括安装一些必备项 软件、设置一些环境变量、从代码克隆项目 然后运行配置安装代码项目使用 Python Poetry 用于管理软件包和 Python 运行时环境

安装必备项

Google 文档代理项目使用 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 -
    

如果您扩展了 项目。

设置环境变量

设置允许使用 Google 文档代理代码所需的一些环境变量 要运行的项目,包括 Google Gemini API 密钥和 Python 诗歌背景。您可能需要将这些变量添加到 $HOME/.bashrc 文件中。 如果您使用的是 Linux,请将它们设为终端的默认设置 会话。

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

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

克隆并配置项目

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

  1. 使用以下命令克隆 git 代码库。
    git clone https://github.com/google/generative-ai-docs
    
  2. (可选)配置您的本地 Git 代码库以使用稀疏检出, 因此您只有文档代理项目的文件。
    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
    

准备内容

文档代理项目旨在处理文本内容,其中包括 专门用于以 Markdown 作为源格式的网站。 如果您处理的是网站内容,则应保留(或复制) 所投放广告网站的目录结构,以启用内容处理任务 来映射和创建指向相应内容的链接。

根据内容的格式和详细信息,您可能需要清理 用于删除非公开信息、内部备注或其他信息的内容, 您不想被搜索到的信息您应保留基本格式,如 这样有助于创建逻辑文本拆分,即文本块 内容处理步骤。

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

  1. 为您希望 AI 代理搜索的内容创建一个目录。
    mkdir docs-agent/content/
    
  2. 将您的内容复制到 docs-agent/content/ 目录中。如果 内容是一个网站,因此应保留(或复制) 所投放广告的网站
  3. 根据需要清理或修改内容,以移除非公开信息;或 您不想包含在搜索中的其他信息。

使用 Flutter 文档进行测试

如果您需要一组内容来测试文档代理,可以使用 Flutter 开发者文档进行测试。

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

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

处理内容

为了使搜索代理能有效搜索与以下内容相关的内容: 用户的您需要构建一个矢量数据库, 内容。这些向量是使用名为 文本嵌入。文本嵌入是文本的数字表示形式 内容。它们将文本的语义含义近似为一组 数字。使用信息的数字表示法可以让系统 使用相同的文本嵌入来估计用户的问题的含义 函数,然后使用 k 最近邻 (k-NN) 算法。

拆分文本内容

文本嵌入向量可以有效表示的文本量为 受限。此项目将矢量中表示的文本限制为 3000 个字符 也就是说,您必须将内容拆分为多个小区块 字符数上限。本部分介绍如何使用 文档代理项目,用于将 Markdown 文件拆分为多个较小的文本块。如需关于 请参阅 处理其他格式

<ph type="x-smartling-placeholder">

如需拆分 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 目录下,根据标题拆分文本, 相关段落。处理过程可能需要一些时间,具体取决于您的 内容。

创建文本嵌入向量

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

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

  1. 前往 docs-agent 项目目录:
    cd docs-agent/
    
  2. 使用 agent populate 使用您的内容填充矢量数据库 命令:
    agent populate
    

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

处理其他格式

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

转换其他内容格式

您可以在项目中使用其他内容格式 您需要由您或社区的其他成员构建其他方法。 检查代码库 问题拉取请求 有助于构建类似解决方案的人员。

为支持其他内容格式而构建的关键代码是分屏器 例如 files_to_plain_text.py 脚本。力求构建一个脚本或程序来生成与此类似的输出内容 脚本。请注意,最终文本输出应尽量少的格式和 额外信息如果您使用的是 HTML 或 JSON 等内容格式, 请务必删除尽可能多的非信息格式(标记、 脚本、CSS)中的文字,以免其 生成嵌入。

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

测试应用

矢量数据库填充完毕后,项目即准备就绪 进行测试。该项目提供了一个打包功能,让您可以运行 项目。

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

  1. 前往 docs-agent 项目目录:
    cd docs-agent/
    
  2. 运行 Web 应用启动脚本:
    agent chatbot
    
  3. 使用网络浏览器访问 输出启动脚本并测试应用。
    * Running on http://your-hostname-here:5000
    

实现选项

Gemini API 提供的编程工具可以取代 文档代理实现,具体来说就是:语义检索和归因 问答 (AQA) Gemini 模型变体。您可以使用 Gemini API 的 语义检索 功能取代单独的矢量数据库。语义检索功能 可让您为自己的内容生成嵌入并存储该内容。通过 AQA Gemini 模型针对 使用提示中提供的来源资料回答问题。您使用语义 与 AQA 模型一起进行检索, 回答问题 在 Gemini API 中全面管理您的内容。

文档代理包含一些配置选项,供您使用 Retrieval API 功能、AQA Gemini 模型或两者。如需了解详情,请参阅 该 文档代理自述文件

其他资源

有关文档代理项目的详细信息,请参阅 代码库。 如果您需要构建应用方面的帮助或正在寻找开发者 请参阅 Google 开发者社区 Discord 服务器。

生产应用

如果您打算为大量目标对象部署 Google 文档代理,请注意, Google Gemini API 可能会受到速率限制和其他 使用限制。 如果您在考虑使用 Gemini API 构建正式版应用,比如 文档代理,请查看 Google Cloud Vertex AI 以提高应用的可伸缩性和可靠性。