跳到主要内容

50 篇博文 含有标签「retrieval」

查看所有标签

针对幻影库存的 RAG:当你的语料库描述产品已删除的功能时

· 阅读需 12 分钟
Tian Pan
Software Engineer

一位客户询问你的支持代理如何执行某项操作。代理检索到了三个相关性评分很高的文档分块,合成了一个自信的答案,并引导客户完成一个五步操作流程。然而,这个流程的最后一步是一个在四个月前就已经不存在的按钮。客户提交了工单。值班工程师调出评估套件,发现结果是绿色的;调出检索追踪,发现结果也是绿色的——模型没有产生幻觉,它忠实地引用了描述产品团队在上个季度发布中重命名的功能的文档。

这就是我想命名的失败模式:不是幻觉,也不是检索未命中,而是幻影库存 (phantom inventory) 问题。你的检索语料库是已不存在的产品界面的快照。向量存储不知道产品发生了变化。评估套件也不知道。唯一能持续捕捉到这一点的系统是支持工单队列,而当工单提交时,客户已经被告知去点击一个并不存在的按钮了。

RAG 中的新鲜度与相关度权衡:为什么你无法在查询时同时优化两者

· 阅读需 13 分钟
Tian Pan
Software Engineer

一名用户询问你的助手公司的育儿假政策。机器人返回了 12 周,并附带了引用。被引用的文档是 2023 年的正确答案;而人力资源部门在上个季度发布了更新,将其延长到了 16 周。这两个版本都在你的知识库中。由于旧版页面的表述更简洁且模棱两可的内容较少,余弦相似度给 2023 年版本的评分是 0.87,而 2024 年版本的评分是 0.84。较新的文档以 3 个百分点的差距落败,用户得到了一个看似经过审计的错误答案。

这就是时效性与相关性的权衡(freshness-relevance tradeoff),令人不安的是,这在查询时并没有完美的解决方案。如果你增加时效性的权重,检索结果就会偏向于昨天刚编辑过的任何内容——在大多数知识库中,这些通常是高频变动的嘈杂区域,不应作为事实来源。如果你不增加时效性的权重,你给出的答案将基于几个月前就被取代的文档。没有一个全局按钮能同时搞定这两点,大多数团队只有在一些令人尴尬的答案绕过评估套件泄露出去后,才会发现这个问题。

检索级联失效:文档删除如何毒害你的 RAG 流水线

· 阅读需 11 分钟
Tian Pan
Software Engineer

一个用户询问你的支持机器人退款期限何时结束。机器人带着愉快的自信给出了“60 天”的回答并附带了引用。然而,那个写着“60 天”的策略页面早在三个月前就从 CMS 中删除了。新策略是 14 天。直到有客户投诉,你的团队中才有人意识到机器人出错了。

这就是检索级联失效(retrieval cascade failure):文档已从事实源中消失,但其嵌入(embedding)仍留在索引中,在余弦相似度排名中依然靠前,不断为模型提供一个“幽灵”。RAG 流水线将向量索引视为源内容的缓存,但大多数团队在构建缓存时并没有构建失效机制。插入操作得到了所有的工程关注,而删除操作只得到了一个 TODO 注释。

80% 陷阱:聚合 RAG 指标如何掩盖系统性长尾失效

· 阅读需 11 分钟
Tian Pan
Software Engineer

你的 RAG 管道在评估集上达到了 80% 的检索准确率。团队将其发布。三周后,一位客户抱怨说,系统在回答关于产品遗留集成的某些问题时,给出的答案完全错误,表现得却非常有信心。你进行了调查,将该查询输入你的管道,它检索到了完全相关的文档——但只是针对一般主题。而那三个涵盖了遗留集成边缘情况的特定文档就躺在你的语料库里,却从未被检索出来。

那 80% 的数字是真实的。但作为刚才所发生情况的信号,它几乎毫无用处。

RAG 数据契约问题:摄取管道如何悄然破坏检索质量

· 阅读需 11 分钟
Tian Pan
Software Engineer

你的 RAG 系统存在一个不会抛出异常的 Bug。它不会拉高错误率,不会在延迟仪表盘上留下痕迹。相反,它会悄悄地给出听起来自信、合理却错误的答案——而没有人在数周内察觉。

这就是 RAG 中的数据契约问题:你的摄取管道是下游所有环节的事实来源,但它没有 Schema 校验、没有新鲜度保障,也没有在外部世界的形态悄然改变时发出告警。每当上游数据源新增字段、分块参数发生偏移,或者嵌入模型被更新,检索质量就会无声地退化。

80% 的企业级 RAG 项目在生产环境中会遭遇严重故障,而其中最隐蔽的那些故障从不宣告自身的存在。

知识半衰期问题:为什么你的 RAG 系统现在就已经出错了

· 阅读需 10 分钟
Tian Pan
Software Engineer

你的 RAG 系统通过了所有检索基准测试。准确率看起来很稳健。LLM 评估器评分全部绿灯。然而,在你的索引某处,存在一份描述八个月前已废弃 API 端点的文档、一个已不复存在的定价层级,以及一项在第三季度被新法规取代的合规政策。检索器对此毫不知情。语义相似度没有时间概念。

这就是知识半衰期问题:一种隐蔽的失效模式——RAG 系统在你所有监控指标上看起来健康运行,却在向用户提供越来越陈旧的决策依据。73% 的组织报告称,RAG 部署在 90 天内出现准确率下滑——原因不是检索架构缺陷或 Embedding 模型质量问题,而是没有人将知识过期建模为可靠性关注点。

嵌入微调差距:通用向量并不理解你特定领域的“相关性”含义

· 阅读需 13 分钟
Tian Pan
Software Engineer

你的 RAG 流水线在理论上看起来很扎实:分块很清晰,向量库已建立索引,延迟也在可接受范围内。但用户一直在抱怨结果是错的 —— 并不是完全错误,而是在关键细节上“稍微”有些偏差。检索到的片段讨论了正确的概念,但时间点不对。它涵盖了正确的主题,但司法管辖区不对。它提到了正确的产品,但缺少了使其真正有用的库存信号。

这就是嵌入微调鸿沟。通用嵌入模型被训练用来编码语义相似性 —— 即两个文本意思大致相同的属性。但这并不等同于相关性。相关性是特定于领域的、对上下文敏感的,并且对于在互联网规模的通用语料库上训练的模型来说通常是不可见的。

当 RAG 让你的 AI 变差:创造力与事实锚定的权衡

· 阅读需 10 分钟
Tian Pan
Software Engineer

某家产品公司的团队为市场部门构建了一款头脑风暴助手。他们在文档语料库——营销简报、品牌指南、竞品分析——上添加了 RAG,认为更丰富的上下文会产出更好的创意。三周后,使用率下降了。定性反馈如下:输出"太安全"、"太可预测"、"感觉只是在重混我们现有的东西"。他们从头脑风暴功能中移除了检索。创意改善了,参与度也恢复了。

这种模式在实践中出现的频率远比人们承认的要高。检索增强生成已成为将 LLM 输出锚定到事实的默认架构,对于事实性任务,它当之无愧。但对于生成类任务——创意构思、创意写作、新颖方案生成——添加检索层可能会悄然压低模型产出的上限。这不是因为检索坏了,而恰恰是因为它按照设计在正常运转。

规模化工具发现:为何纯嵌入检索在超过 20 个工具后开始失效

· 阅读需 11 分钟
Tian Pan
Software Engineer

大多数构建 AI 智能体的团队,都会在第五个迭代周期发现同一个问题:智能体再也无法可靠地选对工具了。十个工具时,基本还能用。二十个时,准确率开始下滑。五十个时,你会亲眼看着智能体在应该调用 update_record 的时候调用了 search_documents,而日志毫无解释。常见的反应是调整工具描述——加更多上下文、写得更明确、重写示例。这偶尔有效,但它绕开了根本原因:平面嵌入检索在大型工具库中架构上就是错的,更好的描述无法修复一个架构问题。

工具选择本质上是检索,而检索有已知的扩展上限。理解这些上限——以及绕过它们的结构化元数据模式——是让智能体系统在生产中稳定运行与需要持续人工维护之间的分水岭。

知识时效路由:在生产 AI 中将查询匹配到正确的时间层

· 阅读需 10 分钟
Tian Pan
Software Engineer

这是一个在生产环境中比任何人愿意承认的更频繁出现的场景。用户询问 AI 助手当前的利率政策。你的 RAG 系统获取了一份高度相关的美联储文件——语义相似度评分高达 0.91——模型自信地返回了答案。但这个答案已经过时六个月了。RAG 索引上次刷新是在十月份。参数化知识则更为陈旧。一次实时 API 调用本可在 400 毫秒内返回正确的当前数据,但没有人在路由逻辑中加入这样的判断:这个问题的答案允许有多旧?

这种失败不是检索失败,而是时序路由失败。系统在其技术栈的某处确实能够获取正确信息,只是将查询发送到了错误的层级。

“什么发生了变化”查询是你的索引无法回答的 RAG 问题

· 阅读需 12 分钟
Tian Pan
Software Engineer

一个用户问你的助手,“这季度我们的退款政策有什么变化?”系统返回了一个当前退款政策的、格式良好的自信总结。用户点点头,关闭聊天,并根据一个与他们提出的问题完全无关的信息采取行动。你的评测套件(eval suite)没有捕捉到这一点。你的忠实度指标(faithfulness metric)没有标记它。检索看起来很完美——它返回了高度相关的分块(chunks)。合成看起来也很完美——它引用了它使用的每个分块。唯一的问题是,问题是关于 变化 的,而你的索引没有变化的概念。

这是向量相似度检索无法通过调优修复的失败模式。同一文档的两个版本具有几乎相同的嵌入(embeddings)——这就是好的嵌入所 的,它们将语义等效的文本折叠到同一个邻域中。因此,当你问“什么改了”时,检索器返回其中一个版本,LLM 总结该版本,而答案在沉默中成为了“什么都没变”的幻觉。用户无法察觉。你的评测集可能也无法察觉,因为你的评测集是围绕“什么是 X”的问题构建的,而不是“现在 X 有什么不同”。

你的 Embedding 模型选择决定了 RAG 的上限,而 LLM 无法突破它

· 阅读需 13 分钟
Tian Pan
Software Engineer

我建议的一个团队花了两个月时间在其 RAG 流水中不断更换 LLM。从 Claude 到 GPT,再到 Gemini,最后又换了回来。每一次更换都能让幻觉率降低几个百分点,但从未在关键指标上有所进展:他们的支持代理找到正确知识库文章的概率仍然不到 60%。他们调优的层级错了。检索器返回的是无关的文本块,而无论 LLM 多聪明,都无法根据检索器从未呈现过的文档来回答问题。

嵌入模型是 RAG 系统中决定 LLM 甚至“被允许”看到什么的部分。它描绘了语料库的几何结构——即在向量空间中,哪些文档会落在哪些查询附近。一旦这种几何结构出错,LLM 就只是一个对错误上下文侃侃而谈的自信叙述者。换一个更聪明的 LLM 通常只会让回答更显“文采”,而不会让回答更准确。