RagFlow+Ollama 构建RAG私有化知识库

RagFlow+Ollama 构建RAG私有化知识库

  • 关于RAG
  • 一、什么是RAGFlow
    • 一、RAGFlow 安装
      • 配置测服已有服务: mysql、redis、elasticsearch
  • 二、RAGFlow 配置

  • ollama:本地运行大型语言模型的工具软件。用户可以轻松下载、运行和管理各种开源 LLM。降低使用门槛,用户能快速启动运行本地模型。
    RagFlow:用来连接大语言模型和外部数据的框架(外部数据指自身领域的特定知识),它将两者结合起来,提升回答的准确性。
    注:以下创建完RagFlow虚拟环境后,相关的命令都是在该环境下操作,如果操作过程有中断,请操作时,先生效该环境。

关于RAG

  • 简介
    检索增强生成(Retrieval-Augmented Generation,RAG)是一种结合了信息检索和语言模型的技术,它通过从大规模的知识库中检索相关信息,并利用这些信息来指导语言模型生成更准确和深入的答案。这种方法在2020年由Meta AI研究人员提出,旨在解决大型语言模型(LLM)在信息滞后、模型幻觉、私有数据匮乏和内容不可追溯等问题。

在日常工作和学习中,我们时常会面对大量的PDF、Word、Excel等文档,需要从中查找特定的信息或内容。然而,传统的Ctrl+F搜索方式在面对海量文档或复杂格式时,往往效率低下,令人头疼。如果使用MaxKb 工具,它将彻底改变你处理文档的方式。

  • 工作原理
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

RAG 的主要流程主要包含以下 2 个阶段:

  1. 数据准备阶段: 管理员将内部私有数据向量化后入库的过程,向量化是一个将文本数据转化为向量矩阵的过程,该过程会直接影响到后续检索的效果;入库即将向量数据构建索引,并存储到向量数据库的过程。
  2. 用户应用阶段: 根据用户的 Prompt 提示词,通过检索召回与 Prompt 提示词相关联的知识,并融入到原 Prompt 提示词中,作为大模型的输入 Prompt 提示词,通用大模型因此生成相应的输出。
    从上面 RAG 方案我们可以看出,通过与通用大模型相结合,我们可搭建团队私有的内部本地知识库,并能有效的解决通用大模型存在的知识局限性、幻觉问题和隐私数据安全等问题。

ollama安装参考 上一篇博客

一、什么是RAGFlow

官网
在这里插入图片描述

RAGFlow是一个基于对文档深入理解的开源 RAG(检索增强生成)引擎。它的作用是可以让用户创建自有知识库,根据设定的参数对知识库中的文件进行切块处理,用户向大模型提问时,RAGFlow先查找自有知识库中的切块内容,接着把查找到的知识库数据输入到对话大模型中再生成答案输出。

它能凭借引用知识库中各种复杂格式的数据为后盾,为用户提供真实可信,少幻觉的答案。RAGFlow的技术原理涵盖了文档理解、检索增强、生成模型、注意力机制等,特别强调了深度文档理解技术,能够从复杂格式的非结构化数据中提取关键信息。下面我手把手教各位同学如何在Linux系统中搭建RAGFlow。

一、RAGFlow 安装

安装前,先确保电脑符合以下要求:

  • 硬件:CPU ≥ 4 核 ; 内存≥ 16 GB; 磁盘空间 ≥ 50 GB;

  • 软件:Docker版本 ≥ 24.0.0 ;Docker Compose 版本 ≥ v2.26.1,Docker 和 Docker Compos 必须预先安装好,并且达到版本要求,我就是因为之前安装的Docker Compose 版本太低,导致安装错误,研究了好久才解决问题。

如果尚未在本地计算机(Windows、Mac或Linux)上安装Docker,请参阅安装Docker引擎。


  1. 更改 vm.max_map_count 值,设定为:=262144。

这个值的作用是允许Linux系统中,一个进程创建的最大内存映射区域数。如果应用程序需要创建的内存映射区域数超过了这个限制,就会导致映射失败,并可能出现性能问题或者直接导致应用程序崩溃。因此,对于依赖大量内存映射区域的应用程序(例如数据库系统、搜索引擎等),需要适当调整这个参数。

sudo sysctl -w vm.max_map_count=262144
  1. 改完后查看
sysctl vm.max_map_count
  1. 永久更改vm.max_map_count 值, 无需每次开机手动更改。

编辑文件:/etc/sysctl.conf

更改或加入 :vm.max_map_count=262144

  1. 克隆仓库:
git clone https://github.com/infiniflow/ragflow.git

如果下载过程缓慢或不能连接,可以选用Github加速或代理,这里就不详细描述了。

  1. 进入docker 文件夹,利用提前编译好的 Docker 镜像启动服务器:
cd ragflow/docker
chmod +x ./entrypoint.sh
docker compose -f docker-compose-CN.yml up -d
或者
docker compose -f docker-compose-gpu-CN-oc9.yml up -d

以下为docker的配置文件,根据自身环境选择
在这里插入图片描述

请注意,运行上述命令会自动下载 RAGFlow 的开发版本 docker 镜像。如果你想下载并运行特定版本的 docker 镜像,请在 docker/.env 文件中找到 RAGFLOW_VERSION 变量,将其改为最新版本。例如 RAGFLOW_VERSION=v0.10.0,v0.10.0是截止到目前最新的版本,然后再运行上述的命令。下载的包较大,超过10G,需要耐心等待。
在这里插入图片描述
在这里插入图片描述

配置测服已有服务: mysql、redis、elasticsearch

针对企业测试、生产环境已有以上服务的童鞋, 可以不依赖单台服务器安装ragFlow时关联安装的服务,节省硬件成本和环境迁移成本

  • mysql
    修改文件ragflow/conf/service_conf.yaml
mysql:
  name: 'rag_flow'
  user: 'root'
  password: 'infini_rag_flow'
  host: 'mysql'
  port: 5455

在这里插入图片描述

另外,需要注意docker-compose 需要安装V2.26.1以上版本,如未更新,上述指令会出现这个错误。

unknown shorthand flag: 'f' in -f``See 'docker --help'.

更新方法可参考docker-compose Github:https://github.com/docker/compose#linux , 这里说明如下:

  • (1)这里选择较新的 docker-compose V2.29.0 下载,Github下载:https://github.com/docker/compose/releases/tag/v2.29.0,页面选择 docker-compose-linux-x86_64 文件下载。
    在这里插入图片描述

  • (2)下载完成后,把docker-compose-linux-x86_64 改名为 docker-compose,放到以下目录即可:

  • /usr/local/lib/docker/cli-plugins

最后记得添加运行权限,进入存放docker-compose的文件夹,运行:

sudo chmod +x docker-compose

对于不同的Linux系统,亦可尝试放这几处:

  • /usr/local/libexec/docker/cli-plugins`
  • /usr/lib/docker/cli-plugins
  • /usr/libexec/docker/cli-plugins
  1. 服务器启动成功后再次确认服务器状态:
docker logs -f ragflow-server

在这里插入图片描述

如果您跳过这一步系统确认步骤就登录 RAGFlow,你的浏览器有可能会提示 network anomaly网络异常,因为 RAGFlow 可能并未完全启动成功,所以需要执行上述指令,确保RAGFlow 安装后能成功运行。

  1. 在浏览器中输入服务器对应的 IP 地址并登录 RAGFlow。

我在浏览器中打开:http://192.168.0.18 ,,即可成功打开登录页。此地址为本机IP,可以在终端中用 ifconfig 查看。

在这里插入图片描述
在这里插入图片描述

登录页中点击sign up进行注册, 填入电邮地址和密码后,返回登录页,就可以用刚刚注册的电邮地址和密码登录了。

  1. 关于本地对话大模型的搭建。

在对RAGFlow进行配置前,需要先确认是否搭建本地对话大模型,如果需要全套系统本地搭建的同学,也需要在本地先搭建好开源模型,我这里选用了Ollama + llama3.1:8b。

配置前,需要把Ollama 运行起来:

Ollama run llama3.1:8b

然后用浏览器打开 http://localhost:11434

可以看到页面中显示:Ollama is running,此为保证RAGFlow模型正确配置的必备条件。

另外,如果不想在本地搭建大模型,RAGFlow也可以连接各大在线模型,在配置前,各位同学需要先获取选用模型的API key 和 链接地址,这里就不做详细介绍了,大家可参考官网。

二、RAGFlow 配置

  1. 创建知识库

在RAGFlow系统中,用户可以拥有多个知识库,构建更灵活、更多样化的问答。这里创建第一个知识库,点击创建知识库,填入知识库名称。

  1. 配置知识库

以下显示了知识库的配置页面。正确配置知识库对于 AI 聊天至关重要。如果选择了错误的嵌入模型或块方法,会导致聊天中出现意外的语义丢失或不匹配的答案。

这里需要注意带星号的配置包括:语言,权限,嵌入模型,解析方法。

在这里插入图片描述

(1)解析方法的说明

RAGFlow 提供了多个分块模板,以便于不同布局的文件进行分块,并确保语义完整性。在 Chunk method (块方法) 中,您可以选择适合文件布局和格式的默认模板。下表显示了系统所有支持的块模板的内容及文件格式,大家根据需求自行选择。
在这里插入图片描述

(2)上传知识库文件,并做相应的配置,我这里选了2个关于单片机Lwip库的说明文件。

在这里插入图片描述

(3)选择解析方法

在这里插入图片描述

如无特殊要求,按默认值即可。

(4)选择 embedding model

嵌入模型(embedding model) ,这里选择默认的BAAI/bge-large-zh-v1.5,这个模型专门针对中文语义理解进行了优化,能够将文本映射为低维稠密向量,这些向量可以用于检索、分类、聚类或语义匹配等任务。

(5)解析文件

必须先对上传的文件进行解析,才能让RAGFlow执行检索知识库功能。文件解析是知识库配置中的一个关键步骤。RAGFlow 文件解析的含义有两个:基于文件布局对文件进行分块,并在这些块上构建嵌入和全文(关键字)索引。选择 chunk 方法和 embedding 模型后,您可以开始解析文件:

在这里插入图片描述

单击 UNSTART 旁边的播放按钮以开始文件解析。

如果文件解析长时间停止,单击红叉图标停止后,再单击刷新。

如上所示,RAGFlow 允许您对特定文件使用不同的块方法,从而提供更大的灵活性。

如上所示,RAGFlow 允许您启用或禁用单个文件,从而对基于知识库的 AI 聊天提供更精细的控制。

  1. 运行检索测试

RAGFlow 在其聊天中使用全文搜索和矢量搜索的多次调用。在设置 AI 聊天之前,请考虑调整以下参数以确保预期信息始终出现在答案中:

  • 相似度阈值:相似度低于阈值的数据块将被过滤。默认设置为 0.2。
  • 向量相似度权重:向量相似度占总分的百分比。默认设置为 0.3。
  1. 配置本地对话模型

在 RAGFlow 的配置页中,单击页面右上角的徽标> 然后点击右边栏的Model Providers,然后将 本地运行的Ollama 添加到 RAGFlow。

在这里插入图片描述
在这里插入图片描述

按以上内容填入,Base url需要填入本机的IP地址,并且需要在本地运行Ollama;Mode Name 我用的是llama3.1:8b;本地运行Ollama,API-key无需填写;

在这里插入图片描述

本地对话模型添加成功,如上图。

  1. 开始 AI 聊天

RAGFlow 中的聊天基于特定知识库或多个知识库。创建知识库,完成文件解析,并且配置完对话模型后,各位同学可以开始 AI 对话了。

(1)通过创建助手来开始 AI 对话。

单击页面顶部中间的 Chat 选项卡> Create an assistant 以显示下一个对话的 Chat Configuration 对话框。
在这里插入图片描述

(2)更新 Assistant Setting(助理配置):

配置页中需要关注以下选项:

  • Assistant name 是您的聊天助理的名称。每个助手都对应于一个对话框,其中包含知识库、提示、混合搜索配置和大模型设置的唯一组合。

  • Empty response(空响应):当RAGFlow 没有在知识库中检索到答案时,它会统一响应您在此处设置的内容。

  • 如果希望 RAGFlow 未能在你的知识库中检索到答案时,根据对话大模型的内容即兴创作,请将其留空,但这可能会出现幻觉答案。

  • Show Quote(显示引述的文档): 这是 RAGFlow 的一个关键功能,默认情况下是启用的。RAGFlow 不像黑匣子那样工作,让人无法得知引述的内容。相反,它清楚地显示了其答案的信息来源。

(3)更新 Prompt Engine(提示引擎):这里的内容一般根据系统默认即可,有需要的同学,可以查看官方文档。

(4)更新 Model Setting (模型配置)

  • Model :选择 Chat (对话) 模型。尽管您在系统模型设置中选择了默认聊天模型,但 RAGFlow 允许您为对话选择替代聊天模型,选择正确的对话模型十分重要,这个影响到系统能否正常运行,如果对话模型配置错误,将导致不能输出正确的对话内容。
  • Freedom:指 LLM 即兴创作的级别。从 Improvise、Precise 到 Balance,每个自由度级别都对应于 Temperature、Top P、Presence Penalty 和 Frequency Penalty 的独特组合。
  • Temperature: LLM 的预测随机性水平。值越高,LLM 的创意就越大。
  • Top P:也称为“细胞核采样”,选用默认值即可。
  • Max Tokens:LLM 响应的最大长度。请注意,如果此值设置得太低,则响应可能会减少。

(5)完成以上配置后,我们就可以来到对话页,让大模型根据你的知识库内容,开始一段淋漓畅快的对话了。

在这里插入图片描述
在这里插入图片描述

三、总结
RAGFlow是一个基于检索增强生成(Retrieval-Augmented Generation,简称RAG)的框架,它结合了检索(Retrieval)和生成(Generation)两个关

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/972028.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript(JS)

介绍 JavaScript(简称:JS)是一门跨平台、面向对象的脚本语言。是用来控制网页行为的,它能使网页可交互 JavaScript 和Java 是完全不同的语言,不论是概念还是设计。但是基础语法类似 JS引入方式 内部脚本:将JS代码定义在HTML页面中 JavaScript代码…

LLM 架构

LLM 分类 : 自编码模型 (encoder) : 代表模型 : BERT自回归模型 (decoder) : 代表模型 : GPT序列到序列模型 (encoder-decoder) : 代表模型 : T5 自编码模型 (AutoEncoder model , AE) 代表模型 : BERT (Bidirectional Encoder Representation from Transformers)特点 : Enc…

剑指 Offer II 023. 两个链表的第一个重合节点

comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20023.%20%E4%B8%A4%E4%B8%AA%E9%93%BE%E8%A1%A8%E7%9A%84%E7%AC%AC%E4%B8%80%E4%B8%AA%E9%87%8D%E5%90%88%E8%8A%82%E7%82%B9/README.md 剑指 Offer II 023. 两…

【git-hub项目:YOLOs-CPP】本地实现04:项目简化

项目跑通之后,我们常常还需要对我们没有用到的任何内容进行删除,以简化项目体积,也便于我们阅读和后续部署。如何实现呢?本篇博客教会大家实现! 项目一键下载【⬇️⬇️⬇️】: 精简后:【GitHub跑通项目:YOLOs-CPP】+【计算机视觉】+【YOLOv11模型】+【windows+Cpp+ONN…

R语言用逻辑回归贝叶斯层次对本垒打数据与心脏移植数据后验预测检验模拟推断及先验影响分析|附数据代码...

全文链接:https://tecdat.cn/?p40152 在统计学领域中,层次建模是一种极为强大且实用的工具。它能够巧妙地处理复杂的数据结构,通过分层的方式对数据进行建模。在贝叶斯统计的框架内,层次建模优势尽显,其可以有效地融合…

解锁机器学习核心算法 | 随机森林算法:机器学习的超强武器

一、引言 在机器学习的广阔领域中,算法的选择犹如为一场冒险挑选趁手的武器,至关重要。面对海量的数据和复杂的任务,合适的算法能够化繁为简,精准地挖掘出数据背后隐藏的模式与价值。机器学习领域有十大核心算法,而随…

网络工程师 (43)IP数据报

前言 IP数据报是互联网传输控制协议(Internet Protocol,IP)的数据报格式,由首部和数据两部分组成。 一、首部 IP数据报的首部是控制部分,包含了数据报传输和处理所需的各种信息。首部可以分为固定部分和可变部分。 固定…

部署k8s 集群1.26.0(containerd方式)

随着k8s版本逐步更新,在不支持docker环境的情况下,需要使用containerd方式作为容器引擎。为了更好的个人学习使用,需要重新部署一套1.26.0版本的k8s集群,并且使用containerd方式作为容器引擎,版本为1.6.33。在部署过程…

移动通信发展史

概念解释 第一代网络通信 1G 第二代网络通信 2G 第三代网络通信 3G 第四代网络通信 4G 4g网络有很高的速率和很低的延时——高到500M的上传和1G的下载 日常中的4G只是用到了4G技术 运营商 移动-从民企到国企 联通-南方教育口有人 电信 铁通:成立于 2000 年…

HarmonyOS进程通信及原理

大家好,我是学徒小z,最近在研究鸿蒙中一些偏底层原理的内容,今天分析进程通信给大家,请用餐😊 文章目录 进程间通信1. 通过公共事件(ohos.commonEventManager)公共事件的底层原理 2. IPC Kit能…

openCV中如何实现滤波

图像滤波用于去除噪声和图像平滑,OpenCV 提供了多种滤波器: 1.1. 均值滤波: import cv2# 读取图像 image cv2.imread("example.jpg")# 均值滤波 blurred_image cv2.blur(image, (5, 5)) # (5, 5) 是滤波核的大小 滤波核大小的…

Linux网络 | 多路转接Reactor

前言:本节内容结束Linux网络部分。本节将要简单实现一下多路转接Reactor的代码,制作一个多路转接版本的四则运算计算器服务器。Reactor的代码相当困难,除了350多行新代码, 还要用到我们之前写的许多文件, 比如之前写的…

数控机床设备分布式健康监测与智能维护系统MTAgent

数控机床设备分布式健康监测与智能维护系统MTAgent-v1.1融合了目前各种先进的信号处理以及信息分析算法以算法工具箱的方式,采用了一种开发的、模块化的结构实现信号各种分析处理,采用Python编程语言,满足不同平台需求(包括Windows、Linux)。…

Opencv项目实战:26 信用卡号码识别与类型判定

项目介绍 在日常生活中,信用卡的使用越来越普遍。本项目的主要目标是通过图像处理技术自动识别信用卡号码,并根据信用卡号码的第一个数字判定信用卡的类型(如Visa、MasterCard等)。项目结合了图像预处理、轮廓检测、模板匹配等技…

利用websocket检测网络连接稳定性

浏览器中打开F12,控制台中输入以下内容 > 回车 > 等待结果 连接关闭 表示断网 let reconnectDelay 1000; // 初始重连间隔 let pingInterval null; let socketManuallyClosed false; // 标志是否手动关闭function createWebSocket() {if (socketManuallyCl…

WPF9-数据绑定进阶

目录 1. 定义2. 背景3. Binding源3.1. 使用Data Context作为Binding的源3.2. 使用LINQ检索结果作为Binding的源 4. Binding对数据的转换和校验4.1. 需求4.2. 实现步骤4.3. 值转换和校验的好处4.3.1. 数据转换的好处 4.4. 数据校验的好处4.5. 原理4.5.1. 值转换器原理4.5.2. 数据…

【Unity Shader编程】之图元装配与光栅化

执行方式:自动完成 图元装配自动化流程 顶点坐标存入装配区 → 按绘制模式连接顶点 → 生成完整几何图元 示例:gl.drawArrays(gl.TRIANGLES, 0, 3)自动生成三角形 会自动自动裁剪超出屏幕范围(NDC空间外)的三角形,仅保…

ssm121基于ssm的开放式教学评价管理系统+vue(源码+包运行+LW+技术指导)

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…

网工项目理论1.11 网络出口设计

本专栏持续更新,整一个专栏为一个大型复杂网络工程项目。阅读本文章之前务必先看《本专栏必读》。 一.网络出口接入技术 二.单一出口网络结构 三.同运营商多出口结构 四.多运营商多出口结构——出向流量 五.多运营商多出口结构——服务器访问流量 六.多运营商多出口…

Django 5 实用指南(一)安装与配置

1.1 Django5的背景与发展 Django 自从2005年由Adrian Holovaty和Simon Willison在 Lawrence Journal-World 新闻网站上首次发布以来,Django 一直是 Web 开发领域最受欢迎的框架之一。Django 框架经历了多个版本的演进,每次版本更新都引入了新功能、改进了…