现在都说要跟 AI 打好配合,提升工作效率。但是我用了这么久下来,发现 AI 幻觉是避免不了的,只是或多或少的问题。
比方说你要搭一套 RAG 系统,或者给 Agent 接上公司内部知识库,测试的时候看起来还行,但一遇到真实的文档,比方说一份产品规格书,一份带多级嵌套表格的金融年报,或者是一组混排了图片、表格、参考文献的技术白皮书......AI 就开始频繁出错。要不就说信息找不到,要不就找错。
但是呢,它这些“幻觉”不是每次都出现的,它是时对时错,毫无规律,你调整 Prompt 、更换 Embedding 模型、试了各种分块策略,但效果总是不稳定。整到后面,人都麻了。
有时候我会想,算了,也许这就是人类程序员还存在的理由?————给 AI 擦屁股?
分享一下我给 AI 擦了这么久的屁股之后,感觉比较有用的一些思路吧。
首先模型是没法大改的了,至少对于我等普通小喽啰而言,等它自己更新更现实(大佬应该不会看到我的帖子吧,请 pass 哈)。但是在这个过程中,活还是要干的,那么怎么保证产出的准确性呢?我觉得优化 RAG 是一个比较可行的思路。
现在的大模型在生成答案前,往往会先通过 RAG 从广泛的文档数据库中检索相关信息,然后利用这些信息来引导生成过程。但大多数 RAG 系统处理文档的方式非常“暴力”:它会把 PDF 、Word 或者网页内容提取成纯文本,然后用一个固定的窗口大小(比如 500 个 token )把文本切成一块块,也就是所谓的 Chunk 。
在这个过程中,标题层级可能被削平了,表格被拦腰截断,图和文字的关联彻底消失。每个 Chunk 都是一张碎片,前后文、结构、归属关系全丢失,丢给 AI 做检索增强时很容易让 AI 找不着北。
但 AI 是被训练过的,它要避免说“我不知道”,这是“主人的命令”。于是,它只好用语言模型的概率能力去“脑补”,幻觉就这样产生了。
我的解决办法,就是换一种解析方式。抛弃传统的按字数打断的切片方式,转而采用类似脑图的树形结构进行拆分,尽量保留切片的上下文信息,减少信息缺失导致的 AI“脑补”行为。
具体流程分三步:
1 、解析。接入高质量的解析器来读取 PDF 、PPT 、图片、表格等格式,先拿到一个相对干净的文本初稿。
2 、结构化。建立文档的标题树,从一级标题到二级、三级,每一块文本都挂载到对应的章节路径上。表格和图片不是抽离出来当作独立附件,而是和内联的上下文文本牢牢绑定,确保 AI 能看到“这张表格是属于哪一段话”的完整关系。
3 、构建记忆。构建一个包含章节树、文本块、摘要、图像描述以及跨文档链接的轻量级记忆图谱。这个图谱就像是给 AI 配了一本带有详细目录、索引和超链接的电子书,AI 检索时可以在图谱里沿着路径上下左右导航,精准定位到最相关的证据区域,而不是仅仅依靠向量相似度去猜测。
测试下来,相比于传统的 RAG 或是使用原始文本,AI 的表现都要好很多:以 RAG 中常见的 Agent 问答任务为测试场景,当直接给 Agent 提供原始文档,或者使用主流解析器生成的 markdown/json 文件时,Agent 的最终回答准确率大约在 53%左右。
但使用新方法处理过的文档后,AI 准确率提升到了 79%。同时,Agent 的首次搜索准确率相对原始文档提升了 36%,召回率提升了 10%。再者,因为切片太碎导致的无效检索减少了嘛,所以 Token 消耗和搜索时间也随之下降了。
这在跟 AI agent 有关的场景里面都适用。
现在,我把这个方法打包成了一个工具 Knowhere ,开源的: https://github.com/Ontos-AI/knowhere 。如果你懒得自己操作,那可以借助工具的力量。
它可以显著提升这几类场景的体验:
-
面向企业的智能问答或知识库。Knowhere 能让 AI 给出的答案更准确、更可追溯,每一条结论都能定位回原文的具体位置。
-
金融、法律、医疗等垂直领域的 Agent 应用。Knowhere 可以保留多级复杂表格和图表的结构,不再让关键数据被“切碎”。
-
如果你在管理大量学术文献或技术文档,它可以在不同文档之间建立关联图谱,让 Agent 做跨文档推理时更可靠。
欢迎尝试,有问题随时问我。