别被 RAG 的召回率骗了,上下文缺口才是企业级 AI Agent 的致命伤
很多开发者依赖 OpenAI 的 File Search 或 Google 的 Vertex AI Search 这种原生检索方案,因为它们开箱即用,部署成本极低。但这种便捷背后隐藏着一个巨大的风险——缺乏一个受治理的语义层(Semantic Layer)。在企业内部文档中,由于版本迭代、不同部门的描述习惯以及历史遗留数据的冗余,同一个知识点在不同文档中可能存在自相矛盾的情况。当 RAG 检索出几段碎片化的上下文喂给 LLM 时,模型面对的是一组相互冲突的指令或事实。此时,模型并不会像人类一样质疑数据的真实性,而是会基于概率分布,将这些碎片信息强行拼接成一个看似逻辑自洽但事实错误的答案。
这就是典型的“上下文缺口”问题。在这种情况下,即便你的向量数据库(Vector DB)能够 100% 精准地把相关文档召回,只要这些文档本身存在缺失或冲突,最终生成的答案依然是幻觉。
目前业界为了解决这个问题,尝试了多种路径,但效果各异。最常见的是推行混合检索(Hybrid Retrieval),试图通过将 Dense Vector 检索与传统的 BM25 关键词检索结合,来提高召回的精准度。但事实证明,混合检索只能解决“找得准不准”的问题,解决不了“找回来的东西对不对”的问题。
真正有效的方案应该是构建一个独立于 LLM 之外的语义层。这一层的作用是在数据源和大模型之间建立一套治理机制,确保喂给模型的上下文在逻辑上是一致的。然而,目前大多数企业项目仍处于开发阶段,真正能够规模化上线且具备动态对齐能力的语义层极少。
在工具链选型上,我也观察到一个明显的趋势:尽管原生检索工具普及率极高,但资深的架构师会倾向于保留独立的向量数据库(如 Milvus 或 Pinecone)。这不仅仅是为了避免供应商锁定(Vendor Lock-in),更关键的是,独立的数据库允许开发者在检索前对数据进行更精细的预处理和元数据过滤,从而在源头上减少冲突信息的进入。
总结来说,现在的痛点已经从“如何实现检索”进化到了“如何信任检索结果”。如果底层的语义治理跟不上,无论你如何优化 Embedding 模型,或者尝试更复杂的 Rerank 算法,都无法从根本上消除幻觉。企业在追求 Agent 的智能化之前,必须先面对一个血淋淋的事实:如果你的知识库本身就是混乱的,那么 RAG 实际上是在用 AI 的速度,加速地向用户传递错误的信息。