LLM - Ollama+Deepseek R1+Nomic-Embed-Text+AnythingLLM搭建本地私有RAG知识库

发布于:2025-03-15 ⋅ 阅读:(12) ⋅ 点赞:(0)


在这里插入图片描述

Pre

LLM - 本地 Ollama 部署DeepSeek

LLM - 使用 Ollama 和 Chatbox 实现 DeepSeek R1 的本地 AI 助手

LLM - 白话RAG(Retrieval-Augmented Generation)

在这里插入图片描述


安装Ollama和DeepSeek

参考 LLM - 本地 Ollama 部署DeepSeek


获取向量模型

在这里插入图片描述

https://ollama.com/library/nomic-embed-text

在这里插入图片描述
在这里插入图片描述
ollama pull nomic-embed-text 是用于从 Ollama 的模型仓库下载 ​Nomic-Embed-Text 嵌入模型的命令。
该模型的核心作用是将文本(如句子、段落或文档)转换为高维向量(Embeddings)​,这些向量能捕捉文本的语义信息,从而支持后续的语义搜索、聚类或相似度计算。

技术原理

  • 嵌入模型(Embedding Model)
    通过深度学习将文本映射到固定长度的向量(如768维),语义相近的文本在向量空间中距离更近。
    例如:

    • “机器学习” ➔ 向量 A
    • “深度学习” ➔ 向量 B
    • “苹果手机” ➔ 向量 C
    • 向量 A 和 B 的距离会比 A 和 C 更近。
  • Nomic-Embed-Text 特点
    该模型由 Nomic AI 开发,专注于高精度文本表征,适合对语义理解要求高的任务(如RAG知识库检索).


在 RAG 系统中的作用

在 RAG(检索增强生成)流程中,该模型负责以下关键步骤:

  1. 文档分块向量化
    将知识库中的文档分割为短文本块(Chunks),并生成对应的向量。

  2. 构建向量索引
    将所有文本块的向量存入向量数据库(如FAISS、Chroma),建立高效的检索索引。

  3. 语义检索
    当用户提问时,将问题转换为向量,并从向量库中快速找到最相关的文本块,作为生成答案的上下文。

为什么需要单独下载

RAG 系统需要两个核心模型:

  • 生成模型(如 DeepSeek R1):负责生成最终答案。
  • 嵌入模型(如 Nomic-Embed-Text):负责检索相关上下文。

二者分工不同,需分别下载。

性能优化

专用嵌入模型通常比生成模型更轻量,检索效率更高(如 Nomic-Embed-Text 仅需 200MB 内存)

在这里插入图片描述
ollama pull nomic-embed-text 是搭建本地 RAG 系统的必要步骤,它为文本检索提供了高效的语义理解能力。通过该模型,RAG 系统能够精准定位相关知识片段,从而提升生成答案的准确性和专业性。


安装AnythingLLM

访问 https://anythingllm.com/desktop

在这里插入图片描述
AnythingLLM 是一个功能强大且灵活的开源平台,旨在帮助用户轻松构建和部署基于大型语言模型 (LLM) 的私有化应用程序。

它提供了直观的用户界面、丰富的功能以及高度的可定制性,即使是没有任何编程经验的用户也能快速上手。


设置AnythingLLM

在这里插入图片描述

LLM 首选项

本地模型

在这里插入图片描述


API ONLINE

在这里插入图片描述


选择向量模型

本地

在这里插入图片描述

线上模型API

在这里插入图片描述


选择向量数据库

在这里插入图片描述


文本分割

在这里插入图片描述
在RAG(Retrieval-Augmented Generation)中,**文本拆分(Text Splitting)分块(Chunking)**是预处理文档的核心步骤,其作用主要体现在以下方面:


一、核心作用

  1. 适应模型处理限制

    • 大语言模型(LLM)和向量数据库对输入长度有严格限制(如图中设置的8192字符/块)。拆分文本可将长文档分割为符合模型处理能力的片段,避免因超长输入导致的错误或信息丢失。
  2. 提升检索精度

    • 分块后,每个文本块会生成独立的向量嵌入(Embedding)。更小的语义单元能精准匹配用户查询的关键信息(例如检索时直接定位到相关段落而非整篇文档)。
  3. 保留上下文连贯性

    • 文本块重叠(如图中设置的20字符重叠)是关键设计:相邻块之间保留部分重复内容,避免因拆分割裂语义(如一个句子被截断在块末尾,导致下一块丢失前半句的语境)。

二、技术实现原理

在这里插入图片描述

  • 文本块大小(Chunk Size)
    平衡信息完整性与计算效率:

    • 过大(如超过模型限制):导致信息冗余,检索速度下降。
    • 过小(如仅数百字符):破坏语义完整性(例如拆分表格、代码段或复杂句式)。
  • 文本块重叠(Chunk Overlap)
    通过重叠部分实现“滑动窗口”效果:

    • 确保关键信息(如段落过渡句、专业术语)在多个块中重复出现,降低检索遗漏风险。
    • 缓解块边界处的语义断裂问题(例如对话场景中,重叠可保留发言者的切换逻辑)。

三、在RAG流程中的具体应用

  1. 数据预处理阶段

    • 文档被拆分为多个语义块,分别生成向量后存入数据库,作为后续检索的“知识库”。
  2. 检索阶段

    • 用户查询被映射为向量,与数据库中的文本块向量进行相似度匹配,返回最相关的若干块。
  3. 生成阶段

    • LLM基于检索到的文本块生成回答,拆分和重叠设计确保模型获取的上下文既完整又无冗余。

四、参数设置建议

  • 8192字符块大小:适用于长文档(如论文、报告),需结合模型输入限制(如GPT-4的32k token)。
  • 20字符重叠:适合保留短句衔接(如技术术语、专有名词),但对长段落可能需增大重叠值。

小结

文本拆分与分块是RAG实现高效检索和精准生成的基础,其设计直接影响系统性能。合理的参数配置(块大小、重叠量)需结合具体场景(如文档类型、模型能力)进行调优,以平衡语义完整性与计算效率。


搭建RAG本地知识库

在这里插入图片描述

现在已经安装并配置好了Ollama、Deepseek R1、Nomic-Embed-Text和AnythingLLM,接下来我们将它们结合起来搭建一个本地的私有RAG知识库。

在这里插入图片描述

准备数据

支持的数据格式

  • ​本地文档:PDF/TXT/Markdown/Word/代码文件
  • ​​网页内容:HTML/JSON/XML
  • ​​数据库导出:CSV/Excel

我们准备了两篇小日记

2025313日 星期四 多云转晴

晨光从窗帘缝隙里钻进来时,我摸到床头柜上的智能手环,6:30的荧光数字在昏暗里格外清晰。厨房里咖啡机已经自动启动,烘焙坚果的香气顺着门缝飘进来——昨晚睡前设置的预约程序总是很可靠。站在料理台前切牛油果时,手机弹窗亮起:“今日花粉浓度中等,建议佩戴口罩”,窗外的梧桐树正在抽芽,毛茸茸的嫩绿在晨风里晃成一片虚影。

八点整的地铁比往常拥挤,全息广告在玻璃窗上流动,隔壁穿西装的男人正对着空气比划手势,大概在调整隐形眼镜式投影的报表页面。办公室新来的实习生小夏抱着文件小跑过来,文件夹侧边还沾着楼下咖啡店的焦糖酱,她额角沁着细汗说项目数据终于跑通了的时候,落地窗外恰好有群白鸽掠过三十七层的天空。

午休时视频电话突然弹出来,女儿在幼儿园的樱花树下举着蜡笔画,粉色云团里歪歪扭扭写着“给妈妈”。她背后传来老师组织孩子们唱春游安全歌的童声,混合着食堂微波炉转寿司饭团的叮咚声,让我恍惚闻到便当盒里梅子饭团的酸涩清香。

下班时发现工位抽屉里的备用伞不见了,春雨却来得猝不及防。地铁口卖烤红薯的老伯掀开铁皮桶,甜香的白雾漫过潮湿的台阶。走到小区门口时,路灯恰好在七点零三分亮起,飞虫在光晕里织出金色的网,保安亭顶棚的雨滴正巧落进脖颈,凉得让人想起女儿早上偷偷塞进我包里的薄荷糖。

此刻窝在飘窗垫子上写日记,智能家居系统把室温维持在23℃,加湿器吐出的水雾带着鼠尾草气息。手边热可可表面的奶泡已经塌陷成涟漪,而明日要交的提案还差最后两页PPT——但此时此刻,窗台上水培的绿萝抽出第七片新叶,春天正在玻璃上凝结成蜿蜒的水痕。
2025312日 星期三 晴

晨光刚在窗帘缝里探出头,智能手表就在枕边微微震动。春分前的白昼渐长,六点四十五分的天空竟透出蟹壳青的亮色。推开窗户时,楼下的樱花树突然扑簌簌落下几片花瓣,像是被我惊扰的晨梦。

地铁早高峰依然拥挤,但新开通的16号线让通勤时间缩短了二十分钟。车厢里飘着拿铁和羊角包的香气,前排女孩的帆布包上别着樱花季限定徽章,金属表面折射的光斑在我膝盖上跳跃。突然想起七年前初到这座城市时,挤在罐头般的地铁里连手机都掏不出来的窘迫,如今连纸质书都能从容翻开。

午休时在茶水间遇见刚休完产假的琳达。她捧着保温杯神秘兮兮地笑,说在哺乳期读完了三本育儿书和两本悬疑小说。"当妈妈后时间都成了碎片,但每个碎片都像钻石。"玻璃幕墙外的玉兰正在怒放,花瓣边缘卷着淡紫色的光晕,让我想起女儿刚出生时皱巴巴的小拳头。

下班后特意绕道老城区买桂花酒酿。巷口修车铺的老张还在用搪瓷缸泡茶,看见我就举起缸子:"姑娘,新腌的雪里蕻要不要带点?"暮色里的炊烟裹着谁家炒腊肉的焦香,梧桐树影在青石板路上碎成流动的星河。

此刻窝在飘窗敲下这些字时,发现智能手环记录的步数比昨天少了八百步。可是有什么关系呢?女儿把乐高积木搭成了歪歪扭扭的"城堡",正踮着脚往我咖啡杯里放棉花糖。春夜的风带着未褪尽的凉意,却把樱花瓣吹落在刚写完的会议纪要上,像谁悄悄盖下的邮戳。

构建索引

使用Nomic-Embed-Text将知识库中的文档转换为向量表示,并构建一个索引

新建工作区

在这里插入图片描述


上传本地文档

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


聊天设置

在这里插入图片描述

在这里插入图片描述


检索相关信息

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

问一个知识库中不存在的内容

在这里插入图片描述


总结

通过以上步骤,选择本地ollama部署的大模型的话,就可以部署一个完全本地的RAG系统。此方案的优势在于:

  • ​数据隐私:所有处理均在本地完成。
  • ​​灵活扩展:支持替换其他Ollama模型(如Llama 3、Mistral)。
  • ​​成本可控:无需支付API费用

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到