1、相关技术介绍
1.1、RAG
RAG(Retrieval Augmented Generation),即“检索,增强,生成”,用于提升自然语言处理任务的性能。其核心思想是通过检索相关信息来增强生成模型的能力,具体步骤如下:
(1)检索(Retrieval):当用户提出问题时,系统会从外部的知识库中检索出与用户输入相关的内容。
(2)增强(Augmented):系统将检索到的信息与用户的输入结合,扩展模型的上下文。然后再传给模型,使模型得到增强。
(3)生成(Generation):生成模型基于增强后的输入生成最终的回答。由于这一回答参考了外部知识库中的内容,因此更具有参考性。
1.2、微调技术
微调技术是指在预训练模型的基础上,通过特定任务的数据进一步训练,以提升模型在该领域中的表现,具体步骤如下:
(1)预训练:在大规模数据集上训练模型,学习通用特征。
(2)微调:在预训练模型上,通过特定任务的数据进一步训练。
RAG和微调技术的共同点:都是用于赋予模型某个领域的特定知识,解决大模型的幻觉问题。所谓大模型幻觉就是当大模型遇到一些不知道的问题时,会输出一些错误的虚构的具有误导性内容的现象。
RAG和微调技术的区别:RAG强调检索,更准确,但因为依赖于外部信息,所以灵活性差一些。微调技术强调训练学习,训练好的模型可以有自己的想法,更灵活一些。
1.3、Embedding模型
Embedding 是一种将离散数据(如单词、句子自然语言或图像)转换为连续向量表示的技术。这些向量能够捕捉数据的语义信息,使得机器可以更好地理解和处理这些数据。Embedding 在自然语言处理(NLP)和机器学习中广泛应用。
在RAG的检索步骤时,会通过Embedding(嵌入)模型,对知识库文件进行解析:Embedding的主要作用是将自然语言转化为机器可以理解的高维向量,并且通过这一过程捕获到文本背后的语义信息(比如不同文本之间的相似度关系)
通过Embedding(嵌入)模型。对用户的提问进行处理。用户的输入同样会经过嵌入(Embedding)处理,生成一个高维向量。
拿用户的提问去匹配本地知识库:使用由用户输入生成的高维向量,去查询知识库中相关的文档片段,在这个过程中,系统会利用某些相似度度量去判断相似度。
Embedding模型可以对你上传的附件进行解析。
1.4、相似度度量
相似度度量是一种用于量化两个对象之间相似程度的方法。它在多个领域中广泛应用,如自然语言处理(NLP)、信息检索、机器学习和数据挖掘等。相似度度量可以帮助我们理解和比较不同对象之间的关系。
相似度:表示两个对象在某种特征或属性上的接近程度。
距离度量:与相似度相对,表示两个对象之间的差异程度。通常,距离越小,相似度越高。
常见相似度度量方法
(1)余弦相似度:用于衡量两个向量之间的夹角余弦值。应用于文本相似度、推荐系统。
(2)欧式距离:用于衡量两个点在欧氏空间中的直线距离。应用于聚类分析、图像识别。
(3)曼哈顿距离:用于衡量两个点在网格路径上的距离。应用于路径规划、数据挖掘。
(4)杰卡德相似系数:用于衡量两个集合的交集与并集的比值。应用于集合相似度、推荐系统。
(5)皮尔逊相关系数:用于衡量两个变量之间的线性相关性。应用于统计分析、数据挖掘。
1.5、Chat模型&Embedding模型
Chat模型是用于自然语言对话,能够结合上下文理解和回应用户的输入,能够进行多轮对话。
Embedding模型用于将文本映射为高维向量,用这些高维向量和知识库的高维向量去进行匹配。
举个例子:假设我们有一个 Embedding 模型,将单词映射为 5 维向量。
单词 "king" 的向量表示可能是:[0.25, -0.34, 0.12, 0.45, -0.67]
单词 "queen" 的向量表示可能是:[0.23, -0.33, 0.11, 0.44, -0.66]
单词 "man" 的向量表示可能是:[0.10, -0.20, 0.05, 0.30, -0.50]
单词 "woman" 的向量表示可能是:[0.09, -0.19, 0.04, 0.29, -0.49]
通过分析这四个映射的向量,我们可以看出,在向量空间中,语义相近的单词距离也较近。比如:"king" 和 "queen" 的向量在空间中距离较近,因为它们都是表示君主的词汇。"man" 和 "woman" 的向量在空间中距离较近,因为它们都是表示性别的词汇。判断向量空间是否相近就会用到“相似度度量方法”。
在实际中,Embedding 模型的向量维度通常较高,例如Word2Vec通常使用 300 维向量,GloVe通常使用 50、100、200、300 维向量,BERT通常使用 768 维或 1024 维向量。
2、本地部署
2.1、先下载ollama
Download Ollama on Windows
2.2、通过Ollama下载模型到本地
Ollama会默认把模型下载到C盘,如果想更换模型下载位置,可以新增环境变量OLLAMA_MODELS,变量值为模型下载到的路径。
先启动ollama,cmd命令提示符输入ollama run 指定的模型,ollama run deepseek-r1:1.5b
如果已下载则会直接启动该模型,否则会去联网下载该模型。
deepseek-r1:1.5b
2.3、下载RAGFlow源代码
GitHub - infiniflow/ragflow: RAGFlow is an open-source RAG (Retrieval-Augmented Generation) engine based on deep document understanding.
2.4、下载安装docker
Docker: Accelerated Container Application Development
我这里选的是windows版的。
直接点击下载后的docker图标进行安装。安装完成后桌面上会出现一个docker的图标:
注意windows安装docker desktop是默认安装在系统盘C盘的。不过这个可以改安装位置。
首先打开命令提示符。
切换到Docker Desktop Installer.exe安装包所在的目录。
输入以下命令:
start /w "" "Docker Desktop Installer.exe" install -accept-license --installation-dir="D:\SoftWare\Docker\install" --wsl-default-data-root="D:\SoftWare\Docker\install\Data" --windows-containers-default-data-root="D:\SoftWare\Docker\install"
D:\SoftWare\Docker\install为Docker安装的位置,D:\SoftWare\Docker\install\Data用于存储镜像、容器、卷等数据的目录。
点击OK,等待一会儿,就安装完成了。
但是此时打开docker客户端,会报这个问题。
解决方法,cmd管理员模式运行以下代码:bcdedit /set hypervisorlaunchtype auto
重启电脑后,以管理员身份运行Docker Desktop
因此,需要修改ragflow源代码下的.env文件。
配置环境变量:OLLAMA_HOST
配置OLLAMA_HOST环境变量的作用是让虚拟机里的RAGFlow能够访问到本机上的Ollama,因为这里RAGFlow要通过Docker部署,默认情况下ollama只能允许本机访问的。默认情况下Ollama监听的是localhost:11434。通过设置成0.0.0.0,这样Ollama就可以监听到本机所有的ip,这样虚拟机就可以访问到本机上的Ollama了。
cmd进入ragflow目录下,输入命令:docker compose -f docker/docker-compose.yml up -d
注意:如果镜像拉不下来则要配置国内的镜像源。
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"registry-mirrors": [
"https://registry.docker-cn.com"
]
}
Docker中国区官方镜像
https://registry.docker-cn.com
中科大
https://docker.mirrors.ustc.edu.cn/
网易
http://hub-mirror.c.163.com/
腾讯
https://mirror.ccs.tencentyun.com
镜像源记得多试几个,我最后是挂了梯子的。
最后总共花了一个多小时才把镜像下载下来,下载过程中如果卡住不动了,可以按一下回车键。
镜像下载成功后,浏览器输入:http://localhost:80 进入以下页面,说明RAGFlow已经部署成功了。
3、在RAG中构建个人知识库
3.1、添加Ollama模型
3.2、系统模型设置
3.3、创建知识库
不过我的电脑本地解析pdf文档经常卡在那里不动了,然后RAGFlow也卡住了,然后就自动退出登录了。
后来,我又把pdf转为word,并把里面的所有图片都删除了,结果还是解析到一半就卡住了,然后自动跳出登录了。最后,我把文档只保留了“前言”部分,差不多一页文档的样子,很快就解析成功了。
3.4、新建聊天助理
设置好聊天助理后,与聊天助理对话,出现了连接失败的问题。
出现这个问题,是由于系统运行内存不足导致的。我本机的笔记本内存是16G,docker启动后系统是分配了7.5G的内存,内存显著不足,导致elasticsearch无法正常运行,显示为无法建立连接。
我参考了这位博主的文章:Ragflow错误解决方案 Failed to establish a new connection: [Errno 111] Connection refused-CSDN博客
在windows下给docker desktop分配最大内存。
win + r,调出运行,输入 %UserProfile%,进入用户文件夹 在用户文件夹下创建一个新的文件,改名为 .wslconfig,内容如下:
[wsl2]
memory=16GB # 分配的内存
processors=12 # 处理器核心数量,考虑超线程
swap=0
localhostForwarding=true
保存文件后,重启docker和WSL。
-
退出docker,任务管理器中确保无docker相关进程。
-
win+r调出运行,输入cmd并回车,在命令提示符中,输入以下内容并回车。
wsl --shutdown
重新打开docker,确保容器中所有的程序都运行,重新在浏览器中连接ragflow进行尝试。
不过有时候和聊天助手对话,也会报“ERROR: NotFoundError(404, 'index_not_found_exception', 'no such index [ragflow_c97380ccebb111ef951b0242ac120006]', ragflow_c97380ccebb111ef951b0242ac120006, index_or_alias)”。这个问题其实就是elasticsearch应用启动的有问题。重启一下就行了。如果还有问题,那就再把知识库的知识文档重新解析一遍。
最终,可以顺利的和聊天助手聊天了。
但是AI把一段话重复了两遍。
4、调用外部大模型API
由于本地部署的话,受限于个人电脑的配置,所以很不好用。因此为了能更好的享受AI大模型带来的便利,这里推荐直接调用外部大模型API。
我这里以“通义千问”大模型为例,首先进入阿里云官网。
通义大模型_企业拥抱 AI 时代首选-阿里云
5、总结
上一次写文章还是2024年9月份,已经半年没有写文章了。去年下半年平时上班周末上课,忙忙碌碌的也没心思更不知道要写点啥。上班就那点东西,天天业务搬砖增删改查,越来越不想干了。但不干开发,不写代码也不知道自己能干点啥?原本是希望读个非全的研究生,看看其他方向的,真正读了半学期感觉下来,就是脑子里被灌了一大堆有的没的的知识,大脑还是懵逼的。学校的老师都在搞什么“量子计算、脑机接口、密码学、计算机图形、物联网、机器学习、海事遥感......”这些东西与我工作没有关系,我也研究不了老师们的这些方向,选了个导师,还是放养的,无课题无组会,自己想办法毕业,学校的学费还真好赚啊!我还得为论文头疼。
通过本地部署大模型构建自己的知识库以聊天助理的方式呈现知识交互,确实蛮令人震撼的。从今以后都是AI的天下了,我经常用AI帮我改代码。不过由于我的笔记本是轻薄本,受限于性能,无法本地部署一个真正可用的大模型知识库,还得去租个云主机,或者购买外部提供的模型api。
6、参考资料
Windows Docker 配置国内镜像源的两种方法_docker desktop配置多个镜像源默认使用哪个镜像源-CSDN博客 【知识科普】【纯本地化搭建】【不本地也行】DeepSeek + RAGFlow 构建个人知识库_哔哩哔哩_bilibili Windows装Docker至D盘/其他盘(最新,最准确,直接装)_docker安装到d盘-CSDN博客 Windows Docker安装(当前计算机配置不支持 WSL2。.....问题已解决)-CSDN博客
在 Windows 上配置 Ollama 服务并开放局域网访问_ollama局域网访问-CSDN博客
Ragflow错误解决方案 Failed to establish a new connection: [Errno 111] Connection refused-CSDN博客