本地知识库选Dify还是AnythingLLM?我把1800份PDF喂进去后,发现重点根本不是模型

🔑 关键词:本地知识库,Dify,AnythingLLM,RAG,文档切分

📖 摘要:我拿1837个文件、42GB资料实测Dify、AnythingLLM、RAGFlow、FastGPT。结论有点反常识:个人本地知识库的瓶颈不是模型,而是文档治理、混合检索和引用可验证。

我去年年底开始折腾个人本地知识库,起因很俗:手里有 1837 个文件,42GB,PDF 约 1200 份、Word 310 份、Markdown 180 份、网页剪藏 147 份。里面有招股书、论文、客户会议纪要、我自己写的 8 年日记。最初我跟你一样,先搜“Dify 和 AnythingLLM 哪个好”,然后装了 Dify 1.x、AnythingLLM 1.7.x、RAGFlow 0.17.x、FastGPT 4.8.x,拿 Mac mini M2 16GB 和一台 4060 Ti 16GB 的 Windows 机来回跑。结果第一个星期就崩了:问“2023 年 Q3 那家客户的毛利率为什么降了”,Dify 给我扯到 2021 年另一家公司;AnythingLLM 更绝,引用了会议纪要,但页码是隔壁 PDF 的。我承认,我一开始也以为换个更大的模型就能解决,后来发现这想法很外行。

图片

先说反常识结论:个人本地知识库的胜负手,不是模型,甚至不是向量数据库。是文档治理。你如果只有 200 份以内、结构清楚的文档,我劝你别上 RAG。用 Everything 配文件名规则,加 Claude/ChatGPT 的项目知识库,或者 Obsidian + Omnisearch,可能更快。因为 RAG 的维护成本特别容易被低估:扫描件要 OCR,表格要单独处理,版本会重复,文件名一乱,检索就跟着乱。我做过一个很土但有效的测试:把同样 1837 个文件,先不改任何东西丢进 AnythingLLM,50 个问题里答对 19 个;后来我只做了三件事——统一文件名、扫描件全部 OCR、按 H1/H2 切分——同一套模型答对 34 个。模型没换,参数没大改,准确率从 38% 到 68%。这还没上 rerank。

图片

第二件事,别迷信“向量检索”。中文场景里,尤其是合同、财报、会议纪要,关键词检索经常比向量更稳。比如“递延所得税资产”“对赌协议”“Q3 毛利率”,这些词向量模型不一定抓得准,BM25 反而一抓一个准。我现在的默认配置是混合检索:BM25 + 向量,top_k 先给 20,再用 bge-reranker-v2-m3 重排到 top_n 5。Embedding 用 bge-m3,1024 维,chunk_size 512,overlap 80;如果是法律合同,chunk_size 降到 256,overlap 60;如果是技术文档,chunk_size 可以到 800,overlap 100。LLM 我常用 qwen2.5:14b-int4,temperature 0.2,4060 Ti 16GB 上大概 8-12 token/s,检索延迟 1.8 秒左右。这个速度不性感,但够用。你要问我为什么不直接上 70B?因为我的耐心只有 3 秒,超过 5 秒我就会去刷手机,然后忘了自己问啥。

图片

再说产品对比。我按 7 个维度打分:部署难度、文件解析、检索质量、引用溯源、多用户权限、更新维护、成本。Dify 强在工作流和编排,适合你已经知道自己要搭一个“应用”,但个人知识库的文档解析和引用不算最省心;AnythingLLM 强在开箱即用,桌面端和 Docker 都简单,适合一个人快速试,但文档一多,权限和批量管理会有点糙;RAGFlow 的解析和引用做得更细,尤其是复杂 PDF 和表格,但资源占用也更高,我第一次跑的时候 16GB 内存机器直接开始交换;FastGPT 的流程和 API 更顺,适合后面要接微信/网页,但纯个人本地用,配置项多到让我想关电脑。这里没有“最佳”,只有你愿意忍哪种麻烦。你要是只想周末搞明白,AnythingLLM;你要是要给 10 个人用,Dify 或 FastGPT;你要是被 PDF 表格折磨过,RAGFlow 值得试。

图片

具体怎么做?我踩完坑后固定成 7 步。1)文件清洗:先删重复版本,文件名统一成“日期_来源_主题_版本”,比如“2024-09-12_客户A_季度会_纪要_v3”。2)OCR:扫描件用 PaddleOCR 或 MinerU,别直接丢,丢进去就是灾难。3)元数据:每个文件至少存来源、日期、作者、标签,后面过滤能救命。4)切分:优先按标题层级切,不行再按 512 token,overlap 80。5)混合检索:BM25 + 向量,top_k 20,rerank top_n 5。6)评估:自己写 50 个真实问题,每个问题标注正确答案所在文件,答不对就看检索结果,不要只看最终回答。7)更新:文档改了要删旧索引,别只加新的,不然模型会拿两个版本打架。我现在的 50 题测试集里,20 题是“跨文档对比”,15 题是“数字查找”,10 题是“时间线”,5 题是“找不到时该说找不到”。最后这 5 题最重要,很多知识库死就死在胡编。

图片

最后说个可能得罪人的观点:本地知识库不是让你跟文件聊天,而是让你更快找到那一段。聊天只是壳,搜索才是核。你真正要优化的是“检索命中率”和“引用可验证”,不是让模型说得更像人。我现在甚至把最终回答关掉了,只让它返回 5 个片段和来源文件,我自己看。效率反而更高。因为 AI 总结得再漂亮,只要引用错了,你就得回去翻原文;那还不如一开始就给我原文。至于微调,除非你有 1 万条以上高质量问答对,而且场景非常固定,否则别碰。先把你那 1837 个文件名改明白,比什么都强。

图片

🏷️ 标签: