背景 🔖
痛点暴击:你的知识管理还在原始时代吗?
在当今信息爆炸的时代,企业、团队甚至个人都面临着知识管理的巨大挑战——资料分散在多个平台、文件格式杂乱、检索效率低下,而涉及敏感数据时,公有云服务又存在安全隐患。如何构建一个高效、安全、易用的内部知识库,是许多组织亟待解决的问题。
你是否每次查找文档翻遍文件夹,会议纪要总在关键时刻“失踪”?
别慌!今天揭秘一个“真香”组合——DeepSeek+AnythingLLM,轻松搭建本地知识库,AI秒变你的“第二大脑”!
数据全程本地存储,商业机密绝不外泄。无论是企业敏感文件还是个人笔记,通关“物理隔离”模式!
今天教大家用一种简单的方式本地部署DeepSeek搭建知识库,小白也能用,需要用到 Ollama 和AnythingLLM。

RAG 🔖
检索增强生成(RAG)是指对大型语言模型输出进行优化,使其能够在生成响应之前引用训练数据来源之外的权威知识库。大型语言模型(LLM)用海量数据进行训练,使用数十亿个参数为回答问题、翻译语言和完成句子等任务生成原始输出。在 LLM 本就强大的功能基础上,RAG 将其扩展为能访问特定领域或组织的内部知识库,所有这些都无需重新训练模型。这是一种经济高效地改进 LLM 输出的方法,让它在各种情境下都能保持相关性、准确性和实用性。

第一步:Ollama 下载 DeepSeek 🔖
我们需要用Ollama下载DeepSeek,不会的同学可以参考本地部署DeepSeek的教程。

第二步:下载AnythingLLM (桌面Desktop版本) 🔖
https://anythingllm.com/desktop
- AnythingLLM是一个全栈 AI 应用,可快速构建私有化、定制化的AI助手和知识管理工具。支持将任何文档、资源(如网址链接、音频、视频)或内容片段转换为个人知识库。
- 打开AnythingLLM官网,点击”Download for选择匹配的系统,进行下载和安装。

第三步:配置AnythingLLM 🔖
- 安装完并启动后点击”开始”使用

- 这选择Ollama,选择下载好的deepseek模型

- 这页数据处理和隐私,直接点下一步

- 这页是用户调查,可直接跳过即可

- 创建一个工作区,输入工作区名称后点击下一步

- 进入聊天首页,选择刚刚创建的工作区,就可以开始聊天了。

- 也可以在工作区的右下角点击设置图标,进行更多的设置。


- 拉取嵌入模型
嵌入模型是将文本转换为向量的特定类型的模型,内置的all-MiniLM-L6-v2也好用,但nomic-embed-text更平衡(见下图)
嵌入模型主要是分割数据,向量化是为了搜索,让lIm模型根据搜索答案回答问题,意思是把知识库里检索到的结果发给大模型,增强大模型特定知识的生成能力。

ollama pull nomic-embed-text
在终端粘贴命令,拉取完显示success就可以了

在 AnythingLLM 菜单 嵌入器更改配置,提供商选择 Ollama,模型选择刚刚下载的。

- 下载AnythingLLM后,在设置界面完成三要素配置:
•LLM提供商:Ollama(指定DeepSeek-R1) •向量数据库:默认LanceDB •嵌入引擎:Ollama(选用nomic-embed-text)
第四步:数据投喂 🔖
- 选择需要投喂的工作区,点击”上传“图标

- 打开文件上传页面,上传准备好的数据文件

第五步:回答验证 🔖
- 选择点击New Thread新建会话,提问已上传的数据集中独有的内容

- 可以看到回答的内容是基于数据集,点击底部Hide Citations可查看引用的文档

AnythingLLM 原理 🔖


AnythingLLM 搭建知识库,主要分成两部分: 文件的处理 和 用户交互。
- 文件的处理:首先会把文件分成小块,然后使用向量模型,向量化,嵌入到向量数据库。
- 用户交互:也是同样的处理,把用户输入的信息向量化,向量化以后在向量数据库里面进行查询,查询到相似的向量,然后生成一个上下文,使用提示词的模版,然后生成最终提示词,然后交给大模型。
上传的文件保存到大模型里了,还是LLM里了呢?
上传的文件保存在本地anythingLLM里的向量数据库里,当你发起提问的时候(比如问中餐和西餐均价多少钱),LLM 会先从数据库里检索,把匹配的信息找出来(比如菜包2元,肉包3元,三明治8元,咖啡15元)扔给大模型,最终大模型结合这些信息,以及它自身的推理能力,给出最终的答案(比如得出中餐平均5元,西餐平均10元,这些答案的依据就是本地上传的数据)。
AnythingLLM docker 版本安装 🔖

可以看到只有AnythingLLM docker版本才支持多用户管理,所以我们来安装一个docker版本,并且在k8s中部署这个版本。
- service-anythingllm-deployment
apiVersion: apps/v1 kind: Deployment metadata: name: service-anythingllm-deployment # Deployment 名称 spec: replicas: 1 # 副本数 selector: matchLabels: app: service-anythingllm # 与下面的 pod 标签匹配 template: metadata: labels: app: service-anythingllm # pod 标签,用于 selector 关联 spec: containers: - name: anythingllm # 容器名称 image: mintplexlabs/anythingllm:latest # 镜像地址(可补充标签如 :latest) ports: - containerPort: 3001 # 容器暴露的端口 env: - name: STORAGE_DIR # 环境变量名称 value: "/app/server/storage" # 环境变量值 volumeMounts: - name: storage-volume # 与下面的 volumes.name 对应 mountPath: /app/server/storage # 容器内挂载路径 volumes: - name: storage-volume hostPath: path: /Users/xxxx/Documents/k8s/pv/anythingllm # 替换为实际的存储路径 type: DirectoryOrCreate
在k8s环境中执行,生成deployment
kubectl apply -f anythingllm-deployment.yaml -n common-services
- anythingllm-service.yaml
apiVersion: v1 kind: Service metadata: name: anythingllm-service spec: type: NodePort ports: - port: 3001 targetPort: 3001 nodePort: 30002 selector: app: service-anythingllm
在k8s环境中执行,生成service,暴露anythingllm服务端口
kubectl apply -f anythingllm-service.yaml -n common-services
可以在k8s dashboard画面中,看到pod已经正常启动了

浏览器访问
- 地址:http://localhost:30002(本机ip + 端口)
可以看到anythingllm有了登录画面功能。

可以看到管理员下面有个用户管理的功能,可以添加用户。

anythingllm也支持api访问,可以查看api文档,通过api接口调用anythingllm服务。
