
基于DeepSeek-R1的本地知识库构建与应用研究
本文探讨了基于 DeepSeek-R1 的本地知识库构建与应用研究,提出了一种结合 RAG(Retrieval-Augmented Generation)框架 的解决方案。通过整合 Embedder(文本嵌入模型) 和 向量数据库 ,实现了高隐私性、低延迟的知识检索与生成能力。
1.引言
大语言模型(LLM)虽然功能强大,但在实际应用中常因缺乏特定领域知识而产生“幻觉问题”,导致生成内容不够准确。为解决这一问题,检索增强生成(RAG,Retrieval-Augmented Generation)技术通过引入外部知识库,动态补充背景信息,显著提升了模型输出的可靠性和精确性。
本文探讨基于RAG框架与DeepSeek-R1的本地知识库构建。通过整理领域相关数据、优化检索算法,并将检索结果与模型生成过程无缝集成,我们能够以较低成本实现高效的知识增强系统。这种方法不仅缓解了模型幻觉问题,还为专业领域的精准问答提供了可行解决方案。
2.RAG原理(结合信息检索与大语言模型的知识增强机制)
检索增强生成(Retrieval-Augmented Generation, RAG)是一种融合信息检索与大语言模型的技术框架,旨在通过引入外部知识库提升模型生成内容的准确性与相关性。其核心思想是,在用户提问时,系统不仅依赖大模型的内部知识,还通过检索外部文档或数据库中的相关信息,为模型提供额外的知识支持,从而生成更可靠的回答。
RAG的工作流程分为两个主要阶段:
- 检索阶段 当用户输入检索阶段
当用户输入一个问题时,系统首先从外部知识库中检索与问题相关的文档片段或信息。这些知识库可以是预先构建的向量数据库,包含领域特定的文档、企业内部资料或其他结构化/非结构化数据。通过高效的检索算法(如基于关键词的搜索或语义相似度计算),系统能够快速定位最相关的内容。
- 生成阶段
检索到的相关信息会与用户的原始问题一起输入到大语言模型中。模型在生成回答时,结合这些外部知识和自身的内部知识,输出更加准确且符合上下文的答案。这种方式有效缓解了大模型因缺乏特定领域知识而导致的“幻觉问题”。
RAG的核心优势:
- 动态知识补充:无需重新训练
- 领域适应性强 :可根据不同应用场景定制化
- 成本效益高 :相比模型微调更经济高效
简单通过chat交互方式使用大模型:
搭建了RAG后,整体架构:
注:
- 建立索引: 需要将日常的业务知识,以文件形式给分成较短的块(chunk),然后进行编码,向量化存入到向量化的库中;nomic-embed-text-v1模型就是做这个事情的。
- 检索向量库: 根据用户的提问,到向量库中去进行向量匹配,检索出相似的chunk,作为提问的上下文;
- 生成回复: 将用户的提问内容和检索的块结合发送给大模型,大模型结合两者进行问题的回复;
这样做有什么好处那?
- 由于日常的业务知识是保存到本地的,所以减少信息泄露的风险;
- 由于提问结合了业务知识,所以减少了模型的幻觉,即减少了模型的胡说八道;
- 模型的回复结合了业务知识和实时知识,所以实时性可以更好;
- 不用重新训练模型,微调模型降低了成本;
3.应用
需要安装以下工具:
- Ollama: 用于下载和管理模型,前面文章介绍过;
- DeepSeek-R1 : 我们本次要使用的LLM模型,前面文章也介绍过;
- Nomic-Embed-Text向量模型: 用于将文本库进行切分,编码,转换进入向量库;
- AnythingLLM: 开源AI私有化应用构建平台,即将多个模型搭配起来,共同构建一个私有化应用;利用强大的内置工具和功能快速运行本地 LLM,无需复杂的设置。
3.1 Nomic-Embed-Text 模型安装
Nomic-Embed-Text 模型:文本嵌入与向量化技术的核心原理。
Nomic-Embed-Text 是一种先进的文本嵌入模型,能够将业务知识(或称为语料库
)转化为高维向量空间中的点。这种向量化表示为后续的相似度计算、分类、聚类以及检索等任务提供了强大的技术支持。尽管其应用场景复杂且功能强大,但其底层原理却相对直观。
核心思想:文本相似度的数学表达
在高维向量空间中,文本的相似度可以通过两个向量之间的余弦相似度来衡量。具体来说:
- 余弦相似度是通过计算两个向量夹角的余弦值来判断它们的接近程度。
- 余弦值越大 ,说明两个向量在高维空间中的夹角越小,距离越近,相关性越高。
- 余弦值越小 ,则表明两个向量的距离较远,相关性较低。
简化理解:从文本到向量
- 文本嵌入 :Nomic-Embed-Text 模型将输入的文本(如句子或段落)映射到一个高维向量空间。每个文本被表示为一个固定长度的向量,这些向量捕捉了文本的语义信息。
- 相似度计算 :在向量空间中,通过计算两个向量的余弦相似度,可以快速判断两段文本的语义相似性。例如,在构建本地知识库时,系统可以根据用户提问生成的向量,快速找到与其最相关的文档片段。
高级扩展:复杂算法的支持
虽然余弦相似度是最常用的相似度度量方法,但在实际应用中,还可以结合其他更复杂的算法来提升效果,例如:
1. 近似最近邻搜索(ANN, Approximate Nearest Neighbor) :用于加速大规模向量检索,适用于包含数百万甚至数十亿条记录的知识库。
2. 加权相似度计算 :根据领域特点对不同维度的向量赋予不同的权重,以优化特定场景下的检索效果。
3. 多模态嵌入 :除了文本外,还可以结合图像、音频等多模态数据进行联合嵌入和检索。
通过pull命令直接安装,大小为274MB,还是比较小的:
ollama pull nomic-embed-text
然后通过ollama list查询:
mac@MacdeMacBook-Pro models % ollama list
NAME ID SIZE MODIFIED
nomic-embed-text:latest 0a109f422b47 274 MB 17 minutes ago
deepseek-r1:1.5b a42b25d8c10a 1.1 GB 4 days ago
例如:
from transformers import AutoTokenizer, AutoModel
import torch
# 加载模型和分词器
tokenizer = AutoTokenizer.from_pretrained("nomic-embed-text-v1")
model = AutoModel.from_pretrained("nomic-embed-text-v1")
# 输入文本
text1 = "人工智能正在改变世界。"
text2 = "AI 技术正在深刻影响全球发展。"
# 将文本转换为模型输入格式
encoding = tokenizer(text1, text2, return_tensors="pt")
# 获取文本嵌入
with torch.no_grad():
outputs = model(**encoding)
# 计算文本嵌入的余弦相似度
cosine_similarity = torch.nn.functional.cosine_similarity(outputs.last_hidden_state[0], outputs.last_hidden_state[1])
print("文本相似度:", cosine_similarity.item())
3.2 AnythingLLM安装
https://anythingllm.com/desktop
是一个强大的灵活的平台,通过它可以连接多个LLM模型,构建本地私有的LLM应用,配置界面简单直观。
windows下安装下,运行界面:
上图可以看出:这个架构默认需要一个chat模型,需要embedder模型和一个向量数据库:LanceDB,用来保存私有化的数据;
按右边的向右箭头,新建个工作区:
接着进行模型配置:
选择LLM模型提供商,配置下url
点击右上角的 Save changes。
向量数据库无需配置,默认:
embedder模型,可以用默认的,或通过ollama供应商提供的,我先用ollama试试效果:
别忘记点击修改。 这里面有个坑,虽然11434端口开了,但是默认只能用127.0.0.1访问,如果绑定所有ip,则在mac下需要配置:
mac@MacdeMacBook-Pro Homebrew % sudo sh -c 'echo "export OLLAMA_HOST=0.0.0.0:11434">>/etc/profile'launchctl setenv OLLAMA_HOST "0.0.0.0:11434"
Windows的话就是通过图形界面设置环境变量
返回刚才新建的工作区,点击后进入聊天界面就可以上传语料进行交互问答了。
至此个人知识库终于创建完毕了。
4. 总结
通过本次实践,我们成功构建了一个基于本地化部署的 RAG(Retrieval-Augmented Generation)框架的个人知识库系统。该系统整合了 Embedder(文本嵌入模型) 和 向量数据库,实现了高隐私性与低延迟的知识检索与生成能力。相较于传统的云端解决方案,本地化部署显著提升了数据安全性,并通过动态检索外部知识库增强了生成内容的准确性与实时性。
更多推荐
所有评论(0)