1.前言
作为一名从业七年的程序员,最近听到很多程序员朋友都喜提了n+1裁员大礼包。上周与老友聚会时,大家纷纷诉说着各自最近的遭遇,聚会气氛一度十分沉重。
老Z感叹:“公司决定将部分业务外包,结果我被列入了裁员名单。”老L则无奈道:“市场竞争激烈,项目减少,团队预算被削减,前几天我也被裁掉了。”
聚会回家后我十分焦虑地打开了招聘软件,发现传统程序员的岗位出现了僧多肉少的情况,hr每天回复几十次的都有,关键薪资待遇并不是很理想。
我出于好奇心搜了一下AI相关岗位,发现今年AI岗位出了很多,关键在于投递的人少了很多但是薪资翻了多倍...
在AI技术飞速发展的今天,我意识到程序员转型为AI工程师似乎是一个不错的选择。
然而,这一转型并非易事,既需要扎实的编程基础,又需深入理解各种AI模型和技术。
其中,检索增强生成(RAG)技术作为大模型落地的关键技术,通过将大型语言模型与外部知识库相结合,显著提升了生成式AI的准确性和时效性。
掌握RAG技术,不仅能增强AI系统的响应能力,还能有效解决传统语言模型在处理特定领域知识时的局限性。
学习并掌握RAG技术,对于希望在AI领域发展的程序员而言,具有重要意义。
本文我们将从RAG相关原理入手,介绍如何基于RAGFlow本地部署DeepSpeek-R1大模型以及搭建知识库,如果感兴趣就往下约阅读吧~
Embedding(嵌入)是把信息(比如单词、句子、文档)转化为计算机能够理解的数字形式。我们把这种转化得到的数字向量称为“Embedding向量”。
这种做法在很多AI应用中都很常见,尤其是在处理文本时。想象一下,你和朋友在讨论《红楼梦》中的人物时,可能会提到“林黛玉”和“贾宝玉”这两个角色。
在你们的谈话中,这些名字不仅仅是字面上的称呼,它们还承载着丰富的情感和故事背景。同样地,计算机也需要一种方式来理解这些词语背后的深层含义。
Embedding(嵌入)就是一种将词语、句子或文档转化为计算机可以理解的数字形式的方法。通过这种方式,计算机能够“感知”词语之间的关系和相似性。
举个例子:
假设我们将“林黛玉”和“贾宝玉”这两个角色转化为一组数字,例如:
这些数字背后的含义可能是:
由于“林黛玉”和“贾宝玉”在故事中有着深厚的关系和相似的性格特征,所以它们的数字表示在计算机的“心目”中会比较接近。
这种接近性帮助计算机理解它们在语义上的相似性:
为帮助读者快速选择适合 RAG 系统的嵌入模型,本文结合最新行业评测(截至2025年3月)整理出以下主流模型及其特性:
模型选择建议
1. 企业级复杂场景:优先选择 BGE-M3 或 Gemini Embedding,两者在混合检索、长文本处理和多语言支持上表现突出;
2. 轻量化部署需求:mxbai-embed-large(高精度)和 nomic-embed-text(高效率)是性价比之选;
3. 技术文档与代码场景:GTE 的代码原生支持特性可减少30%的误召回率;
4. 移动/边缘计算:Jina Embedding 凭借35M参数量和高效推理架构,适合资源受限环境。
注:以上数据参考自MTEB 2025官方榜单及企业实测报告,完整评测方法可访问 HuggingFace MTEB Leaderboard。
检索增强生成(Retrieval-Augmented Generation,简称RAG)是一种将信息检索技术与生成模型结合的方法,
主要用来提升大型语言模型在处理知识密集型任务时的表现。RAG的工作流程可以分为四个主要步骤,简单来说就是:检索、增强、生成。
• 数据预处理:首先,我们需要对原始数据进行清洗和规范化处理。这样可以确保数据的质量,去掉那些无关或干扰的信息。
• 向量化处理:接下来,我们使用一些嵌入模型将这些数据转换成向量形式。向量化的目的是把数据中的语义信息提取出来,以便后续处理。
• 建立索引:最后,将这些向量化的数据存储到向量数据库中,并为它们建立索引。这样,系统就能快速检索到相关数据。
• 查询处理:当用户提交问题时,系统会先将用户的查询转化成向量表示。
• 相似度计算:然后,系统会计算查询向量和数据库中所有数据向量之间的相似度。通常,余弦相似度是常用的计算方法。
• 检索相关数据:根据计算出的相似度,系统会从数据库中提取出最相关的数据片段。
• 构建增强提示:此时,系统将用户的查询与检索到的相关数据结合,构建一个增强的提示(prompt)。
这个提示将提供给生成模型,确保它能够利用最新、最相关的信息来生成回答。
• 生成响应:生成模型会根据这个增强的提示,生成最终的响应。由于它结合了最新的知识和数据,因此生成的回答会更加准确和相关。
要打造一个高效的RAG系统,主要优化的点在于构建数据索引这一步,以下几个关键步骤非常重要:
1. 数据预处理的重要性:在RAG系统中,数据预处理至关重要。包括数据清洗和规范化处理,能有效提升检索效果。
如果数据没有经过清理,就可能包含很多噪声或冗余信息,这会影响检索器的表现,从而影响生成模型的输出质量。
2. 数据分块策略:当处理长文档时,拆分成合适大小的块会更有帮助。这不仅能提高检索效率,还能提高准确性。
当然,块的大小需要根据具体情况进行调整,找到一个平衡点,既保证信息的完整性,又确保处理的高效。
3. 嵌入模型的选择:嵌入模型将文本转换为向量,这个过程直接影响检索效果。
选择一个与应用领域匹配的嵌入模型,并对其进行微调,可以大大提升检索的相关性和准确性。
除去以上步骤,设计有效的提示词,引导模型生成准确的回答;通过调整解码器的温度等参数,控制输出的多样性和质量;
对生成器进行微调,使其更好地适应特定任务等手段也可以提升RAG的回答效果。
在我之前的文章里也写过RAG框架,为了方便大家理解和比较RAG框架,我做了一个表格汇总(下表的AnythingLLM框架对应文章为:
https://blog.csdn.net/c18213590220/article/details/145965374?spm=1001.2014.3001.5502)
RAGFlow作为本文要讲的RAG框架,有以下优点:
1. 多样化的文档处理能力:RAGFlow支持丰富的文件格式,
包括Word、PPT、Excel、PDF等,并针对特定格式提供相应的解析模板,能够处理复杂格式的文档,如表格、图像等。
2. 深度文档理解:内置的DeepDoc组件能够对用户的非结构化文档进行布局检测,确保文字在保持语义的前提下进行处理,提高了数据处理的准确性和可靠性。
3. 混合检索机制:RAGFlow支持向量检索、搜索引擎检索和结构化查询的混合检索方式,能够根据不同场景选择最优的检索策略,提升了检索的精度和效率。
4. 高可定制性和可扩展性:RAGFlow提供了灵活的自定义能力,用户可以根据具体需求定制评分算法、检索策略等,适应高负载应用场景,满足不同业务需求。
这些优点使RAGFlow在处理复杂格式文档、提供高精度检索和满足企业级应用需求方面表现出色。
Ollama安装在之前的文章已经手把手交过,这里就不在赘述,文章指引:https://blog.csdn.net/c18213590220/article/details/145965374?
spm=1001.2014.3001.5502
本文和之前有所不同的一点是需要配置一下OLLAMA_HOST:
配置 OLLAMA_HOST的ip为0.0.0.0的核心目的是突破网络隔离限制,使运行在 Docker 容器中的 RAGFlow 能够通过宿主机网络访问 Ollama 服务。
Ollama 默认绑定在 127.0.0.1(仅限本机访问),而 Docker 容器与宿主机属于不同网络命名空间,无法直接访问此地址。
设置为 0.0.0.0 后,Ollama 会监听所有网络接口(包括虚拟网卡),使容器可通过宿主机 IP 或 host.docker.internal域名访问服务。
Windows 子系统 Linux 2(WSL 2)提供了一个完整的 Linux 内核,Docker Desktop 依赖于此。
win+R打开命令窗口,输入winver查看系统版本,确保内部版本高于19041:
以管理员身份打开 PowerShell,运行以下命令:
wsl --install
安装完成后需要重启一下计算机。
安装 Docker Desktop 之前,确保您已经安装并启用了 WSL 2。可以通过在 PowerShell 运行以下命令来检查:
wsl --list --verbose
下载 Docker Desktop:访问 Docker 官方网站 https://www.docker.com/products/docker-desktop 下载适用于 Windows 的 Docker Desktop 安装包。
安装 Docker Desktop:
1. 双击下载的安装文件 Docker Desktop Installer.exe。
2. 按照提示完成安装过程。
3. 安装完成后,系统可能提示重启计算机,建议重启以确保所有组件正常工作。
启动 Docker Desktop:电脑重启后,启动Docker Desktop, 初次启动可能需要一些时间。
配置一下docker镜像源地址:
以下镜像源地址为国内地址,你不想用我的也可以自己找:
"registry-mirrors":["https://hub.rat.dev"]
RAGFlow的安装我建议可以直接去github(https://github.com/infiniflow/RAGFlow)上看README_zh.md,教程已经很详尽,
当然你嫌麻烦也可以直接看我的,首先基于git拉取RAGFlow项目:
git clone https://github.com/infiniflow/RAGFlow.git
进入RAGFlow/docker文件夹输入cmd打开命令提示符窗口:
如需下载不同于 v0.17.2-slim 的 Docker 镜像,请在运行 docker compose 启动服务之前先更新 docker/.env 文件内的 RAGFlow_IMAGE 变量。
比如,你可以通过设置 RAGFlow_IMAGE=infiniflow/RAGFlow:v0.17.2 来下载 RAGFlow 镜像的 v0.17.2 完整发行版。
这里的版本是我自己的版本,你的版本需要打开.env软件自己确认。
运行命令:docker compose -f docker-compose.yml up -d安装RAGFlow,安装完以后可以使用docker ps看一下容器列表,
找到RAGFlow容器id,使用docker logs -f (容器id)查看容器运行情况:
在浏览器输入localhost,能看到以下界面则表明RAGFlow安装成功了:
注册账号后就能登录至首页:
点击头像后,在侧边导航栏选择模型提供商,选择Ollama:
配置chat模型,模型名称使用ollama list命令获取(win+R打开命令提示符窗口输入ollama list):
基础uri处配置为http://你的ip:11434:
配置embedding模型,基础uri处配置为http://你的ip:11434:
点击系统模型设置设置相应模型:
新增知识库,我这里为了示范新增了一个小肥肠咖啡厅员工管理规范的知识库,配置知识库:
在RAGFlow中 提供了两种主要的文档解析器:
1. Naive解析器:该解析器在处理文档时,不仅提取文本内容,还将表格数据转换为HTML格式。然而,在解析复杂表格时,可能会出现错行或格式偏差的问题。
2. DeepDoc解析器:这是RAGFlow的核心组件,利用视觉处理和解析技术,对文档进行深度理解。
它支持OCR(光学字符识别)、布局识别和表格结构识别(TSR),能够处理多种文档格式,
如PDF、DOCX、Excel和PPT,并提取文本块、表格和图像等信息。
总的来说,Naive解析器适用于对解析速度要求较高且文档格式较简单的场景,
而DeepDoc解析器则更适合处理复杂布局和多种格式的文档,提供更精确的解析结果。
接下来就是准备知识库的数据集,数据集越规范查询效果越好,这里是我造假的一个数据(pdf):
上传文件:
实时查看解析进度:
解析以后点击数据集可以查看解析块:
配置完知识库之后新建聊天助理测试一下效果:
开始聊天,从下图中可以看出聊天小助理已经能够很好地提取知识库的内容进行回答了:
本文带领读者深入了解了RAG(检索增强生成)技术相关的基本原理,
基于保姆级教程一步一步讲解了怎么基于RAGFlow本地部署DeepSpeek-R1大模型与知识库的搭建。
随着AI技术的发展,RAG技术将成为程序员转型为AI工程师的重要工具。
掌握RAG技术不仅能帮助开发更高效的知识库系统,还能提升模型的准确性和响应能力,为处理知识密集型任务提供强有力的支持。
文章来自于 “后端小肥肠”,作者 :后端小肥肠
【开源免费】n8n是一个可以自定义工作流的AI项目,它提供了200个工作节点来帮助用户实现工作流的编排。
项目地址:https://github.com/n8n-io/n8n
在线使用:https://n8n.io/(付费)
【开源免费】DB-GPT是一个AI原生数据应用开发框架,它提供开发多模型管理(SMMF)、Text2SQL效果优化、RAG框架以及优化、Multi-Agents框架协作、AWEL(智能体工作流编排)等多种技术能力,让围绕数据库构建大模型应用更简单、更方便。
项目地址:https://github.com/eosphoros-ai/DB-GPT?tab=readme-ov-file
【开源免费】VectorVein是一个不需要任何编程基础,任何人都能用的AI工作流编辑工具。你可以将复杂的工作分解成多个步骤,并通过VectorVein固定并让AI依次完成。VectorVein是字节coze的平替产品。
项目地址:https://github.com/AndersonBY/vector-vein?tab=readme-ov-file
在线使用:https://vectorvein.ai/(付费)
【开源免费】FASTGPT是基于LLM的知识库开源项目,提供开箱即用的数据处理、模型调用等能力。整体功能和“Dify”“RAGFlow”项目类似。很多接入微信,飞书的AI项目都基于该项目二次开发。
项目地址:https://github.com/labring/FastGPT
【开源免费】graphrag是微软推出的RAG项目,与传统的通过 RAG 方法使用向量相似性作为搜索技术不同,GraphRAG是使用知识图谱在推理复杂信息时大幅提高问答性能。
项目地址:https://github.com/microsoft/graphrag
【开源免费】Dify是最早一批实现RAG,Agent,模型管理等一站式AI开发的工具平台,并且项目方一直持续维护。其中在任务编排方面相对领先对手,可以帮助研发实现像字节扣子那样的功能。
项目地址:https://github.com/langgenius/dify
【开源免费】RAGFlow是和Dify类似的开源项目,该项目在大文件解析方面做的更出色,拓展编排方面相对弱一些。
项目地址:https://github.com/infiniflow/ragflow/tree/main
【开源免费】phidata是一个可以实现将数据转化成向量存储,并通过AI实现RAG功能的项目
项目地址:https://github.com/phidatahq/phidata
【开源免费】TaskingAI 是一个提供RAG,Agent,大模型管理等AI项目开发的工具平台,比LangChain更强大的中间件AI平台工具。
项目地址:https://github.com/TaskingAI/TaskingAI
【开源免费】MindSearch是一个模仿人类思考方式的AI搜索引擎框架,其性能可与 Perplexity和ChatGPT-Web相媲美。
项目地址:https://github.com/InternLM/MindSearch
在线使用:https://mindsearch.openxlab.org.cn/
【开源免费】Morphic是一个由AI驱动的搜索引擎。该项目开源免费,搜索结果包含文本,图片,视频等各种AI搜索所需要的必备功能。相对于其他开源AI搜索项目,测试搜索结果最好。
项目地址:https://github.com/miurla/morphic/tree/main
在线使用:https://www.morphic.sh/
【开源免费】XTuner 是一个高效、灵活、全能的轻量化大模型微调工具库。它帮助开发者提供一个简单易用的平台,可以对大语言模型(LLM)和多模态图文模型(VLM)进行预训练和轻量级微调。XTuner 支持多种微调算法,如 QLoRA、LoRA 和全量参数微调。
项目地址:https://github.com/InternLM/xtuner
【开源免费】LangGPT 是一个通过结构化和模板化的方法,编写高质量的AI提示词的开源项目。它可以让任何非专业的用户轻松创建高水平的提示词,进而高质量的帮助用户通过AI解决问题。
项目地址:https://github.com/langgptai/LangGPT/blob/main/README_zh.md
在线使用:https://kimi.moonshot.cn/kimiplus/conpg00t7lagbbsfqkq0