我之前写过关于构建你自己的简单生成式搜索引擎,以及在Towards Data Science上的VerifAI项目。然而,有一个重大更新值得重新审视。最初,VerifAI 是作为带有参考和AI验证答案的生物医学生成搜索引擎开发的。该版本仍然可以使用,现在我们称它为VerifAI BioMed。你可以在这里访问:https://app.verifai-project.com/。
不过,最大的更新是现在你可以索引本地文件并将它们转化为自己的生成式搜索工具(或如有些人所说,基于GenAI的生产力助手)。它也可以作为一个企业或组织的生成式搜索工具。我们称此版本为 VerifAI Core ,它为其他版本提供了坚实的基础。在这篇文章里,我们将展示如何通过几个简单的步骤来部署和使用它。因为它是用Python编写的,所以可以在任何操作系统上运行。
建筑描述生成式搜索引擎的最佳方法是将其分为三个部分,在我们的情况下是三个模块:
- 索引
- 增强检索生成方法(RAG 方法)
- VerifAI 包含一个额外的组件,即验证引擎,除此之外,VerifAI 还具备常规生成搜索功能之外的功能
在 VerifAI 中,可以通过将索引脚本指向包含 PDF、MS Word、PowerPoint、纯文本或 Markdown (.md) 文件的本地文件夹来进行索引。该脚本将读取并索引这些文件。索引过程是在词汇和语义两个层面上进行的。
在词汇索引方面,VerifAI 使用 OpenSearch。对于语义索引,它将文档切分成块并使用配置文件中指定的嵌入模型(支持 Hugging Face 的模型)进行向量化,随后将这些向量存储在 Qdrant 中。下图展示了这一过程。
索引架构(作者绘制)
说到用VerifAI回答问题时,这个过程有点复杂。用户的提问会进行预处理(比如,会去掉一些常见的无意义词汇),然后转化为查询。
对于 OpenSearch ,仅进行词汇处理,例如排除停用词,并查找最相关的文档。对于 Qdrant ,查询被转换成嵌入向量,使用与之前存储文档片段时相同的模型。然后用这些嵌入向量去查询 Qdrant,根据 点积相似度 找到最相似的文档。使用点积是因为它同时考虑了向量的角度和幅度。
最后,两个引擎的结果需要合并。这是通过将每个引擎的检索分数标准化为0到1之间的值来实现的(通过将每个分数除以其相应引擎的最高分实现)。然后将对应同一文档的分数相加,并按其合并分数从高到低排序。
根据检索到的文档来构建提示。提示包含说明、最相关的文档和用户的问题。然后将此提示传递给所选择的大型语言模型(该模型可以在配置文件中指定,如果没有设置模型,则默认使用我们本地部署的经过微调的 Mistral 版本)。最后,应用验证工具以确保没有错误信息,并通过 GUI 向用户展示答案。此过程的示意图如下所示。
检索、生成和验证的架构图如下(作者绘制的图片)。该模型基于这些论文的组合:这些链接:https://arxiv.org/pdf/2407.11485,https://aclanthology.org/2024.bionlp-1.44/
安装所需的库要安装VerifAI生成搜索工具,你可以从GitHub克隆最新的代码仓库或使用其中一个可用的版本。
git clone https://github.com/nikolamilosevic86/verifAI.git
克隆代码库的命令如上所示。
在安装 VerifAI Search 时,建议首先创建一个干净的 Python 环境,比如使用 virtualenv 或 conda 创建。我曾用 Python 3.6 测试过,大多数 Python 3 版本应该都可以正常使用。然而,使用 Python 3.10 及以上版本可能会遇到一些依赖项的兼容性问题。
要创建一个Python环境,可以这样做:如下使用venv
库。
运行命令:python -m venv verifai
然后运行:source verifai/bin/activate
激活环境后,你可以安装所需的库。需求文件所在位置在verifAI/backend
目录中。在verifAI/backend
目录中,你可以运行以下命令来安装所有依赖。
pip安装命令 `pip install -r requirements.txt` 用于安装requirements.txt文件中列出的所有依赖项。
注意:该命令无需翻译,因为它是一个通用的技术命令。
设置系统接下来的步骤是配置VerifAI及其与其他工具的交互方式。这可以通过直接设置环境变量值来完成,或者通过使用环境文件(推荐的做法)来完成。
一个针对VerifAI的环境文件示例文件名为.env.local.example
,位于backend
文件夹中。你可以将它重命名为.env
,VerifAI的后端会自动读取。文件结构如下:
SECRET_KEY=6293db7b3f4f67439ad61d1b798242b035ee36c4113bf870
ALGORITHM=HS256
DBNAME=verifai_database
USER_DB=myuser
PASSWORD_DB=mypassword
HOST_DB=localhost
OPENSEARCH_IP=localhost
OPENSEARCH_USER=admin
OPENSEARCH_PASSWORD=admin
OPENSEARCH_PORT=9200
OPENSEARCH_USE_SSL=False
QDRANT_IP=localhost
QDRANT_PORT=6333
QDRANT_API=8da7625d78141e19a9bf3d878f4cb333fedb56eed9097904b46ce4c33e1ce085
QDRANT_USE_SSL=False
OPENAI_PATH=<模型部署路径>
OPENAI_KEY=<模型部署密钥>
OPENAI_DEPLOYMENT_NAME=<模型部署名称>
MAX_CONTEXT_LENGTH=128000
使用验证 = True
EMBEDDING_MODEL="sentence-transformers/msmarco-bert-base-dot-v5"
索引名称_词典 = 'myindex-lexical'
索引名称_语义 = "myindex-semantic"
有些变量非常直接。所谓的第一个密钥和算法用于前端和后端之间的通讯。
然后有一些变量用于配置访问PostgreSQL数据库。它需要数据库名称(数据库名)、用户名、密码以及数据库所在主机。在这里,数据库位于本地主机上的Docker镜像中。
下一个部分是OpenSearch访问的设置。这里包括IP地址、用户名、密码、端口号(默认端口是9200),以及是否启用SSL的设置。我们这里使用localhost。
类似地,有一个专门用于Qdrant的配置部分,如下所示,我们使用一个API密钥,需要在这里定义。
接下来的部分定义了生成模型。VerifAI 使用 OpenAI 的 Python 库,该库已成为行业标准,并允许它使用 OpenAI API、Azure API,以及通过 vLLM、OLlama 或Nvidia NIMs 部署的用户端口。用户需要定义接口路径和 API 密钥,以及将要使用的模型部署名称。很快我们就会支持,允许用户修改或更改生成提示。如果未提供接口路径和 API 密钥,模型将下载我们微调过的 Mistral 7B 模型及其 QLoRA 适配器,并在本地部署。然而,如果您没有足够的 GPU 内存或内存,这可能会失败或运行极其缓慢。
你可以设置 MAX_CONTEXT_LENGTH ,这里它设置为128,000个token,这是GPT4o的上下文环境大小。上下文长度变量用于构建上下文环境。通常,它是通过输入关于根据事实回答问题的说明,并附上引用,然后提供相关的文档和问题来构建的。然而,文档可能很大,可能会超出上下文长度。如果发生这种情况,文档会被分割成片段,只有适合上下文大小的前n个片段会被用于构建上下文。
接下来的部分包含在Qdrant中用于文档嵌入的HuggingFace模型的名称。除此之外,还包括OpenSearch(INDEX_NAME_LEXICAL)和Qdrant(INDEX_NAME_SEMANTIC)索引的名称。
正如我们之前提到的,VerifAI 包含一个组件,用于验证生成的声明是否基于提供的文档。然而,这个功能可以根据需要开启或关闭,因为在某些情况下,这个功能可能并不必要。可以通过将 USE_VERIFICATION 设为 False 来关闭此功能。
安装数据存储库最后一步是运行 install_datastores.py
文件。您需要先安装 Docker 并确保 Docker 守护程序正在运行。因为这个文件会读取配置信息来设置用户名、密码或 API 密钥,所以需要先创建一个配置文件。这会在下一节详细说明。
这个脚本设置了必要的组件,比如OpenSearch、Qdrant和PostgreSQL,并在PostgreSQL中创建了一个数据库。
运行Python脚本 `python install_datastores.py` 以安装数据存储。
注意,此脚本会安装 Qdrant 和 OpenSearch 并且不使用 SSL 证书,以下步骤假设不需要 SSL。如果你需要为生产环境启用 SSL,请手动配置。
另外,请注意这里我们讨论的是在本地Docker上安装。如果你已经安装并运行了Qdrant和OpenSearch,你只需要更新配置文件来指向这些实例就行了。
给文件编制索引.此配置既被索引方法使用,也被后端服务使用。因此,必须在开始索引前完成配置。配置完成后即可,然后可以通过将 index_files.py 指向待索引文件夹来运行索引过程:
python index_files.py < 文件所在目录 >
我们在仓库中包含了一个名为 test_data 的文件夹,其中包含几个测试文件(主要是我的论文和其他以前写的文章)。你可以将自己的文件替换这些文件,然后运行以下步骤。
运行以下命令:python index_files.py test_data # 处理测试数据
这会对文件夹及其子文件夹中的所有文件进行索引。完成之后,可以启动VerifAI的后端和前端服务进行操作。
运行生成式搜索运行 VerifAI 后端只需运行即可搞定。
运行 python main.py
这将启动FastAPI服务,,作为后端来接收和处理请求,将请求传递给OpenSearch和Qdrant,以检索与给定查询相关的文档,并部署LLM来生成答案,同时利用本地模型进行声明的校验。
前端代码位于名为 client-gui/verifai-ui 的文件夹中,使用 React.js 编写,因此需要先在本地安装 Node.js 和 npm。然后你可以通过运行 npm install
安装依赖,然后通过运行 npm start
启动前端应用,这样即可。
切换到上一级目录 (`cd ..`)
进入客户端GUI的verifai-ui文件夹 (`cd client-gui/verifai-ui`)
安装项目依赖 (`npm install`)
启动应用 (`npm start`)
最后,它看起来应该是这样的。
其中一个示例问题,如下截图所示,开启了验证(注意绿色文本部分),并提及了可以下载的文件(如图所示)(作者提供的截图)。
截图展示经过验证的声明的提示框,附上了文章中与之最相似的句子(截图来自作者)
贡献及未来方向到目前为止,VerifAI 的开始得到了欧盟 Next Generation Internet Search(NGIS)项目的资金支持。该项目是由塞尔维亚人工智能研究与发展研究所和拜耳股份公司合作启动的。第一个版本被开发成一个用于生物医学领域的生成式搜索引擎。该产品将继续在这个网址https://app.verifai-project.com/访问。然而,最近我们决定扩大该项目,使其真正成为一个开源的生成式搜索引擎,可以验证任何文件中的答案,供不同企业、中小企业、非政府组织或政府公开使用。这些改进是由Natasa Radmilovic和我自愿完成的(特别感谢Natasa!)
不过,既然这是一个开源项目,可以在GitHub(https://github.com/nikolamilosevic86/verifAI)上访问,我们欢迎任何人的贡献,无论是通过拉取请求、提交错误、请求功能、参与讨论或其他任何形式的贡献(随时欢迎联系——无论是BioMed版本还是Core版本(如这里所述的文档生成搜索))。所以,无论你是想加入我们,开始参与这个项目,还是在未来继续关注我们,我们都欢迎你的贡献,网站都将保持一致。
共同学习,写下你的评论
评论加载中...
作者其他优质文章