早在两年前大模型刚火起来那阵子,圈内默认的玩法是人手一个“无所不知”的对话框。可真到了企业内部落地,问题马上露出来:模型再聪明,也记不住你公司那几千份合同、十万行运维手册和散落在各个 wiki 里的历史决策。于是“AI 知识库 + RAG”一下子成了标配。我研究过 Dify、RAGFlow、MaxKB,最后花了一个周末把腾讯微信团队开源的 WeKnora 完整跑在了 Windows 11 上,本地接 Ollama 模型做私有化问答,整体体验比我预想的要“正统”不少。今天这篇就把这个项目的定位、架构、部署流程和我在实操里踩过的坑全部摊开聊。
先说清楚 WeKnora 是什么。这名字是 knowledge 和 RAG 的合体,开源项目挂在腾讯微信技术团队名下,定位是“基于 RAG 的服务化 AI 知识库平台”。它跟那些普通问答机器人最大的区别在于:它把“知识的导入、切分、索引、召回、重排、生成”整条链路做成了开箱即用的产品,而不是给你一堆代码让你自己拼。换句话说,它解决的是“把大模型接到自己的私有数据上”这个问题,顺带把多用户权限、审计、知识库管理这些企业级的东西也做了。
什么人适合看这篇文章?如果你正在选型企业内部知识库、想在本地部署一套私有问答系统、或者纯粹想学 RAG 到底怎么落地,这篇文章能把思路和坑都讲透。我也见过不少用 Obsidian 做笔记的人想把笔记变成可检索的知识库,WeKnora 配合 Markdown 导入就能玩出“个人第二大脑”的效果。我会把 Windows 11 上的完整部署过程、模型接入方法、调优要点一起给出来,跟着操作基本能复现。
1. 项目定位与整体设计思路
1.1 为什么不能只靠大模型本身
很多人第一次接触 RAG 时会问:大模型不是已经学了海量知识吗,为什么还要外挂一个知识库?我自己在实际项目中感受到的理由主要有四个。
第一是时效性。模型训练有截止日期,昨天刚发布的业务规范、上周才更新的产品文档,模型根本不知道。RAG 等于给模型临时开卷考试,答案从你最新的文档里检索出来再生成,数据新鲜度由你决定。
第二是私有性。公司的财务制度、代码仓库里的内部框架、医疗机构的临床路径,这些数据既不能公开,也不该拿去训练别人的模型。私有化部署 + RAG 是当前最实际的方案,让模型参数不动,知识本体留在这套系统内部。
第三是幻觉控制。大模型的“一本正经胡说八道”在严肃场景里是致命的。RAG 把生成限定在检索到的片段之上,配合引用溯源,虽然不能 100% 杜绝幻觉,但至少每个回答能对应到原文出处,用户自己可以判断。
第四是更新成本。如果靠微调模型来更新知识,一次全量微调的成本极高,而且每次更新都是一次风险重演。RAG 则简单得多——删掉旧文档、上传新文档,索引一变,答案就变了。
这四点决定了一件事:知识库不是大模型的替代品,而是大模型的“外接记忆模块”。WeKnora 做的,就是把这块外接记忆做成了产品化形态。
1.2 WeKnora 的定位拆解:产品、框架、还是平台
我在部署之前专门看了一遍它的功能矩阵,发现 WeKnora 和市面上常见的“知识库 Demo”根本不在一个量级。它更像是一个 RAG 全链路平台,官方的定位有双重身份。
第一重身份是开箱即用的企业知识库系统。它自带前端界面,管理员可以在 Web 工作台里创建知识库、上传文档、管理用户和权限、查看问答日志。不需要写一行代码,产品经理都能操作。这一点对团队推广特别重要——你不可能让运营同事去写 Python 脚本调接口。
第二重身份是** RAG 服务化框架**。它提供 RESTful API,开发者可以把知识库问答能力嵌入到已有的 OA、企业微信、内部网站里。也就是说,它既能当独立产品用,也能当后端服务来集成。
然后还有第三重容易忽略的身份:它自带模型服务和 Agent 运行能力。部署包里有模型网关组件,统一代理大模型 API、嵌入模型、重排序模型;编排引擎能定义多步 Agent 流程,实现“检索→工具调用→总结”这类复杂任务。这也是它能和普通“文档问答 Demo”拉开差距的核心。
1.3 适合哪些人用,哪些人先别急
结合我这段时间的实测,我给出一个明确的画像:
- 需要快速在企业内网落地私有知识库的团队,选它很合适。Docker 一键启动、自带 Web 界面、权限可控,交付成本低。
- 有研发能力但不想从零造 RAG 轮子的团队,可以用它的 API 做二次开发。
- 个人用户想做本地知识库、配合 Ollama 跑私有模型,它也能胜任,前提是你的电脑内存不低于 16GB。
反过来,如果你需要非常灵活的低代码工作流编排(比如复杂的分支逻辑、多节点审批),或者希望深度定制文档解析器,WeKnora 的灵活度不如 Dify 那类偏向“工作流平台”的产品。它把很多事做成了“标准功能”,而不是“可编程积木”。这个取舍很关键,选型时一定要想清楚自己要的是“成品系统”还是“半成品框架”。
2. 核心功能与原理解析
2.1 六个核心组件,各自在链条里干什么
从部署层面看,WeKnora 的 docker-compose 里会拉起一组服务,理解这组服务的关系就理解了整个 RAG 架构。
前端工作台负责用户交互,包括知识库管理、问答界面、权限设置、日志审计。它是离用户最近的一层,所有操作最后通过 API 打到后端。
API 服务是大脑,负责接收请求、调度流程。你每次提问,先由它做 query 改写、调用检索、组装 prompt,最后把生成结果返回。问答日志和审计记录也都是这层在落库。
调度与任务处理服务处理异步任务,核心场景是文档解析和索引构建。你上传一个 PDF,它不会同步处理完,而是发一个任务给后台 worker,解析完成后再写进索引。
检索引擎承担了“文档切分、向量化、存储、检索”这个最重的环节。生产环境一般会用 Elasticsearch 类的组件来支持全文检索和向量检索混合召回,内置的索引存储也能完成向量检索,适合轻量场景。
模型网关统一接入各类大模型和嵌入模型。它对外暴露 OpenAI 兼容格式的接口,内部可以配置多个模型供应商,LLM 负责生成回答,Embedding 模型负责把文本转成向量,Rerank 模型负责精排。
对象存储和元数据库负责原始文件与知识元数据。文件原件存在对象存储里,知识库、文档、切块、命中记录这些结构化数据写在数据库里。
这套组件模型并不新鲜,但微信团队把它们打包成了“配置即用”的整体,这才是工程化能力所在。
2.2 一次问答背后:从上传文档到输出答案的完整链路
RAG 的流程我在项目里拆过无数遍,很多人以为“传文档、提问、出答案”三步就完了,实际上里面的细节直接决定检索质量。
上传阶段:你在工作台创建知识库后,可以批量上传 PDF、Word、Markdown、TXT 等格式。系统先把二进制文件存到对象存储,同时触发解析任务。
解析阶段:文档被拆成结构化文本。PDF 要抽取排版和文字,Word 要识别段落,Markdown 要保留标题层级。解析结果的好坏直接决定后续切块质量。我实测下来,排版混乱的扫描版 PDF 在这一步最容易翻车,文字版 PDF 表现正常。
切块阶段:解析出来的长文本切成固定大小的 chunk,一般策略是按段落优先、设置最大字符数和重叠区间。切块大小直接影响召回精度——块太大,语义混在一起,检索结果不聚焦;块太小,上下文割裂,召回内容不完整。后面会给出具体调参经验。
向量化阶段:每个 chunk 调一次 Embedding 模型,生成高维向量,存入向量索引。这一步要注意嵌入模型和检索场景的匹配,中文场景建议用中文语料训练过的模型,语义效果明显好于通用英文模型。
召回阶段:用户提问时,系统把 query 同样向量化,在索引里做相似度检索(还有关键词匹配做辅助召回),找出最相关的 Top-K 个 chunk。K 值越大,召回的上下文越丰富,但噪音也越多。
重排阶段:召回结果做一次精排,把真正有用的片段放在前面。Rerank 模型在这里很重要,它能学习“query 和文档片段之间的相关性打分”,把向量相似度不太准的结果纠正回来。
生成阶段:把精排后的片段拼进 prompt,连同问题一起发给大模型,模型基于检索到的片段生成回答,并保留引用来源。
这条流水线里,任意一环没做好,最终答案质量都会打折。WeKnora 的可贵之处在于它把这些环节都暴露成了可配置参数,而不是黑盒。
2.3 同赛道横向对比:WeKnora 与 Dify、RAGFlow、MaxKB
我同时部署过 Dify 和 RAGFlow,MaxKB 也在团队里试用过,这四个项目放在一起对比更有参考价值。直接说结论:它们解决同一个问题,但设计哲学完全不同。
| 项目 | 定位 | 工作流能力 | 知识库体验 | 部署难度 | 适合场景 |
|---|---|---|---|---|---|
| WeKnora | RAG 服务化知识库平台 | 内置 Agent 编排 | 完整企业级,含权限/审计 | 中,docker-compose 一键起 | 企业私有知识库、开箱即用 |
| Dify | LLM App 开发平台 | 可视化工作流极强 | 知识库是功能之一 | 中 | 需要灵活编排、多应用联动的团队 |
| RAGFlow | 深度文档理解引擎 | 弱 | 深度解析文档排版、OCR 优秀 | 中高 | 文档源复杂、对解析质量要求高 |
| MaxKB | 基于大语言模型的知识库问答系统 | 弱 | 简洁易用 | 低 | 快速上线问答机器人 |
Dify 的优势是“流程可编程”,你能拖拽出复杂的 Agent 工作流,比如先检索后调用工具。RAGFlow 在文档深度解析上做得极其细致,尤其是扫描件、复杂版式。WeKnora 的强项在“知识库产品完整性”,权限、审计、索引管理、多知识库隔离这些企业真正常用的东西,它是作为一等公民设计的。如果团队要的是“一套能马上给全员使用的知识系统”,WeKnora 更接近成品;如果要“搭积木玩花活”,Dify 更顺手。
3. 本机部署实操:Windows 11 环境完整记录
3.1 部署前的资源准备与环境检查
我在 Windows 11 上部署时,第一件事不是敲命令,而是确认环境符合要求。很多人卡在部署成功但界面打不开,十有八九是环境问题。
先说硬件。WeKnora 本身对 CPU 要求不算高,但如果你要本地跑模型,内存就是硬指标。我实测的配置是 i5-12400 + 32GB 内存 + 512GB 固态,同时跑 Qwen2.5-7B 和 bge-m3 嵌入模型,系统整体负载在 50% 左右。如果你的内存只有 16GB,建议跑 3B~4B 的小模型,或者把模型部署到另一台机器上,知识库服务单独跑。磁盘至少要预留 30GB 空间,模型文件 + 容器镜像 + 文档索引很快就会占满。
然后是 Docker 环境。Windows 11 上推荐用 Docker Desktop,开启 WSL2 后端。这一步非常关键,WSL2 提供了 Linux 内核,Docker 容器才能真正跑起来。我在安装时就遇到一个经典问题:BIOS 里没开虚拟化,WSL2 直接起不来。你在终端执行wsl --status能看到内核状态,如果是旧版本,先运行wsl --update升级。
最后说网络。因为要从镜像仓库拉取多个镜像,第一次启动的时间取决于网络状况。如果拉取超时,检查 Docker Desktop 的代理设置和网络连接,必要时多试几次,不要直接在 compose 阶段强行跳过,否则后面启动会缺镜像。
3.2 Docker Compose 一键启动:命令、参数与各服务说明
官方推荐的部署方式已经做到了“拉代码就能跑”的程度。我按实际操练顺序记录一遍:
第一步,克隆代码到本地目录。我放在D:\weknora,建议路径不要带中文,避免容器挂载时出现编码问题。
git clone https://github.com/Tencent/weknora.git cd weknora第二步,复制环境变量模板。项目根目录会有.env.example文件,cp一份并重命名为.env。所有关键配置都集中在这里,包括数据库密码、MinIO 的 AccessKey、端口号、存储目录等。
cp .env.example .env第三步,启动整套服务。
docker compose up -d我第一次执行时,命令运行到一半卡在下载镜像上。后来换了一个网络环境重跑,20 分钟左右完成。启动完成后用docker compose ps查看状态,正常情况下所有服务都应该是running或healthy。
这里要重点讲一下.env里的几个关键参数。端口配置默认是 9099,如果你本机 9099 被占用,可以改成 9100。存储路径决定原始文档和索引数据放在哪里,默认在项目目录下的data文件夹。数据库密码、MinIO 密钥这些建议全改掉,尤其如果你部署在公网测试环境,默认密码等于裸奔。
启动后浏览器访问http://localhost:9099,第一次进入会看到一个初始化页面,要求设置管理员账号和密码。这个步骤很容易被忽略——很多人以为系统自带默认账号,直接登录会提示账号不存在。设置完管理员后,进入工作台。
3.3 初始化配置:先连模型,再建知识库
界面能打开只是第一步,真正让系统“变聪明”的是模型接入。初始化向导会让你配置模型服务。这里我先说明一个核心概念:WeKnora 的模型网关兼容 OpenAI API 格式,所以任何提供 OpenAI 兼容接口的模型服务都能接入,不管它是云服务商、私有化部署的 vLLM、还是本地 Ollama。
我采用的是纯本地方案:Ollama 提供 LLM 和 Embedding 模型,全部跑在本机,数据不出内网。配置时需要填四项:接口地址、API Key、模型名称、模型类型。Ollama 的接口地址是http://localhost:11434/v1,API Key 随便填一个占位符即可,模型名称要填你实际拉取的模型名,例如qwen2.5:7b。
模型配置完成后,系统里还要设置检索模型。这一步很多人会漏掉——只配了对话模型,检索时发现找不到任何内容,看日志才发现是没配嵌入模型。我用的是bge-m3,中文语义效果好,输出维度也适配主流向量索引。完整链路是:Embedding 模型负责将文档切块向量化,LLM 负责基于检索结果生成回答,Rerank 模型可选,但建议配一个,对精度提升非常明显。
配置完模型,下一步是创建知识库。在“知识库管理”页面新建一个知识库,命名和描述建议写清楚,方便后续多知识库检索时路由。创建完成后进入知识库详情页,就可以上传文档了。
4. 知识库搭建与问答体验优化
4.1 多格式文档导入:从 PDF 到 Markdown 的解析体验
知识库建好后,我按常见场景把不同类型的文档都导入试了一遍。包含 Word 的操作手册、PDF 的合同模板、纯文本的会议纪要、以及 Obsidian 导出的 Markdown 笔记目录。
PDF 解析是最常见的需求,也是问题最多的一类。文字版 PDF 解析效果很好,段落结构和标题基本能还原。但扫描版 PDF 本质上是一张张图片,需要 OCR 能力,WeKnora 默认解析流程对这类文件的支持取决于部署时是否配置了额外的解析模型。我建议在导入前先确认文档是文字版还是扫描版,如果扫描版比例高,要么先做一次 OCR 预处理,要么用 RAGFlow 这类更偏文档解析的工具先转成 Markdown 再导入。
Markdown 的导入很惊喜,对于从笔记软件迁移过来的用户来说这是刚需。如果你和我一样用 Obsidian,可以把整个笔记库的 md 文件打包上传,标题层级会被保留到切块逻辑里,检索时标题信息能帮助模型定位更准确。
批量上传时有一个容易被忽视的点:文件名。中文文件名没问题,但特殊字符和超长文件名可能导致解析任务异常。我在导入一批带括号和空格的文档时遇到过任务一直处于“排队”状态,改名为简洁格式后恢复正常。这个坑我不想让你踩第二次。
4.2 核心参数调优:切块、Top-K、相似度阈值与 Rerank
RAG 项目里流传一句话:“模型决定生成上限,检索决定最终效果。”知识库建好后,参数调优才是真正的重头戏。下面这些参数我从项目日志和问答体验两方面做了实测对比。
切块大小与重叠区间。默认切块大小取决于文档解析后的文本长度,手动配置时,我推荐中文文档每块长度控制在 256~512 个字符,重叠区间控制在 10%~20%。为什么是这个范围?块太小,比如 128 字符,单块内信息量不足,检索时容易召回语义相近但缺失关键细节的片段;块太大,比如 1024 字符,一块里混入多个主题,向量化之后语义被稀释,匹配精度下降。重叠区间是为了避免切块边界把完整语义截断,比如一句话被从中间切开,两个块都不完整,重叠能让边界附近的语义在两个块里都有机会被检索到。
Top-K 召回数量。默认值一般在 5~10 之间。召回数量越大,模型看到的上下文越多,回答更全面,但噪音和 token 开销也越大。如果你的文档答案集中在一两段里,Top-K 设 3~5 就够;如果问题偏综合、需要跨文档归纳,可以调到 8~10。我维护的运维知识库问题偏“这个报错怎么办”,答案都在单篇文档里,所以我把 K 值压到了 4,召回精准度明显提升。
相似度阈值。这个参数决定“多像才算相关”。阈值设得太低,比如 0.3,召回结果里会混入大量无关片段,模型答非所问;太高,比如 0.9,又会漏掉很多真正相关的信息。我建议从 0.5 起步,根据实际回答质量逐步调高。这里注意,不同的 Embedding 模型产出的相似度分布差别很大,换模型后阈值一定要重新标定。
Rerank 模型的作用。向量语义检索擅长找“相似”,但不擅长判断“是否回答了这个问题”。Rerank 模型做的事是对召回结果逐条重新打分,把真正相关的排到前面。实测同一个知识库,接入 Rerank 后回答质量的提升非常显著,尤其是涉及专业术语时,向量相似度会把同义不同义的片段混在一起,Rerank 能把“陈皮是不是橘子皮”这类语义陷阱纠正过来。
4.3 问答效果实测:怎么判断“匹配度提升了”
调参最怕的是凭感觉,改一个参数就说“效果变好了”。我在项目里养成了用测试集量化评估的习惯。
先准备 20~30 个典型问题,每个问题配上正确答案所在文档和预期输出片段。然后逐个提问,看系统是否正确命中了目标片段。记录命中的数量和回答内容质量,每次调整参数后跑一遍同一套测试集,对比变化。这个工作不复杂,但它能把“我觉得变好了”变成“命中率从 65% 提升到 85%”,可靠得多。
我在运维知识库上做过一组对比:默认参数时 Top-1 命中率大概 60% 左右,问答中有一半的内容会附带不相关片段;调整块大小为 256、Top-K 为 4、接入 Rerank 后,命中率提升到 85% 以上,回答里基本没有无关内容。这个结果说明,多数情况下问题不出在模型不行,而是参数没配对。
另一个实用技巧是利用系统自带的问答日志。每一条用户提问和命中片段都会被记录下来,你可以定期翻看,把“回答质量差”的问题单独拎出来反查,看它命中的是哪个块、相似度分数多少,然后反推是切块问题还是阈值问题。这种日志驱动的调优方式,比盲目调参高效得多。
5. 进阶玩法与周边联动
5.1 Obsidian + WeKnora:把笔记变成私人知识库
前阵子“Obsidian 知识库搭建”总在热搜榜上,但很多人搭了半天只是把笔记堆在一起,检索和问答还是要靠人肉翻阅。WeKnora 能把这个流程补完:Obsidian 负责创作和整理,WeKnora 负责检索问答,两者互补。
实际操作很简单。在 Obsidian 里建一个专门存放“要喂给 AI 的笔记”的文件夹,写好笔记后用 Git 同步或直接拷贝到本机目录,然后在 WeKnora 工作台里批量上传。我后来直接写了一个小脚本,把 Obsidian 库里的 Markdown 文件按目录结构打包成一个 zip,定时上传到 WeKnora 知识库,每次笔记更新后手动重新上传一次即可。如果你愿意折腾,也可以用 API 编一个定时同步任务,把“上传”这个动作自动化。
这套组合的体验很奇妙。笔记里那些零散的点,比如某个服务的配置命令、某次故障的排查思路,原来散落在几十个 md 文件里,现在可以直接用自然语言问:“上次 MySQL 主从延迟我们最后怎么解决的?”它能把 3 个月前写的一句话精确捞出来。个人知识库的价值不在“存得多”,而在“能问得准”,这正好是 RAG 的强项。
5.2 Agent 流水线:从单轮问答到多工具协作
WeKnora 不只是一个“问答盒子”,它的编排引擎允许定义 Agent 流程。我在部署完基础问答后进一步试了多步 Agent 场景,这是很多人忽略的功能。
举个例子,一个典型的运维分析流程是:“用户反馈系统卡顿 → 检索知识库里相关故障文档 → 调用一个脚本接口查当前系统状态 → 总结两者并给出建议。”用 WeKnora 的编排引擎,可以把知识库检索当作一个工具节点,把外部 API 作为另一个工具节点,让模型自主决定先查知识库还是先查状态,最后汇总回答。
这种能力让它从“知识问答”升级为“知识驱动的自动化助手”。不过要注意,Agent 流程的实际效果强烈依赖模型能力,本地 7B 模型在复杂工具调用上不如云端大模型稳定。我的建议是:企业内部如果先用知识库问答验证了价值,再逐步把 Agent 流程跑起来,不建议一上来就搞全自动决策。
5.3 企业级落地的几个必须留意的点
企业部署和本人折腾最大的差别在于:数据安全、权限隔离、审计流程一个都不能少。
权限隔离方面,WeKnora 支持多用户体系,可以按用户组分配不同知识库的访问权限。这个设计很实在,比如研发知识库和人事知识库放在同一套系统里,但不同部门只能看自己的部分。后端用到的群组和角色权限,建议上线前就把规则理清楚,不要等用户量大了再来补。
审计方面,系统记录了问答日志和操作日志,谁在什么时候问了什么问题,管理员都查得到。对企业来说这既是合规需要,也是安全底线。文档更新时建议建立发布流程:先在测试知识库里验证新文档的检索效果,再正式发到生产知识库。知识库的维护者和使用者可以是两拨人,上线前想好这个分工,能省很多后患。
还有一点容易被忽略:知识库不是“传完就完”,里面的文档也有生命周期。产品经理改个术语,运维更新个命令,这些变更都要同步反映到知识库里。建议每周或每月清理一次过期文档,重新生成索引。我见过太多知识库刚上线时很好用,三个月后没人维护就变成了“垃圾场”。
6. 常见问题与排查技巧实录
6.1 我踩过的坑:从部署到上线全过程实录
部署和调优过程中我遇到的坑不算少,挑几个典型的写在这里,希望后来者绕道。
第一个坑是容器时区问题。启动完成后我查看日志,发现任务执行时间比本地时间慢了 8 小时,一开始没在意,后来排查一个问题时发现时间错乱导致调度任务没有正常执行。解决方法是在 Docker Compose 的环境变量里增加时区配置,确保容器和宿主机一致。
第二个坑是磁盘空间不足。跑了一个多月后,突然出现文档解析失败的情况。看日志发现 MinIO 在报磁盘空间不够,原来默认存储路径把原始文件和索引都堆在系统盘上,Windows 更新和 Docker 镜像本身就占用大量空间,磁盘扛不住了。后来我把存储目录迁移到数据盘,事情才平息。建议部署时就规划好存储路径,别默认全放 C 盘。
第三个坑是模型服务未就绪时初始化失败。我第一次配置模型时把 Ollama 的模型名称填错了,系统里提示配置成功,但实际问答时一直报错。排查了很久才发现是模型名称和实际拉取的不一致。这里提醒一下,Ollama 的模型名称要填完整标识符,比如qwen2.5:7b-instruct,不能只填qwen。
6.2 高频问题速查表
把实际使用中高频出现的问题整理成了速查表,你可以直接对照排查:
| 现象 | 可能原因 | 排查方法 |
|---|---|---|
| 文档一直显示“解析中”或“解析失败” | 文件格式超长、解析服务异常、存储空间不足 | 查看解析任务日志,确认文件格式是否支持,检查磁盘空间 |
| 问答返回空白或报错 | LLM 模型未配置、模型名称错误、模型服务未启动 | 在模型配置页测试连通性,确认 Ollama 或外部 API 可访问 |
| 回答内容似是而非 | 相似度阈值过低、Top-K 过大、没有 Rerank | 降低 K 值、提高阈值、接入 Rerank 模型 |
| 检索不到任何内容 | Embedding 模型未配置、知识库为空、索引未生成 | 检查嵌入模型配置,重新触发索引构建 |
| Web 界面打不开 | 端口被占用、容器未启动 | docker compose logs查看启动日志,检查端口映射 |
| 上传文档失败 | 文件超过大小限制、文件名含特殊字符 | 检查文件名,压缩后重新上传 |
| 问答速度很慢 | 本地模型推理速度受限、上下文过长 | 减小 Top-K、优化 prompt、换更小的模型 |
6.3 独家避坑技巧:日志是你的第一排查工具
最后说一个贯穿始终的排查思路:RAG 系统的问题永远分三层——数据层、检索层、生成层。遇到问题先定位在哪一层,再动手。
数据层看解析和索引进度。日志里解析任务有没有报错、索引有没有构建完成,这一步挂了后面全白搭。检索层用测试问题验证召回结果。系统日志里能看到某个问题命中了哪些 chunk、相似度分数是多少,直接判断召回是否准确。生成层再看模型输出。如果召回没问题但回答乱写,那就是 prompt 或模型本身的问题。
这套分层排查思路帮我节省了大量时间。很多新人一遇到问答质量差就归咎于模型,实际上 90% 的案例里问题出在参数、数据或索引,而不是模型本身。
如果问我在实际使用中最大的体会是什么,大概是“部署只是开始,调优才是常态”。WeKnora 把 RAG 的工程复杂度收敛得很好,但知识库的质量最终还是靠运营维护。我个人建议每个准备上知识库的团队,先把“维护责任人”和“效果评估指标”定下来,再谈部署。不然再好的引擎,喂进去一堆过期文档,也只会答出一堆看似合理实则过时的内容。