RAGFlow搭建本地知识库:从原理到实践
RAGFlow搭建本地知识库:从原理到实践
RAGFlow是一个基于RAG(检索增强生成)技术的本地知识库搭建工具,可以帮助用户快速构建和管理自己的知识库。本文将详细介绍RAGFlow的安装和配置过程,以及RAG技术的基本原理和应用场景。
RAGFlow安装与配置
安装ollama
参考作者写的ollama的文档进行安装。
安装open-wehui
参考作者写的安装open-webui的文章进行安装。
安装并运行ragflow
- 下载ragflow
git clone https://github.com/infiniflow/ragflow.git
- 下载依赖镜像并运行
docker compose -f docker-compose.yml up -d
docker logs -f ragflow-server
- 查看运行状态
docker logs -f ragflow-server
- 配置环境变量
ragflow使用的各种环境变量在ragflow/docker/.env
文件中,可以修改端口号、ragflow的镜像版本等。
RAG技术原理
RAG是什么
RAG(Retrieval Augmented Generation,检索增强生成)模型由Facebook AI Research(FAIR)团队于2020年首次提出,结合了信息检索技术和大语言模型(LLMs)的技术,从外部知识库中检索相关信息,并将其作为prompt输入到大模型中获取输出。
RAG三过程
RAG 包含三个主要过程:检索、增强和生成。
检索:根据用户的查询内容,从外部知识库获取相关信息。具体而言,将用户的查询通过嵌入模型转换为向量,以便与向量数据库中存储的相关知识进行比对。通过相似性搜索,找出与查询最匹配的前 K 个数据。这个目的是为了给后续生成提供上下文信息知识。
增强:将用户的查询内容和检索到的相关知识一起嵌入到一个预设的提示词模板中。对LLMs的提示词(prompt)
生成:将经过检索增强的提示词内容输入到大型语言模型中,以生成所需的输出。
RAG问答系统构建步骤
向量库构建
- 收集数据:首先,需要收集与问答系统相关的各种数据,这些数据可以来自文档、网页、数据库等多种来源。
- 数据清洗:对收集到的数据进行清洗,去除噪声、重复项和无关信息,确保数据的质量和准确性。
- 知识库构建:将清洗后的数据构建成知识库。这通常包括将文本分割成较小的片段(chunks),使用文本嵌入模型(如GLM)将这些片段转换成向量,并将这些向量存储在向量数据库(如FAISS、Milvus等)中。
检索模块
- 问题向量化:当用户输入查询问题时,使用相同的文本嵌入模型将问题转换成向量。
- 相似度检索:在向量数据库中检索与问题向量最相似的知识库片段(chunks)。这通常通过计算向量之间的相似度(如余弦相似度)来实现。
- 结果排序:根据相似度得分对检索到的结果进行排序,选择最相关的片段作为后续生成的输入。
生成模块
- 上下文融合:将检索到的相关片段与原始问题合并,形成更丰富的上下文信息,将其作为大模型的prompt输入。
- 大语言模型生成:使用大语言模型(如GLM)基于上述上下文信息生成回答。大语言模型会学习如何根据检索到的信息来生成准确、有用的回答。
RAG解决LLM的痛点
RAG(检索增强生成)旨在缓解甚至解决以下大模型落地应用的痛点:
- 有幻觉,可以提供更准确和可靠的领域特定知识,减少生成幻觉
- 时效性,不需要重新训练模型,更新知识库即可保持同步更新
- 使用外部知识库,保护隐私
- 支持更长的上下文
使用ragflow
访问ragflow
网址:http://localhost/login,然后随便注册账户。
配置ollama模型
运行ollama list
命令列出所有的模型,有两个Embedding模型以及一个qwen2:7b的模型。
添加模型
- 添加Embedding模型
- 添加chat模型
系统模式设置
将刚才添加的模型设置到系统默认配置中。
创建知识库
数据集配置
设置嵌入Embedding模型以及解析方法。这里我们做的机器学习论文库,因此可以将“解析方法”从“General”调整为“Paper”模式,对论文进行解析。上传论文
论文解析
论文上传完毕后,执行论文内容的解析。论文解析过程,花了10几分钟。创建论文助理
新建一个论文助理,用于后续的聊天对话。聊天询问DeepSeek,可以看到确实识别了知识库。