为1000万+文档设计近零幻觉的RAG管道
字数 4240,阅读大约需 20 分钟
为什么在知识准确性才是真正产品的场景下,检索质量比前沿模型更重要

“设计一个拥有1000万文档、近零幻觉的RAG管道。”
乍一听,这听起来是一个模型问题。
你可能认为答案很简单:使用最强的LLM、扩大上下文窗口、连接向量数据库,然后让它回答问题。
但在企业规模下,这种方法很快就会崩溃。
当你在处理1000万+文档时,困难的并不是生成。困难的是找到正确的证据、证明这些证据是可信的,以及迫使智能体仅基于这些证据来回答。
如果检索薄弱,即使强大的模型也会产生幻觉。如果插入的块不正确,即使很大的上下文窗口也会失败。向量数据库仍然可能返回语义相似但事实不相关的内容。
这就是为什么一个严肃的RAG系统不仅仅是”LLM + 嵌入”。
它是一个完整的检索、排序、置信度、生成、引用、评估和可观测性管道。🚀
真正的目标:不只是回答——而是证明答案 ✅
在普通的聊天机器人中,用户提问,模型回答。
在一个高风险的RAG系统中,这还不够。
系统必须只在有足够证据时才回答。它必须引用所使用的确切来源。它必须拒绝弱上下文。它必须解释不确定性。它必须记录答案是如何产生的。当证据不足时,它必须说明这一点,而不是编造一个看似合理的回答。
这就是”零幻觉”的真正含义。
严格来说,没有任何AI系统可以在所有可能条件下保证绝对的零幻觉。但你可以设计架构,使幻觉变得更难发生、更容易检测、更不可能到达用户。
系统应该表现得不像创意作家,而更像谨慎的研究助手。
它不应该问:”什么听起来像好答案?”
它应该问:”从检索到的来源中,我能证明什么?” 🔐
步骤1:摄取并规范化文档 📚
RAG系统早在用户提问之前就开始了。
它从摄取开始。
当你有1000万+文档时,它们很少是干净的。它们可能来自PDF、HTML页面、Word文件、电子表格、Wiki、内部知识库、电子邮件、工单、扫描文档和API导出。有些是重复的。有些是过时的。有些缺少元数据。有些是版本化的。有些包含表格、脚注、图片或引用。
如果摄取混乱,检索就会混乱。
第一步是规范化一切。
文档应该去重,这样系统就不会从十个略有不同的副本中检索到相同的答案。格式应该标准化,这样下游分块和索引是一致的。元数据应该仔细提取:文档标题、作者、部门、时间戳、版本、访问权限、源系统、文档类型和信任级别。
版本历史也很重要。2021年的策略文档可能与2026年的策略文档相矛盾。如果系统无法区分新鲜度,它可能会自信地引用过时的信息。
这就是为什么摄取不仅仅是数据加载。
它是知识准备。 🧠
步骤2:使用混合检索,而非仅语义搜索 🔎
在大规模场景下,仅语义搜索是不够的。
嵌入在捕捉语义方面表现出色。它们帮助系统理解”员工报销截止日期”和”费用提交窗口”可能指的是相似的概念。
但嵌入在精确标识符、产品代码、法律术语、策略编号、错误消息、名称和稀有关键词方面可能表现不佳。
这就是BM25仍然重要的原因。
BM25是一种传统的词法检索方法。它在关键词匹配方面很强。如果用户搜索特定的错误代码、法规编号、合同条款或API字段名,BM25可能优于嵌入。
一个强大的企业级RAG系统结合两者:
BM25用于精确关键词匹配。嵌入用于语义理解。
这种混合方法提高了召回率和精确率。它能捕获纯向量搜索可能遗漏的文档,并过滤掉听起来相关但实际上不有用的模糊语义匹配。
在1000万+文档规模下,检索不是关于一种聪明的搜索方法。
而是关于组合互补信号。 ⚙️
步骤3:ANN检索快速找到候选 ⚡
直接搜索数百万个文档块是昂贵的。
这就是为什么向量搜索系统使用ANN——近似最近邻检索。
ANN方法快速检索与查询嵌入最相似的前候选块。它们以少量精确性换取大规模速度提升。
这在企业规模下是必不可少的。
系统不能将用户查询与1000万文档语料库中的每个块进行深度比较。相反,它首先缩小搜索空间。ANN检索一组可管理的候选,通常是前50、100或500个块。
但ANN只是第一遍。
它快速,但不是完美的。
许多团队犯的错误是将ANN结果直接发送给LLM。这往往导致弱的基础,因为顶级向量匹配可能不是最佳证据。
候选检索之后应该进行重排序。
步骤4:重排序提高相关性 🎯
重排序是检索质量大幅提高的地方。
在BM25和向量搜索检索候选块之后,重排序器会进行更深入的评估。例如,交叉编码重排序器将查询和每个候选块一起比较,而不是仅依赖预计算的嵌入。
这给出了更精确的相关性评分。
重排序器可以重新排序候选,提升高度相关的块,降级松散相关的块。
MiniLM、BGE重排序器或其他交叉编码方法通常用于此目的。确切的模型取决于延迟、领域和准确性要求。
当文档语料库非常大时,重排序尤其重要,因为”相关”和”支持回答”之间的区别变得至关重要。
一个块可能语义相似,但仍然无法回答问题。
一个好的重排序器有助于将有用证据与背景噪声分开。 ✨
步骤5:对来源置信度评分 🧾
检索相关性不等于来源可靠性。
一个块可能很好地匹配查询,但仍然是过时的、低信任度的、重复的、不完整的,或被更强来源所反驳的。
这就是为什么一个严肃的RAG管道需要来源置信度评分。
每个检索到的块应该根据新鲜度、权威性、文档信任级别、与其他检索来源的重叠度、检索一致性以及元数据质量等因素获得置信度评分。
例如,一份上周更新的官方策略文档应该比三年前的旧Slack消息更有分量。来自批准知识库的来源应该比未经验证的笔记排名更高。一个被多个独立块支持的声明应该比只在一个弱来源中发现的声明更可信。
低置信度块不应该大量影响生成。
在某些情况下,它们应该被完全过滤掉。
这是玩具RAG和生产级RAG之间最大的区别之一。
生产级RAG不仅需要知道什么是相关的,还需要知道什么是可信的。 🔐
步骤6:约束生成保持模型扎根 🤖
一旦系统检索并评分了证据,LLM就可以生成答案。
但模型必须受到约束。
指令应该明确:只使用检索到的上下文回答。不要使用外部知识。不要填补空白。不要猜测。如果上下文没有包含足够证据,说明未找到足够证据。
这改变了模型的角色。
它不再充当通用知识引擎。它充当检索证据之上的综合层。
生成提示应该包括用户查询、选定的源块、置信度元数据、引用标识符和严格的输出规则。
对于高风险用例,系统可能还要求模型产生声明级引用。这意味着每个主要声明都必须链接到一个源块。
这迫使模型保持负责。
没有约束生成,即使强大的检索管道也可能被过度自信的模型破坏。
步骤7:引用支持的响应建立信任 📌
没有引用的RAG答案难以信任。
引用支持的响应使系统可审计。
每个主要声明都应该链接回文档、页面、块、时间戳或来源ID。这允许用户和审计员验证答案来自哪里。
例如,不要说:
“报销截止日期是30天。”
引用支持的系统的说法是:
“根据差旅政策v4.2第12页,报销截止日期是费用批准后30天。”
这更有说服力。
引用也使调试更容易。如果答案是错误的,工程师可以检查是否检索到了错误的文档、重排序器选择不佳、源置信度评分过于宽松,或者模型误读了上下文。
引用将RAG从黑盒变成证据支持的系统。 📚
步骤8:添加幻觉回退层 🚨
最安全的答案有时候是没有答案。
如果检索置信度低于定义阈值,系统不应生成响应。它应该返回类似:
“未找到足够证据来回答此问题。”
这不是失败。这是安全功能。
幻觉回退层防止弱证据变成自信的答案。
阈值可能取决于领域。客户支持机器人可能容忍一般问题的中等置信度。法律、医疗、金融或合规系统应该要求更强的证据。
这一层是系统选择信任而非完整性的地方。
用户可能更喜欢诚实的”我不知道”,而不是精心制作但错误的答案。
在企业AI中,克制是一种功能。 🛡️
步骤9:持续评估是强制性的 🧪
RAG管道永远不会完成。
文档会变化。嵌入模型会变化。用户行为会变化。新的边缘案例出现。检索质量会漂移。索引会变得陈旧。分块策略会老化。
持续评估使系统保持诚实。
管道应该用对抗性查询、检索召回率基准、幻觉测试、离线评估数据集和真实用户反馈进行测试。
对抗性查询尤其有用。它们测试系统是否在本应拒绝时回答、是否引用弱来源、是否混淆相似文档,以及是否发明缺失细节。
检索召回率基准测量正确来源是否出现在候选集中。这很关键,因为如果检索失败,生成无法恢复。
幻觉率跟踪有助于衡量答案包含不支持声明的频率。
评估应该持续进行,而不是在发布前进行一次。
没有评估的RAG系统只是带有向量数据库的氛围。 😅
步骤10:缓存和记忆改善延迟 ⚡
在1000万+文档规模下,检索可能很昂贵。
许多企业用户会问重复或相似的问题。缓存频繁查询、检索结果、重排序块和最终响应可以显著改善延迟并降低成本。
缓存应该仔细进行。
你需要尊重权限、文档新鲜度和用户上下文。如果访问控制不同,一个用户的缓存答案对另一个用户可能不安全。如果底层文档发生变化,缓存响应可能变得陈旧。
记忆也可以帮助个性化响应或保留会话上下文。但记忆不应该覆盖检索证据。它应该支持工作流程,而不是成为不受控的真实来源。
最好的系统缓存检索路径和经验证的证据,而不是随机模型输出。
速度只有在保持正确性的前提下才有用。 🚀
步骤11:全面可观测性 👀
在这个规模下,你需要看到管道内部。
可观测性应该追踪完整的检索路径:原始查询、重写查询(如果有)、BM25结果、向量结果、ANN候选、重排序器评分、置信度评分、选定的块、拒绝的块、生成提示、引用、token使用、延迟和最终输出。
这很重要,因为RAG失败可能发生在多个层。
查询可能模糊不清。分块可能不佳。嵌入模型可能遗漏正确文档。重排序器可能降级最佳来源。置信度评分器可能信任陈旧内容。LLM可能误解表格。
没有可观测性,团队无法诊断这些失败。
仪表板、追踪、失败案例日志和token归属使系统可维护。
如果你无法检查答案为何产生,你就无法负责任地部署系统。
为什么检索质量比模型更重要 🧠
对于1000万+文档,前沿模型不是主要瓶颈。
检索才是。
如果正确的证据从未进入上下文窗口,强大的LLM也无法正确回答。它可能听起来更聪明,但仍然会扎根于错误的信息。
这就是为什么RAG质量很大程度上取决于摄取、分块、元数据、混合检索、重排序、置信度评分和评估。
模型是最终的合成器。
检索系统是基础。
更好的检索通常比切换到更大的模型更能提高答案质量。
在企业规模下,世界上最聪明的模型仍然受限于你给它的证据。 🔍
最终思考 💙
为1000万+文档设计近零幻觉的RAG管道,不是简单地将LLM插入向量数据库。
而是关于构建可信的知识系统。
你需要干净的摄取、混合检索、ANN搜索、重排序、源置信度评分、约束生成、引用支持的答案、回退行为、持续评估、缓存、记忆和可观测性。
最重要的原则很简单:
系统只应该回答它能证明的内容。
如果有强有力的证据,生成扎根于证据的响应。如果证据很弱,说明这一点。如果提出声明,引用它。如果某事失败,追踪它。
这就是RAG从演示到生产的方式。
在2026年,生产级AI不是关于听起来智能。
而是关于值得信赖。
夜雨聆风