搭建RAG知识库系统
2026/7/8 4:29:13 网站建设 项目流程

文章目录

  • RAG是什么
    • 一、为什么需要 RAG
    • 二、RAG 系统的标准链路
  • 搭建RAG知识库系统
    • 第一步:Ollama 侧补齐 embedding 模型
    • 第二步:装 AnythingLLM 桌面版
    • 第三步:向导里把四件套接上
    • 第四步:建 Workspace + 投喂文档
    • 第五步:提问,看引用

RAG是什么

RAG(Retrieval-Augmented Generation,检索增强生成)知识库系统,是当前企业把大模型"接私域数据"最主流的架构。核心思路一句话:回答问题时,不让 LLM 只靠训练记忆硬答,而是先去你指定的知识库里查资料,再把查到的内容拼进 Prompt 让模型基于证据生成——既解决幻觉,又解决知识过时和私有数据不可用的问题。

一、为什么需要 RAG

纯 LLM 的三个硬伤:

  • 知识有截止日期,新政策、新文档它不知道
  • 私有数据不能拿来训(合同、客服记录、内部 Wiki,合规+成本都不允许)
  • 幻觉:它"编"得很自信,你没法溯源

RAG 的解法是:知识存在外挂库里,用时才取,取来才用。回答可溯源到原始段落,这是它比微调更适合大多数企业场景的原因。

二、RAG 系统的标准链路

文档接入 → 解析清洗 → 切片(Chunk) → Embedding → 向量库 ↓ 用户提问 → 查询改写 → 检索召回 → Rerank重排 → 拼Prompt → LLM生成
  1. 文档解析
    PDF / Word / Excel / PPT / 网页 / 图片 OCR。难点在扫描件、表格、多栏排版。常用工具:Unstructured、Marker、MinerU。

  2. 切片策略(最容易踩坑的一环)

  • 固定长度(500/800 token + 滑动窗口):简单但容易把一段话拦腰切断
  • 按结构切(标题/段落/语义):结构化文档效果更好
  • 父子文档(Parent-Child):检索用小块提精度,生成时拼回父块保上下文
  1. Embedding 向量化
    把文本转成稠密向量,中文场景主流选:
  • 开源:BGE、GTE、M3E
  • API:text-embedding-3-small(便宜够用)
  1. 向量数据库
  • 轻量原型:FAISS、Chroma
  • 生产级:Milvus、Weaviate、Qdrant、PGVector
  • 托管:Pinecone、阿里云 DashVector
  1. 检索 ≠ 只查向量(工业级都会做混合)
  • 向量检索(语义匹配)+关键词检索(BM25 / 全文索引)双路召回
  • 召回后用Rerank 模型(如 BGE-Reranker)重排 TopK,精度明显提升
  1. 生成
    召回片段 + 用户问题拼 Prompt,交给 LLM。Prompt 里一般加一句"知识库不足以回答就说不知道",防硬编。

搭建RAG知识库系统

本地部署的模型是 Ollama + deepseek-r1:7b,详情可参考用Ollama本地部署大语言模型 ,剩下就是把 AnythingLLM 接上去、补齐 embedding 模型、投喂文档。下面按"Ollama 侧补齐 → 装 AnythingLLM → 向导四件套 → 建库投喂 → 验证 → 调优"六块走。

第一步:Ollama 侧补齐 embedding 模型

deepseek-r1:7b 有了,但 RAG 还需要一个嵌入模型把文档转向量:

# 嵌入模型(约 274MB,很小,中文通用够用)ollama pull nomic-embed-text

如果你中文文档多(合同/手册/论文),nomic-embed-text能用但非最优,可以更换成bge-m3(Hugging Face 下或 Ollama 社区版bge-m3:latest),中文检索匹配度明显高一档。先用 nomic 跑通,后面再换也行。

确认 Ollama 服务在跑,默认http://localhost:11434,AnythingLLM 待会连这个。


第二步:装 AnythingLLM 桌面版

anythingllm.com/desktop下对应系统安装包,Windows/macOS/Linux 都有,一路下一步,不用注册账号,纯本地。

Docker 党跳过这步,直接docker run -d -p 3001:3001 -v anythingllm:/app/server/storage --name anythingllm mintplexlabs/anythingllm:latest,但 Ollama Base URL 要填http://host.docker.internal:11434,容器内localhost不是宿主机。


第三步:向导里把四件套接上

打开 AnythingLLM,首次会弹设置向导(也可左下角 Settings 里改),关键四项:

配置项选/填什么说明
LLM ProviderOllama
Ollama Base URLhttp://127.0.0.1:11434(本机)Docker 部署填http://host.docker.internal:11434
Chat Modeldeepseek-r1:7b下拉框应该能自动识别,空的话检查 Ollama 是否在跑
EmbedderOllama →nomic-embed-text(或 bge-m3)把文档转向量用
Vector DBLanceDB(默认)内置的,零配置,个人场景完全够


点 Test / Save,能绿就过。


第四步:建 Workspace + 投喂文档

Workspace 是 AnythingLLM 的隔离单位——一个区一套文档、一套 prompt,建议按主题拆(产品/技术/财务各一个),别全塞一个里,检索精度会高很多。

  1. 左侧新工作区,取名比如「员工手册」
  2. 进入工作区 → 点上传(或工作区名旁边上传图标)

  1. 拖文件进去——支持 PDF / Word / Excel / TXT / Markdown / 网页链接

  2. 勾选上传的文件 →移动到工作区

  3. 保存并嵌入→ 开始:解析 → 切片(chunk)→ 向量化 → 入 LanceDB

  4. 进度条跑完就好,几秒到几分钟看文档大小
    可以在向量数据库页签中查看向量数量:


第五步:提问,看引用

对话框直接问,比如"张三的手机号"

链路是:你的问题 → LanceDB 向量检索 top-k 片段 → 拼进 prompt → 送 deepseek-r1:7b 本地生成 → 回答底部带引用来源,点开能看到命中原文。

能出引用 = RAG 链路通了。

这里没有检索出刚上传的文档内容,因为聊天模式是“代理”,聊天模式决定了 AI“怎么回答你”以及“从哪里找答案”

以下是这三个模式的核心区别和适用场景:

模式名称核心逻辑回答边界典型适用场景不适合的场景用法提示
查询(Query)严格仅基于你上传的文档内容生成回答,完全不调用模型预训练的通用知识文档有明确内容→准确回答;文档无相关内容→直接说「未找到相关信息」,绝不编造私有知识库查询、合同条款核对、内部人员/数据查找、需要溯源的严谨问答日常闲聊、需要通用常识补充的问题、需要实时信息的场景能避免模型用「保护隐私」为由拒答,也不会编造张三的信息,回答底部一定会带文档引用可溯源
聊天(Chat)混合调用「上传文档内容+模型预训练通用知识」生成回答文档有相关内容会参考,文档无内容时会用通用知识补充,可能出现轻微幻觉日常咨询、内容润色、非严谨类问答、通用知识科普涉密/内部信息查询、需要100%准确溯源的场景、合同条款类严谨查询容易出现「模型知道通用隐私规则但没读到你的文档」的情况,要么拒答要么编造信息
代理(Agent)可自主调用你配置的外置工具(搜索引擎、计算器、文件管理器、API接口等)完成任务回答能力取决于你开放的工具权限,可跨数据源整合信息复杂任务处理(比如自动统计Excel数据、搜索最新行业政策、批量处理文件)单纯查询内部文档、隐私敏感场景、追求低延迟的简单问答会增加响应延迟,还可能触发不必要的工具调用,反而干扰文档检索准确性

设置为“查询模式”后点“Update Workspace”:


然后就能检索文档的内容:

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询