搜索信息是人工智能技术最常见的用途之一, 生成式 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 宿主机。
如需安装所需的软件,请执行以下操作:
- 安装 Python 3 和适用于 Python 的
venv
虚拟环境软件包。
sudo apt update sudo apt install git pip python3-venv
- 安装 Python Poetry 来管理
项目。
curl -sSL https://install.python-poetry.org | python3 -
如果您扩展了 项目。
设置环境变量
设置允许使用 Google 文档代理代码所需的一些环境变量
要运行的项目,包括 Google Gemini API 密钥和 Python
诗歌背景。您可能需要将这些变量添加到 $HOME/.bashrc
文件中。
如果您使用的是 Linux,请将它们设为终端的默认设置
会话。
如需设置环境变量,请执行以下操作:
- 获取 Google Gemini API 密钥并复制密钥字符串。
- 将 API 密钥设置为环境变量。在 Linux 主机上,使用
export API_KEY=<YOUR_API_KEY_HERE>
- 解决已知错误
问题
方法是设置
PYTHON_KEYRING_BACKEND
参数。 在 Linux 主机上,请使用以下命令。
export PYTHON_KEYRING_BACKEND=keyring.backends.null.Keyring
克隆并配置项目
下载项目代码并使用 Poetry 安装命令下载 所需的依赖项并配置项目。您需要 git 源控制软件,用于检索 项目源代码。 外部 如需下载并配置项目代码,请执行以下操作:
- 使用以下命令克隆 git 代码库。
git clone https://github.com/google/generative-ai-docs
- (可选)配置您的本地 Git 代码库以使用稀疏检出,
因此您只有文档代理项目的文件。
cd generative-ai-docs/ git sparse-checkout init --cone git sparse-checkout set examples/gemini/python/docs-agent/
- 移至
docs-agent
项目的根目录
。cd examples/gemini/python/docs-agent/
- 运行 Poetry 安装命令,以下载依赖项并配置
项目:
poetry install
准备内容
文档代理项目旨在处理文本内容,其中包括 专门用于以 Markdown 作为源格式的网站。 如果您处理的是网站内容,则应保留(或复制) 所投放广告网站的目录结构,以启用内容处理任务 来映射和创建指向相应内容的链接。
根据内容的格式和详细信息,您可能需要清理 用于删除非公开信息、内部备注或其他信息的内容, 您不想被搜索到的信息您应保留基本格式,如 这样有助于创建逻辑文本拆分,即文本块 内容处理步骤。
如需准备内容以便进行处理,请执行以下操作:
- 为您希望 AI 代理搜索的内容创建一个目录。
mkdir docs-agent/content/
- 将您的内容复制到
docs-agent/content/
目录中。如果 内容是一个网站,因此应保留(或复制) 所投放广告的网站 - 根据需要清理或修改内容,以移除非公开信息;或 您不想包含在搜索中的其他信息。
使用 Flutter 文档进行测试
如果您需要一组内容来测试文档代理,可以使用 Flutter 开发者文档进行测试。
如需获取 Flutter 开发者文档,请执行以下操作:
- 移至您希望 AI 客服访问的内容所在的目录
搜索。
cd docs-agent/content/
- 将 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 格式内容,请执行以下操作:
- 通过修改
docs-agent/config.yaml
文件。本示例定位的是 Flutter 文档部分:
input: - path: "content/website/src/ui" url_prefix: "https://docs.flutter.dev/ui"
- 保存对此配置文件的更改。
- 前往
docs-agent
项目目录:
cd docs-agent/
- 运行
agent chunk
命令以拆分 Markdown 源内容:
agent chunk
脚本处理输入内容,并在
docs-agent/data
目录下,根据标题拆分文本,
相关段落。处理过程可能需要一些时间,具体取决于您的
内容。
创建文本嵌入向量
将内容拆分为适当大小且有意义的片段后, 可以使用文本嵌入将内容填充到矢量数据库中 函数。文档代理项目使用 Chroma 用于存储文本嵌入矢量的矢量数据库。以下说明介绍了如何 使用 Google 文档代理脚本通过您的拆分填充矢量数据库 内容。
如需生成文本嵌入并填充矢量数据库,请执行以下操作:
- 前往
docs-agent
项目目录:
cd docs-agent/
- 使用
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
来填充您的矢量数据库。如需详细了解与数据处理相关的
与文档代理搭配使用,请参阅文档代理
预处理自述文件。
测试应用
矢量数据库填充完毕后,项目即准备就绪 进行测试。该项目提供了一个打包功能,让您可以运行 项目。
如需运行和测试项目网页界面,请执行以下操作:
- 前往
docs-agent
项目目录:
cd docs-agent/
- 运行 Web 应用启动脚本:
agent chatbot
- 使用网络浏览器访问
输出启动脚本并测试应用。
* 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 以提高应用的可伸缩性和可靠性。