aaaaaaa## 引言 在构建信息检索和生成式 AI 应用时,Retrieval-Augmented Generation (RAG) 模型因其能够从知识库中检索相关信息并生成准确答案的能力而受到开发者们的欢迎。要实现端到端的本地 RAG 服务,不仅需要合适的模型,还需要集成用户友好的界面和高效的推理框架。 通过使用易于部署的 Docker 方案,我们可以简化模型管理和服务集成的过程。本文将介绍如何利用 Open WebUI、Ollama 和 Qwen 2.5 来快速搭建一个本地 RAG 服务。

项目概览

本项目依赖以下核心工具:

  1. Open WebUI
  • 提供与模型交互的Web界面。
  1. Ollama
  • 管理embedding和大语言模型的推理任务,bge-m3模型用于文档检索,Qwen 2.5负责生成回答。
  1. Qwen 2.5
  • 阿里云推出的语言模型,用于自然语言生成。

实现步骤

  • 部署 Open WebUI 作为前端界面。

  • 配置 Ollama 支持 Qwen 2.5 的高效调度。

  • 利用 bge-m3 embedding 模型进行文档向量化处理,以支持检索功能。

基础设置

确保你的服务器已安装 Docker。接着创建一个目录来存储 Open WebUI 数据,并使用 Docker 启动 Open WebUI。

1
2
3
4
5
6
# 创建数据目录
mkdir -p /DATA/open-webui
# 使用 Docker 启动 Open WebUI(无GPU支持)
docker run -d -p 3000:3000 -v /DATA/open-webui:/DATA openwebui/webui
# 或者启动 GPU 版本
# docker run --gpus all -d -p 3000:3000 -v /DATA/open-webui:/DATA openwebui/webui

访问 http://localhost:3000 开始使用 Open WebUI。

系统配置

  1. 注册账号并设置强密码。

    第一个注册的用户将成为系统管理员。

  2. 登录后,进入管理员面板进行初始设置。
  3. 在设置中可以关闭新用户注册选项(可选)。
  4. 完成设置后保存更改。

配置 Ollama 和 Qwen 2.5

部署 Ollama

在本地服务器上安装 Ollama。目前 Ollama 提供多种安装方式,请参考 Ollama 的官方文档 下载安装最新的 0.3.11 版本(Qwen 2.5 在该版本才开始支持)。安装细节可以参考我之前写的一篇文章:Ollama:从入门到进阶 。 启动 Ollama 服务(如果是 Docker 方式启动则不需要,但必须暴露 11434 端口): Ollama 服务启动后,可以通过访问地址 http://localhost:11434 连接到 Ollama 服务。 Ollama Library 提供了语义向量模型 ( bge-m3 ) 以及各大文本生成模型(包括 Qwen 2.5)。下一步我们将配置 Ollama 以适应本项目对文档检索和问答生成的需求。

下载 Qwen 2.5 模型

通过 Ollama 安装 Qwen 2.5,你可以直接在命令行中运行 ollama pull 命令来下载 Qwen 2.5 模型,比如要下载 Qwen 2.5 的 72 B 模型,可以使用以下命令: 该命令将从 Ollama 的模型仓库抓取 Qwen 2.5 模型,并准备运行环境。 Qwen 2.5 提供了多种模型尺寸,包括 72 B、32 B、14 B、7 B、3 B、1.5 B、0.5 B 等,你可以根据自己的需求和 GPU 显存大小选择合适的模型。我采用的是 4 x V 100 的服务器,所以可以直接选择 72 B 模型。如果要求吐字速度快且能接收微小的性能损失的话,可以使用 q4_0 量化版本 qwen2.5:72b-instruct-q4_0 ;如果能接受吐字速度慢一些,可以使用 qwen2.5:72b-instruct-q5_K_M 。对于 4 x V 100 的服务器,虽然 q5_K_M 模型的 token 生成明显卡顿,但是为了试验一下 Qwen 2.5 的性能,我还是选择了 q5_K_M 模型。 对于显存较少的个人电脑,推荐使用 14 B 或 7 B 模型,通过以下命令下载: or 如果你同时启动好了 Open WebUI 和 Ollama 服务,那么也可以在管理员面板中下载模型。 注意:请根据上面内容,做到下面操作

下载 bge-m3 模型

为了实现文档向量化处理,我们需要在 Ollama 中下载 bge-m3 模型。这可以通过命令行或者 Open WebUI 界面完成。下载后,Ollama 的配置即告完成,接下来将转向 Open WebUI 中 RAG 服务的配置。

RAG 集成与配置

在 Open WebUI 中配置 Ollama 的 RAG 接口

访问 Open WebUI 管理界面

启动 Open WebUI 后,通过 Web 浏览器访问服务地址,并使用管理员账户登录,进入管理员面板。

设置 Ollama 接口

在管理员面板的 设置 部分,找到外部连接选项。确保 Ollama API 的地址设置为 host.docker.internal:11434。之后,点击 verify connection 按钮来验证 Ollama 服务的连接状态。

设置语义向量模型

在Open WebUI的管理员面板中,进行语义向量模型的设置,以实现文档检索和问答生成的功能。以下是详细的步骤:

第一步:选择语义向量模型引擎

  • 点击管理员面板中的设置选项。

  • 接着点击文档选项。

  • 在设置中,将语义向量模型引擎指定为Ollama

第二步:指定语义向量模型

  • 在同一设置页面,将语义向量模型设置为**bge-m3:latest**。

第三步:配置其他选项

  • 文件最大上传大小设置为10 MB

  • 最大上传文件数量限制为3

  • Top K值设置为5,表示返回最相关的前5个结果。

  • 块大小设置为1500,块重叠设置为100,这些参数影响文档的处理方式。

  • 开启PDF图像处理功能,以增强文档的可读性。

第四步:保存设置

  • 完成上述设置后,点击页面右下角的保存按钮,以确保所有配置生效。

测试 RAG 服务

现在您已经成功搭建了一个本地的RAG(Retrieval-Augmented Generation)系统。通过Open WebUI界面,您可以直接上传文档,并提出自然语言问题来获取基于文档内容的答案。

操作步骤:

  1. 在Open WebUI的用户聊天界面上传您想检索的文档(例如,一个简单的.txt文件)。

  2. 输入您的问题。

  3. 点击发送。 系统将会执行以下操作:

  • 利用Ollama提供的bge-m3模型对文档进行向量化处理。

  • 调用Qwen 2.5模型根据向量化的文档信息生成回答。

示例文档与提问:

为了测试该系统,我们使用了一段由GPT生成的文本作为示例文档,并提出了如下三个问题:

  1. 艾文在森林中遇到的奇异生物是什么?

  2. 艾文在洞穴中找到的古老石板上刻的是什么?

  3. 艾文在祭坛中心发现了什么宝藏?

回答结果:

系统针对上述每个问题给出了相应的答案。具体答案请参考下图或相关输出。

总结

借助 Open WebUI 和 Ollama,我们可以轻松搭建一个高效、直观的本地 RAG 系统。通过将 bge-m3 语义向量模型用于文本向量化,再结合 Qwen 2.5 生成模型,用户可以在一个统一的 Web 界面中进行文档检索与增强生成任务的高效互动。不但保护了数据隐私,还大幅提升了生成式 AI 的本地化应用能力。 本文出自:实现本地 RAG 服务:整合 Open WebUI、Ollama 和 Qwen2.5注意:请根据上面内容,做到下面操作