前言
在上一篇文章中,我们介绍了如何使用RAG技术
构建本地知识库,基于 Ollama 和 Qwen2.5 实现了与本地私有知识库文件的自然语言交互。本文将继续探讨另一种实现方式,即通过 Ollama 与 RagFlow 的组合来实现,其中 Ollama 使用的模型仍然是Qwen2
。
首先,让我们回顾一下 RAG 的常见应用架构:
RagFlow 的安装和部署
前置条件
为了成功安装和运行 RagFlow,您的系统应满足以下要求:
- CPU:至少 4 核
- 内存:至少 16 GB
- 磁盘空间:至少 50 GB
- Docker:版本 >= 24.0.0 & Docker Compose >= v2.26.1
安装步骤
克隆仓库:
git clone https://github.com/infiniflow/ragflow.git
启动服务器:进入
docker
文件夹,并使用预编译的 Docker 镜像启动服务器:cd ragflow/docker chmod +x ./entrypoint.sh docker compose -f docker-compose-CN.yml up -d
注意:Docker 下载的镜像较大,请确保有足够的存储空间(约 10 GB)。
确认服务器状态:服务器启动成功后,通过以下命令确认服务器状态:
docker logs -f ragflow-server
安装完成后,访问
http://localhost:80
进行注册和登录,而不是访问以下两个地址:正确的访问地址如下图所示:
注册与登录
在上图的界面中完成注册,并登录至如下页面:
配置 Ollama 以连接大模型
接下来,我们配置模型。点击右上角的头像,然后选择“模型提供商”:
在这里,我选择连接已经在本地部署的 Ollama,并通过 Ollama 安装了 Qwen2 大模型。如果需要参考具体的安装步骤,请移步到之前的文章。
启动 Ollama 大模型的命令如下:
ollama serve
当然,您也可以选择其他平台和模型,并提供相应的 API key。许多模型的 API 都提供免费额度,可以根据需要选择。
在 RagFlow 中配置模型时,由于 RagFlow 是通过 Docker 安装的,因此需要使用以下地址连接本地部署的 Ollama:
http://host.docker.internal:11434
创建知识库
配置完成后,就可以创建知识库了:
注意,尽管界面中没有显示 Markdown
文件类型,但经过测试,Markdown
文件也是支持的。其他选项根据具体情况自行配置即可,操作非常简单。
文件上传后可能处理较慢,这取决于电脑的配置。
文件处理完成后,可以通过检索测试确认文件是否被正确索引。
至此,如果所有文件上传完成,知识库的创建工作也就告一段落了。
聊天功能
现在可以展示成果了,您可以基于知识库与模型进行自然语言交互。
首先,请确保在聊天配置中将 token
设置为较大值,以获得更详细的回复。我将其设置为最大值。
以下是测试结果:
我对结果还算满意。由于我的笔记本配置较低,且没有显卡支持,运行速度较慢。如果部署在有 GPU 的服务器上,企业私有化部署供内部使用,速度会快得多。
思考
在本文的示例中,我使用了个人笔记本上的资料构建个人知识库。无论是基于摘要总结,还是全文检索,所得答案都基本可以满足需求。但这是面向个人或 C 端的应用场景,对于 B 端或企业场景,仅依靠向量检索是远远不够的。首先,它无法准确召回特定信息;其次,它也无法与企业内部的信息系统(包含大量结构化数据)有效集成。
要解决这个问题,除了采用多路召回和重排序策略外,业界还提出了其他解决方案。例如,infiniFlow 提出的 Infinity AI 原生数据库:
如图所示,AI 原生数据库不仅涵盖非结构化内容(如文档和图片),还包括结构化信息系统。通过有效整合这些信息,基于此实现多路召回和融合排序的解决方案。
此外,虽然许多 AI 产品的上下文长度越来越长,但在知识库问答场景中,RAG 仍然是非常必要的。LLM 的长上下文能力实际上对 RAG 的发展有很大促进作用。正如 OpenAI 联合创始人 Andrej Karpathy 所比喻的那样,LLM 就像计算机的 CPU,而上下文就像内存,而以向量为代表的数据库则是硬盘。
显然,没有硬盘的计算机是不可想象的。尽管内存可以很大,但成本高昂,短时间内也无法替代硬盘的作用。
最后关于准确性问题,通常有两个解决思路:一是针对 RAG 系统进行改进,例如进行 Embedding 模型的微调;二是对 LLM 进行微调。虽然我并未亲自实践过,但从阅读的资料来看,RAG 系统在实时性和成本方面相比 LLM 微调更具优势,因此更受青睐。这一点与我的直觉一致。
参考资料
- https://github.com/infiniflow/ragflow/blob/main/README_zh.md
- https://infiniflow.org/blog/database-for-rag