拒绝胡言乱语!手把手带你用 Ollama + Open WebUI 搭建本地 DeepSeek 专属知识库

拒绝胡言乱语!手把手带你用 Ollama + Open WebUI 搭建本地 DeepSeek 专属知识库
拒绝胡言乱语!手把手带你用 Ollama + Open WebUI 搭建本地 DeepSeek 专属知识库

拒绝胡言乱语!手把手带你用 Ollama + Open WebUI 搭建本地 DeepSeek 专属知识库

本地部署大语言模型(如 DeepSeek-R1)在开发者群体中正变得越来越流行。然而,单机运行的模型虽然拥有不错的基础推理能力,但在面对企业内部私有文档、特定项目的 API 接口规约以及个人的日常记录时,往往显得无能为力。如果你直接询问它关于你们公司内部系统的业务逻辑,它大概率只能“胡言乱语”地胡乱猜测。

为了让本地的 AI 助手真正成为我们生产力的一部分,我们需要为它拼装一个外部知识脑。这就是 RAG(Retrieval-Augmented Generation,检索增强生成) 架构的用武之地。通过结合 Ollama、Open WebUI 以及轻量级的向量化模型,我们可以以零代码的门槛,在自己的笔记本上搭建起一套完全离线的专属知识库系统。


为什么要搭建本地 RAG 知识库?

大语言模型(LLM)的训练数据是有截止日期的,且由于参数量的限制,它们不可能记住世间所有的行业细节。这就导致模型在回答专业或特定场景问题时,容易产生严重的“幻觉”。而 RAG 技术则像是给模型在考试时发了一本“开卷参考书”。当用户提出问题时,系统先去本地的外部文件库中检索与该问题最相关的段落,然后把这些段落连同问题一起喂给 DeepSeek。大模型只需要做好它的本职工作——理解上下文,并提炼、加工出逻辑清晰的中文回答。

在本地搭建 RAG,其核心优势表现在以下三个方面:

1. 极致的隐私防泄露:公司财务报表、未公开的产品设计、个人的日记与账单,如果直接上传给公网的商业大模型,存在难以估量的数据泄露风险。而本地 RAG 全程在你的物理设备上运行,数据不出本地网卡。

2. 零服务器繁忙报错:用过公网 DeepSeek 的人都知道“服务器繁忙”有多频繁。本地部署能保证 100% 的高可用性,即便拔掉网线也完全不影响使用。

3. 低算力成本:相比微调(Fine-Tuning)动辄需要数十 GB 的显存和漫长的训练时间,RAG 只需要在你的物理存储中保存文档向量,即插即用,几秒钟就能完成一份新文档的“投喂”和消化。


准备工作:拉取 nomic-embed-text 文本嵌入模型

在将 PDF、Markdown 或 CSV 文件投喂给大模型之前,我们需要把这些人类阅读的文字拆分成句子,并转换成一串串高维度的浮点数数组(即向量,Vectors)。大模型正是通过计算向量之间的距离,来判定哪些句子与用户的问题最相关。这一转换工作,是由文本嵌入模型(Embedding Model)来完成的。

这里我们选择 Ollama 官方推荐的 nomic-embed-text,它体积小(仅 274MB 左右),但在中英文检索任务中表现出色。

请在您的本地控制台(Powershell 或 Term)中执行以下命令拉取嵌入模型:

# 拉取向量嵌入模型
ollama pull nomic-embed-text

命令行输出会显示拉取的进度,等待出现 success 提示,即表明本地向量化引擎已装配完毕:

pulling lm-head... 100% ▕████████████████████████████████████████▏  274 MB
verifying sha256 digest
writing manifest
removing any unused layers
success

Open WebUI 中的 RAG 关联配置

拉取完嵌入模型后,我们打开本地部署的 Open WebUI(通常运行在 http://localhost:3000 或本地其他映射端口组)。为了让 WebUI 知道该用哪个引擎来切分并向量化我们的文档,我们需要进行简单的关联配置。

1. 设置文本嵌入引擎

点击 Open WebUI 左下角个人头像旁的“设置”齿轮图标,导航至 文档(Documents)RAG 设置 选项卡。

2. 绑定本地模型

在“文本嵌入模型(Embedding Model)”配置项中,将模式设置为 Ollama,并在下拉列表或文本框中选中/填入我们刚才拉取的 nomic-embed-text

配置向量嵌入模型

此外,你可以在高级设置中调整 Chunk Size(切片大小)Overlap(重叠字数)。Chunk Size 决定了你的文档会被切成多大的碎片存入数据库,一般推荐保持默认的 500 到 1000 字符。如果设置过小,可能会导致上下文信息断裂;如果过大,则会带入过多无关背景,稀释检索的精准度。


实战投喂:让 DeepSeek 学习个人资料与接口文档

一切准备就绪后,我们就可以正式“投喂”我们的专属知识大餐了。

步骤一:创建本地知识库

在 Open WebUI 侧边栏的 知识库(Knowledge) 入口中,点击“新建知识库”。你可以把这个知识库命名为 项目接口文档个人常识库

步骤二:上传测试文件

我们可以准备一个简单的 Markdown 文件,例如关于个人简介的 developer_profile.md

# 边学边练简介
- 职业:资深全栈 AI 开发工程师
- 核心技术栈:Python, React, Ollama, LangChain
- 正在研发的项目:Antigravity Agent 自动化流水线
- 特征:常年专注于本地大模型生态与私有化 RAG 架构设计

点击上传按钮,将该文件拖入 Open WebUI 知识库中。系统会调用后端的 nomic-embed-text 模型,静默地在后台将文件分片并转换成向量,整个过程通常不到 2 秒钟。

步骤三:对话引用知识库

新建一个对话,在输入框中输入 # 符号(或点击加号按钮),从弹出的列表中选中我们刚刚创建的知识库。在关联了该知识库后,我们向 DeepSeek 提问:

“你知道边学边练是谁吗?他目前正在做什么项目?”

此时,大模型会基于检索到的向量分片,给出极度精准的回答:

“边学边练是一位资深全栈 AI 开发工程师。他擅长 Python、React、Ollama 等技术,目前正在全力研发名为 Antigravity Agent 的自动化流水线项目。”

这证明本地 RAG 完美跑通,DeepSeek 已经具备了读取本地私有文档并提炼回答的能力!


边界限制与优化排坑建议

在充分享受本地知识库便利的同时,我们也要正视单机设备的局限性,在架构设计和硬件限制上做好以下取舍:

拒绝胡言乱语!手把手带你用 Ollama + Open WebUI 搭建本地 DeepSeek 专属知识库

1. 小模型的局限与幻觉残留:如果你在本地使用的是 deepseek-r1:1.5b7b 等轻量级参数模型,即便 RAG 检索出了正确的段落,它也可能因为理解和归纳能力较弱,在最终整合回答时遗漏关键信息,或者强行把两段不相干的业务拼凑在一起。优化建议:对于严肃的业务环境,本地模型推荐使用 14b32b 及以上版本,以获得高水准的阅读理解与代码生成能力。

2. CPU/GPU 内存竞争:文本嵌入模型 nomic-embed-text 和推理模型 deepseek-r1 会共同占用显存/内存。如果你在一台仅有 16GB 内存的笔记本上同时加载多个大参数模型,会导致系统剧烈地在内存和虚拟内存之间交换数据,导致查询响应时间从几秒被拖慢到几分钟。优化建议:避免在同一时间向知识库批量投喂数十本大体积 PDF,建议分批上传,且限制单次对话关联检索的最大分片数量(Top K 设置为 3 至 5 即可)。

3. 非结构化文档的预处理:很多 PDF 报告包含多栏排版、大面积表格或插图。如果直接暴力喂给 nomic,提取出的文本顺序很可能是混乱的,导致大模型无法读懂上下文。优化建议:在投喂前,优先利用专门的 Markdown 转换工具(例如微软开源的 MarkItDown)将杂乱的文件格式提纯为干净的纯文本或 Markdown 再进行投喂,这能有效提升 RAG 的检索成功率。


公众号二维码

长按二维码关注 “边学边练”

文章版权声明:除非注明,否则均为边学边练网络文章,版权归原作者所有

相关阅读

最新文章

热门文章

本栏目文章