文章目录

Pre
LLM - 使用 Ollama 和 Chatbox 实现 DeepSeek R1 的本地 AI 助手
LLM - 白话RAG(Retrieval-Augmented Generation)
安装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(检索增强生成)流程中,该模型负责以下关键步骤:
文档分块向量化:
将知识库中的文档分割为短文本块(Chunks),并生成对应的向量。构建向量索引:
将所有文本块的向量存入向量数据库(如FAISS、Chroma),建立高效的检索索引。语义检索:
当用户提问时,将问题转换为向量,并从向量库中快速找到最相关的文本块,作为生成答案的上下文。
为什么需要单独下载
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)**是预处理文档的核心步骤,其作用主要体现在以下方面:
一、核心作用
适应模型处理限制
- 大语言模型(LLM)和向量数据库对输入长度有严格限制(如图中设置的8192字符/块)。拆分文本可将长文档分割为符合模型处理能力的片段,避免因超长输入导致的错误或信息丢失。
提升检索精度
- 分块后,每个文本块会生成独立的向量嵌入(Embedding)。更小的语义单元能精准匹配用户查询的关键信息(例如检索时直接定位到相关段落而非整篇文档)。
保留上下文连贯性
- 文本块重叠(如图中设置的20字符重叠)是关键设计:相邻块之间保留部分重复内容,避免因拆分割裂语义(如一个句子被截断在块末尾,导致下一块丢失前半句的语境)。
二、技术实现原理
文本块大小(Chunk Size)
平衡信息完整性与计算效率:- 过大(如超过模型限制):导致信息冗余,检索速度下降。
- 过小(如仅数百字符):破坏语义完整性(例如拆分表格、代码段或复杂句式)。
文本块重叠(Chunk Overlap)
通过重叠部分实现“滑动窗口”效果:- 确保关键信息(如段落过渡句、专业术语)在多个块中重复出现,降低检索遗漏风险。
- 缓解块边界处的语义断裂问题(例如对话场景中,重叠可保留发言者的切换逻辑)。
三、在RAG流程中的具体应用
数据预处理阶段
- 文档被拆分为多个语义块,分别生成向量后存入数据库,作为后续检索的“知识库”。
检索阶段
- 用户查询被映射为向量,与数据库中的文本块向量进行相似度匹配,返回最相关的若干块。
生成阶段
- 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
我们准备了两篇小日记
2025年3月13日 星期四 多云转晴
晨光从窗帘缝隙里钻进来时,我摸到床头柜上的智能手环,6:30的荧光数字在昏暗里格外清晰。厨房里咖啡机已经自动启动,烘焙坚果的香气顺着门缝飘进来——昨晚睡前设置的预约程序总是很可靠。站在料理台前切牛油果时,手机弹窗亮起:“今日花粉浓度中等,建议佩戴口罩”,窗外的梧桐树正在抽芽,毛茸茸的嫩绿在晨风里晃成一片虚影。
八点整的地铁比往常拥挤,全息广告在玻璃窗上流动,隔壁穿西装的男人正对着空气比划手势,大概在调整隐形眼镜式投影的报表页面。办公室新来的实习生小夏抱着文件小跑过来,文件夹侧边还沾着楼下咖啡店的焦糖酱,她额角沁着细汗说项目数据终于跑通了的时候,落地窗外恰好有群白鸽掠过三十七层的天空。
午休时视频电话突然弹出来,女儿在幼儿园的樱花树下举着蜡笔画,粉色云团里歪歪扭扭写着“给妈妈”。她背后传来老师组织孩子们唱春游安全歌的童声,混合着食堂微波炉转寿司饭团的叮咚声,让我恍惚闻到便当盒里梅子饭团的酸涩清香。
下班时发现工位抽屉里的备用伞不见了,春雨却来得猝不及防。地铁口卖烤红薯的老伯掀开铁皮桶,甜香的白雾漫过潮湿的台阶。走到小区门口时,路灯恰好在七点零三分亮起,飞虫在光晕里织出金色的网,保安亭顶棚的雨滴正巧落进脖颈,凉得让人想起女儿早上偷偷塞进我包里的薄荷糖。
此刻窝在飘窗垫子上写日记,智能家居系统把室温维持在23℃,加湿器吐出的水雾带着鼠尾草气息。手边热可可表面的奶泡已经塌陷成涟漪,而明日要交的提案还差最后两页PPT——但此时此刻,窗台上水培的绿萝抽出第七片新叶,春天正在玻璃上凝结成蜿蜒的水痕。
2025年3月12日 星期三 晴
晨光刚在窗帘缝里探出头,智能手表就在枕边微微震动。春分前的白昼渐长,六点四十五分的天空竟透出蟹壳青的亮色。推开窗户时,楼下的樱花树突然扑簌簌落下几片花瓣,像是被我惊扰的晨梦。
地铁早高峰依然拥挤,但新开通的16号线让通勤时间缩短了二十分钟。车厢里飘着拿铁和羊角包的香气,前排女孩的帆布包上别着樱花季限定徽章,金属表面折射的光斑在我膝盖上跳跃。突然想起七年前初到这座城市时,挤在罐头般的地铁里连手机都掏不出来的窘迫,如今连纸质书都能从容翻开。
午休时在茶水间遇见刚休完产假的琳达。她捧着保温杯神秘兮兮地笑,说在哺乳期读完了三本育儿书和两本悬疑小说。"当妈妈后时间都成了碎片,但每个碎片都像钻石。"玻璃幕墙外的玉兰正在怒放,花瓣边缘卷着淡紫色的光晕,让我想起女儿刚出生时皱巴巴的小拳头。
下班后特意绕道老城区买桂花酒酿。巷口修车铺的老张还在用搪瓷缸泡茶,看见我就举起缸子:"姑娘,新腌的雪里蕻要不要带点?"暮色里的炊烟裹着谁家炒腊肉的焦香,梧桐树影在青石板路上碎成流动的星河。
此刻窝在飘窗敲下这些字时,发现智能手环记录的步数比昨天少了八百步。可是有什么关系呢?女儿把乐高积木搭成了歪歪扭扭的"城堡",正踮着脚往我咖啡杯里放棉花糖。春夜的风带着未褪尽的凉意,却把樱花瓣吹落在刚写完的会议纪要上,像谁悄悄盖下的邮戳。
构建索引
使用Nomic-Embed-Text将知识库中的文档转换为向量表示,并构建一个索引
新建工作区
上传本地文档
聊天设置
检索相关信息
问一个知识库中不存在的内容
总结
通过以上步骤,选择本地ollama部署的大模型的话,就可以部署一个完全本地的RAG系统。此方案的优势在于:
- 数据隐私:所有处理均在本地完成。
- 灵活扩展:支持替换其他Ollama模型(如Llama 3、Mistral)。
- 成本可控:无需支付API费用