AI

DeepSeek本地搭建知识库🌀

背景 🔖


痛点暴击:你的知识管理还在原始时代吗?

在当今信息爆炸的时代,企业、团队甚至个人都面临着知识管理的巨大挑战——资料分散在多个平台、文件格式杂乱、检索效率低下,而涉及敏感数据时,公有云服务又存在安全隐患。如何构建一个高效、安全、易用的内部知识库,是许多组织亟待解决的问题。

你是否每次查找文档翻遍文件夹,会议纪要总在关键时刻“失踪”?

别慌!今天揭秘一个“真香”组合——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已经正常启动了

浏览器访问

可以看到anythingllm有了登录画面功能。

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

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