【DeepSeek-R1背后的技术】系列十一:RAG原理介绍和本地部署(DeepSeekR1+RAGFlow构建个人知识库)

news2025/2/25 15:19:16

【DeepSeek-R1背后的技术】系列博文:
第1篇:混合专家模型(MoE)
第2篇:大模型知识蒸馏(Knowledge Distillation)
第3篇:强化学习(Reinforcement Learning, RL)
第4篇:本地部署DeepSeek,断网也能畅聊!
第5篇:DeepSeek-R1微调指南
第6篇:思维链(CoT)
第7篇:冷启动
第8篇:位置编码介绍(绝对位置编码、RoPE、ALiBi、YaRN)
第9篇:MLA(Multi-Head Latent Attention,多头潜在注意力)
第10篇:PEFT(参数高效微调——Adapter、Prefix Tuning、LoRA)
第11篇:RAG原理介绍和本地部署(DeepSeek+RAGFlow构建个人知识库)

目录

  • 1 前言
  • 2 方法
  • 3 RAG和SFT的区别
    • 3.1 核心目标不同
    • 3.2 数据使用方式
    • 3.3 实时性对比
    • 3.4 资源消耗
    • 3.5 可解释性
    • 3.6 典型应用场景
    • 3.7 协同使用策略
    • 3.8 选择建议
  • 4 本地部署(DeepSeek+RAGFlow构建个人知识库)
    • 4.1 Embedding模型
    • 4.2 Ollama部署DeepSeek-R1模型
      • 4.2.1 安装和部署
      • 4.2.2 配置环境变量
    • 4.3 部署RAGFlow
      • 4.3.1 安装Docker
      • 4.3.2 安装RAGFlow
      • 4.3.3 注册登录
    • 4.4 构建个人知识库并实现对话问答
      • 4.4.1 配置模型
      • 4.4.2 创建知识库
      • 4.4.3 创建聊天助理
  • 5 本地部署RAGFlow+调用API

1 前言

RAG(Retrieval-Augmented Generation,检索增强生成) 是一种结合了信息检索技术与语言生成模型的人工智能技术,该技术通过从外部知识库中检索相关信息,并将其作为提示(Prompt)输入给大型语言模型(LLMs),以增强模型处理知识密集型任务的能力,如问答、文本摘要、内容生成等。

RAG模型由Facebook AI Research(FAIR)团队于2020年首次提出,并迅速成为大模型应用中的热门方案。

大型语言模型(LLM)通常面临两个问题:

  • 知识截止:每个基础模型都有知识截止,这意味着其知识仅限于训练时可用的数据。

  • 幻觉:当模型自信地做出错误反应时,就会发生幻觉。

RAG)摆脱了知识限制,整合了外部数据,从外部知识库中检索相关信息,增强模型的生成能力。

顾名思义,RAG的主要包括检索、增强和生成这三个步骤:

  • 检索:检索是RAG流程的第一步,从预先建立的知识库中检索与问题相关的信息。这一步的目的是为后续的生成过程提供有用的上下文信息和知识支撑。

  • 增强:RAG中增强是将检索到的信息用作生成模型(即大语言模型)的上下文输入,以增强模型对特定问题的理解和回答能力。这一步的目的是将外部知识融入生成过程中,使生成的文本内容更加丰富、准确和符合用户需求。通过增强步骤,LLM模型能够充分利用外部知识库中的信息。

  • 生成:生成是RAG流程的最后一步,这一步的目的是结合LLM生成符合用户需求的回答。生成器会利用检索到的信息作为上下文输入,并结合大语言模型来生成文本内容。

简而言之,就是从知识库中检索到的问答对,增强了LLM的提示词(prompt),LLM拿着增强后的Prompt生成了问题答案。

2 方法

用RAG搭建知识库的流程如下:

  1. 数据准备与知识库构建
  • 收集数据: 首先,需要收集与问答系统相关的各种数据,这些数据可以来自文档、网页、数据库等多种来源。

  • 数据清洗: 对收集到的数据进行清洗,去除噪声、重复项和无关信息,确保数据的质量和准确性。

  • 知识库构建: 将清洗后的数据构建成知识库。这通常包括将文本分割成较小的片段(chunks),使用文本嵌入模型(如GLM)将这些片段转换成向量,并将这些向量存储在向量数据库(如FAISS、Milvus等)中。

  1. 检索模块设计
  • 问题向量化: 当用户输入查询问题时,使用相同的文本嵌入模型将问题转换成向量。

  • 相似度检索: 在向量数据库中检索与问题向量最相似的知识库片段(chunks)。这通常通过计算向量之间的相似度(如余弦相似度)来实现。

  • 结果排序: 根据相似度得分对检索到的结果进行排序,选择最相关的片段作为后续生成的输入。

  1. 生成模块设计
  • 上下文融合:将检索到的相关片段与原始问题合并,形成更丰富的上下文信息。

  • 大语言模型生成:使用大语言模型(如DeepSeek-R1)基于上述上下文信息生成回答。大语言模型会学习如何根据检索到的信息来生成准确、有用的回答。

3 RAG和SFT的区别

检索增强生成(RAG)和监督微调(SFT)是两种提升大模型性能的主流技术,但核心思路和应用场景存在显著差异。

3.1 核心目标不同

  • RAG
    通过动态检索外部知识库增强生成能力,解决模型「知识固化」问题。适用于需要实时性、事实性准确或超出训练数据范围的场景(如最新事件、私有数据查询)。
    示例:用企业内部文档实时回答业务问题。

  • SFT
    通过调整模型参数使其适配特定任务格式或领域知识。旨在提升模型对特定任务(如法律文书生成、医疗问答)的指令遵循能力和专业性,但无法突破训练数据的时间或知识范围。
    示例:微调模型生成符合法律规范的合同文本。

3.2 数据使用方式

  • RAG

    • 推理阶段动态检索:每次生成时从外部数据库/文档中实时检索相关内容。
    • 知识可更新:仅需更新检索库即可扩展模型知识,无需重新训练模型。
  • SFT

    • 训练阶段静态学习:使用标注数据调整模型权重,学习固定知识或任务模式。
    • 知识固化:模型学到的知识截止于训练数据时间点,更新需重新微调。

3.3 实时性对比

  • RAG
    优势在于零延迟知识更新。例如接入新闻API后,可立即回答当天事件。
  • SFT
    依赖训练数据时效性。若数据过时(如用2022年数据微调),模型无法感知新信息。

3.4 资源消耗

  • RAG

    • 推理成本较高:需维护检索系统(如向量数据库),且每次生成需检索+生成两步计算。
    • 训练成本低:通常直接使用预训练模型,无需额外训练。
  • SFT

    • 训练成本高:需准备标注数据并进行微调(GPU资源消耗大)。
    • 推理成本低:微调后模型可直接生成结果,无需额外系统。

3.5 可解释性

  • RAG
    生成结果可追溯检索到的文档,方便验证信息来源(如显示引用文献)。
  • SFT
    生成过程为黑箱,难以直接追踪知识来源。

3.6 典型应用场景

技术适用场景典型案例
RAG实时问答、私有数据查询、事实核查客服系统接入产品手册回答用户问题
SFT垂直领域深度适配、复杂指令遵循微调模型生成符合金融规范的财报分析

3.7 协同使用策略

实际应用中常将二者结合:

  1. SFT微调模型:使其掌握领域术语和任务格式(如生成结构化报告)。
  2. RAG增强知识:动态补充最新或私有数据,提升回答准确性。

示例:医疗问答系统中,先微调模型理解医学术语,再通过RAG接入最新医学论文库。

3.8 选择建议

  • RAG 若:需处理动态知识、响应实时查询、或无法获取足够微调数据。
  • SFT 若:任务高度专业化(如代码生成)、或需严格遵循特定输出格式。
  • 最佳实践:RAG+SFT联合使用,兼顾知识更新与任务适配性。

4 本地部署(DeepSeek+RAGFlow构建个人知识库)

接下来我们本地化部署DeepSeek-R1和RAGFlow,搭建个人知识库。

4.1 Embedding模型

什么是Embedding?为什么需要Embedding模型?

我们准备好外部知识库(可能来自本地的文件、搜索引擎结果、API等等)之后,需要通过Embedding(嵌入)模型,对知识库文件进行解析:Embedding的主要作用是将自然语言转化为机器可以理解的高维向量,并且通过这一过程捕获到文本背后的语义信息(例如不同文本之间的相似度关系等)。

此外,我们也需要通过Embedding模型,对用户的提问进行处理:用户的输入同样会经过Embedding处理,生成一个高维向量。

然后,拿用户的提问去匹配本地知识库:使用用户输入生成的高维向量,去查询知识库中相关的文档片段,在这个过程中,系统会利用某些相似度度量(如余弦相似度)去判断相似度。

简而言之,Embedding模型是用来对你上传的附件进行解析的。

在Ollama网站上,我们可以在Models页面看到不同的Chat模型和Embedding模型。

Ollama

接下来我们开始本地部署。

4.2 Ollama部署DeepSeek-R1模型

首先,我们需要通过Ollama将DeepSeek-R1模型部署到本地运行。

4.2.1 安装和部署

详细的部署步骤请参考这篇博文:【DeepSeek-R1背后的技术】系列四:本地部署DeepSeek-R1,断网也能畅聊!

操作起来还是很方便的。

4.2.2 配置环境变量

  1. OLLAMA_HOST - 0.0.0.0:11434
  • 作用:让虚拟机里的RAGFlow能够访问本机上的Ollama;
  • 如果配置后虚拟机无法访问,可能是本机防火墙拦截了端口11434;
  • 不想直接暴露11434端口的话,可以通过SSH端口转发来实现;
  • 更新完两个环境变量后记得重启电脑。

环境变量配置方法:系统→系统信息→高级系统设置→环境变量

设置

配置系统变量:
环境变量

  1. OLLAMA_MODELS - 自定义模型存放位置
  • 作用:Ollama会默认把模型下载到C盘,如果希望下载到其他盘需要进行配置。

重启电脑。

运行DeepSeek-R1 1.5B模型:(有时候会对话失败,退出对话,重新运行模型之后就正常了)

部署成功

4.3 部署RAGFlow

接着,我们需要下载RAGFlow源代码和Docker镜像,通过Docker来本地部署RAGFlow。

硬件要求:

  • CPU >= 4 cores
  • RAM >= 16 GB
  • Disk >= 50 GB
  • Docker >= 24.0.0 & Docker Compose >= v2.26.1

4.3.1 安装Docker

对于Windows系统,我们需要先安装Docker。通过Docker页面 下载安装包安装即可。

安装Docker

双击后,点击确认安装即可,安装后需要重启电脑。

首次打开Docker Desktop时,需要登录账号,配置时可能会报以下错误

wsl

需要在终端输入以下命令更新wsl。

wsl --update

打开Docker

4.3.2 安装RAGFlow

  1. 将RAGFlow clone到本地
git clone https://github.com/infiniflow/ragflow.git
  1. 启动Docker服务器

Docker镜像是一个封装好的环境,包含了所有运行RAGFlow所需的依赖、库和配置。

我们需要先进入./docker文件夹,修改.env文件,因为默认的配置是轻量版的,没有Embedding模型。

注释掉84行,取消注释87行,修改后记得保存文件:

env

运行:

cd ragflow/docker
docker compose -f docker-compose.yml up -d

会帮我们自动下载RAGFlow镜像并启动服务。

注意:在下载镜像的时候,其中的minio和ragflow可能会下载很慢或者失败,需要配置Docker镜像源,打开配置文件:C:\Program Files\Docker\Docker\resources\windows-daemon-options.json,修改镜像源如下:

"registry-mirrors": [
        "registry|redacted",
        "https://docker.hpcloud.cloud",
        "https://docker.m.daocloud.io",
        "https://docker.unsee.tech",
        "https://docker.1panel.live",
        "http://mirrors.ustc.edu.cn",
        "https://docker.chenby.cn",
        "http://mirror.azure.cn",
        "https://dockerpull.org",
        "https://dockerhub.icu",
        "https://hub.rat.dev",
        "https://docker.registry.cyou",
        "https://docker-cf.registry.cyou",
        "https://dockercf.jsdelivr.fyi",
        "https://docker.jsdelivr.fyi",
        "https://dockertest.jsdelivr.fyi",
        "https://mirror.aliyuncs.com",
        "https://dockerproxy.com",
        "https://mirror.baidubce.com",
        "https://docker.m.daocloud.io",
        "https://docker.nju.edu.cn",
        "https://docker.mirrors.sjtug.sjtu.edu.cn",
        "https://docker.mirrors.ustc.edu.cn",
        "https://mirror.iscas.ac.cn"
    ],
    "insecure-registries" : [
        "registry.docker-cn.com",
        "docker.mirrors.ustc.edu.cn"
        ],

保存后再运行“docker compose -f docker-compose.yml up -d”命令即可。需要等待较长时间。

安装成功

可以在终端输入以下命令查看服务是否已经启动

docker logs -f ragflow-server

显示下面的内容即已经成功启动:

启动

4.3.3 注册登录

在浏览器中输入

http://localhost:80

会自动跳转到登录页面:

登录页面

注册登录后:

登录

4.4 构建个人知识库并实现对话问答

最后,我们在RAGFlow中构建个人知识库并实现基于个人知识库的对话问答。

Docker成功启动之后,浏览器输入 localhost:80 来访问RAGFlow。

4.4.1 配置模型

可以设置页面语言,点击右上角图像后,再点击左侧的“模型供应商”,添加我们本地部署的 deepseek-r1:1.5b模型。

1.5B

填入参数如下:

配置

其中,在cmd终端输入 ollama list查看本地模型名称,把完整的模型名称粘贴进去:

模型名

再在cmd终端输入 ipconfig 查看IPv4地址,输入到 基础Url 框中,格式是:http://IPv4:11434,11434是前面我们提到的端口。

ip

配置好之后,点击确定即可。

接下来配置系统模型,点击右边 系统模型设置,把Chat模型和Embedding模型配置好:

配置模型

4.4.2 创建知识库

点击上方的 知识库,再点击右侧创建知识库,输入知识库名称:

知识库

语言选择中文,可以选择不同的嵌入模型,解析方法包括了通用、简历、表格等,此处我们选择General,其他配置不用修改,使用默认值。保存配置。

然后上传本地文件,将知识库所需的所有文件都上传上来。注意:上传后一定要点击“解析”按钮!

上传文件

4.4.3 创建聊天助理

点击上方 聊天,创建助理,选择刚才创建的知识库,其他配置可以使用默认:
创建助理

新建聊天:

聊天

大功告成!

5 本地部署RAGFlow+调用API

当然,我们可以只搭建个人知识库,而不本地部署模型,通过调用企业大模型的API来对话。

我们可以按照第4章节,不安装Ollama,也不下载运行DeepSeek-R1 1.5B模型,只执行本地部署RAGFlow相关的流程。

还是回到模型供应商这里,例如我们选择通义千问模型,点击右侧 API-Key,在通义千问网站上申请API调用,将Key输入进去,就能直接调用企业模型服务了。
API key

其他的企业模型的添加方式也是一样的,只不过是调用API可能需要收费,但是可以避免本地部署硬件带来的限制。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙开发深入浅出04(首页数据渲染、搜索、Stack样式堆叠、Grid布局、shadow阴影)

鸿蒙开发深入浅出04(首页数据渲染、搜索、Stack样式堆叠、Grid布局、shadow阴影) 1、效果展示2、ets/pages/Home.ets3、ets/views/Home/SearchBar.ets4、ets/views/Home/NavList.ets5、ets/views/Home/TileList.ets6、ets/views/Home/PlanList.ets7、后端…

【数据结构】B树家族详解:B树、B+树、B*

一、B树(B-Tree) 1. 定义 B树是一种平衡多路查找树,自平衡的树,能够保持数据有序,设计目标是为减少磁盘I/O次数。适用于需要频繁读写磁盘的场景(如数据库、文件系统)。 2、B树基本性质 节点键值数量限制: 对于 m 阶 B 树,根节点至少有 1 个键值,最多有 m - 1 个…

C语言数据结构—二叉树的链式结构实现

目录 1、建立二叉树 1.1 二叉树的结构 1.2 手动建立二叉树 2、二叉树的遍历 2.1 二叉树的三种遍历方式 2.1.1 前序遍历 2.1.2 中序遍历 2.1.2 后序遍历 3、求二叉树的结点数和二叉树的高度 3.1 求二叉树结点数 3.2 求二叉树叶子结点 3.3 求二叉树第k层结点的个数 …

Java 大视界 —— Java 大数据在智能零售动态定价策略中的应用实战(98)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

危化品经营单位安全管理人员的职责及注意事项

危化品经营单位安全管理人员肩负着保障经营活动安全的重要责任,以下是其主要职责及注意事项: 职责 1. 安全制度建设与执行:负责组织制定本单位安全生产规章制度、操作规程和生产安全事故应急救援预案,确保这些制度符合国家相关法…

Day 49 卡玛笔记

这是基于代码随想录的每日打卡 1143. 最长公共子序列 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变…

WebXR教学 01 基础介绍

什么是WebXR? 定义 XR VR AR Web上使用XR技术的API WebXR 是一组用于在 Web 浏览器中实现虚拟现实(VR)和增强现实(AR)应用的技术标准。它由 W3C 的 Immersive Web 工作组开发,旨在提供跨设备的沉浸式体验…

DeepSeek+Kimi生成高质量PPT

DeepSeek与Kimi生成PPT全流程解析 一、工具分工原理 DeepSeek核心作用:生成结构化PPT大纲(擅长逻辑构建与内容优化)Kimi核心作用:将文本转换为视觉化PPT(提供模板库与排版引擎) 二、操作步骤详解 1. 通…

clickhouse--表引擎的使用

表引擎决定了如何存储表的数据。包括: 数据的存储方式和位置,写到哪里以及从哪里读取数据。(默认是在安装路径下的 data 路径)支持哪些查询以及如何支持。(有些语法只有在特定的引擎下才能用)并发数据访问。索引的使用&#xff0…

tauri输入js脚本的方法和注意事项initialization_script

注入js脚本最常用的就是initialization_script,通过这个方法注入的js脚本在页面每个页面都会执行,这个在tauri文档也可以搜到:WebviewWindowBuilder in tauri::webview - Rust,但是请注意,这个方法只能用在WindowBuild…

基于springboot的学习社区博客

一、系统架构 前端:html | bootstarp | jquery | css | ajax 后端:springboot | mybatis 环境:jdk1.8 | mysql | maven 二、代码及数据 三、功能介绍 01. web端-注册 02. web端-登录 03. web端-首页 04. web端-文章明…

python-leetcode 42.验证二叉搜索树

题目: 给定二叉树的根节点root,判断是否是一个有效二叉搜索树 有效二叉搜索树: 1.节点的左子树只包含小于当前节点的树 2.节点的右子树只包含大于当前节点的树 3.所有左子树和右子树自身必须也是二叉搜索树 方法一:递归 如果该二叉树的…

基于PSO-LSTM长短期记忆神经网络的多分类预测【MATLAB】

一、研究背景与意义 在时间序列分类、信号识别、故障诊断等领域,多分类预测任务对模型的时序特征捕捉能力提出了极高要求。传统LSTM网络虽能有效建模长程依赖关系,但其性能高度依赖超参数的选择,例如隐含层神经元数量、学习率、迭代次数等。…

拓扑排序的核心算法:BFS应用与实践

目录 一、拓扑排序简介 二、BFS解决拓扑排序的步骤 三、C实现 四、代码解释 五、总结 一、拓扑排序简介 拓扑排序是对有向无环图(DAG)进行排序的一种方法,使得对于图中的每一条有向边 (u, v),u 在排序中总是位于 v 的前面。拓…

Cocos Creator Shader入门实战(一):材质和Effect的了解

引擎版本:3.8.5 环境: Windows 简介 在Cocos Creator中,游戏炫彩缤纷的效果是借助着色器(Shader)来实现的。 Cocos主要基于OpenGL ES,而Shader的编写则是在可编程渲染管线中基于修改:顶点着色器(Vertex) 和 片段着色…

Android 老项目 jcenter 库失效

最近重新维护了一些老项目发现大部分jcenter库失效了, Could not resolve com.xx:2.1.3. 如果你也遇到了,不妨试试 替换为 aliyun的jcenter服务,就不用一个个找代替库了。 project 下的 build.gradle 文件添加: maven { url htt…

2025.2.23机器学习笔记:PINN文献阅读

2025.2.23周报 一、文献阅读题目信息摘要Abstract创新点网络架构架构A架构B架构C 实验结论后续展望 一、文献阅读 题目信息 题目: Physics-Informed Neural Networks for Modeling Water Flows in a River Channel期刊: IEEE TRANSACTIONS ON ARTIFICI…

Python Django系列—入门实例(二)

数据库配置 现在,打开 mysite/settings.py 。这是个包含了 Django 项目设置的 Python 模块。 默认情况下,​ DATABASES 配置使用 SQLite。如果你是数据库新手,或者只是想尝试 Django,这是最简单的选择。SQLite 包含在 Python 中…

【DeepSeek系列】05 DeepSeek核心算法改进点总结

文章目录 一、DeepSeek概要二、4个重要改进点2.1 多头潜在注意力2.2 混合专家模型MoE2.3 多Token预测3.4 GRPO强化学习策略 三、2个重要思考3.1 大规模强化学习3.2 蒸馏方法:小模型也可以很强大 一、DeepSeek概要 2024年~2025年初,DeepSeek …

独立开发者之Google Analytics使用教程

Google Analytics(GA)是Google提供的一款免费的网络分析服务,用于追踪和报告网站流量。以下是独立开发者如何使用Google Analytics的详细教程: 1. 创建Google Analytics账户 注册Google账户:如果你还没有Google账户&…