你的 AI 知识库为什么答非所问?问题出在“切块”这一刀

你的 AI 知识库为什么答非所问?问题出在"切块"这一刀

原文:mp.weixin.qq.com/s/jf1s8HNkz...

你有没有遇到过这种情况?

公司花了大力气搭知识库,接上大模型。结果一问具体问题,AI 要么答非所问,要么说"没找到"。

文档明明就在库里。

Anthropic 的工程团队最近公开了一套方法,叫 Contextual Retrieval(上下文检索) 。他们的实测结果是:检索失败率最多可降低67%。

下面用大白话讲清楚。

↗一、先说个前提:不一定非要 RAG

Anthropic 先给了个很实在的建议。

如果你的知识库小于20万 token(约500页材料),直接把全部内容塞进提示词就行,不用 RAG。

配合 Claude 的提示缓存(prompt caching),延迟可降低2倍以上,成本最多降低90%。

只有知识库大到塞不下,才需要 RAG。

↗二、传统 RAG,问题出在哪?

先快速回顾 RAG 的做法:

1→

把文档切成小块(通常几百 token)

2→

用嵌入模型把每块转成向量

3→

存进向量数据库

4→

用户提问时,找出语义最相近的块,喂给大模型

很多团队还会加上 BM25。它是一种关键词匹配算法,擅长找精确词。

比如用户搜"Error code TS-999",向量检索可能只找到一堆"错误码"相关内容,而 BM25 能精准命中"TS-999"这个字符串。

两者结合,效果比单用向量更好。

但有个老毛病,谁也绕不开:切块会丢掉上下文。

↗三、一个典型的翻车现场

假设知识库里存的是一堆公司财报。用户问:

"ACME 公司2023年第二季度的营收增长是多少?"

库里有这样一个文本块:

"公司营收环比增长了3%。"

问题来了:哪家公司?哪个季度?

这个块自己根本没说。检索系统很难判断它是不是你要的答案。就算检索到了,模型也不敢用。

这就是"上下文被切没了"的代价。

↗四、解法:给每个块,先补一句"背景介绍"

Contextual Retrieval 的思路简单到有点朴素:

在切块之后、做嵌入之前,先给每个块前面加上一小段说明,交代它来自哪里、讲什么。

比如上面那个块,会变成类似这样:

"这段来自 ACME 公司2023年 Q2的 SEC 财报;上一季度营收为3.14亿美元。公司营收环比增长了3%。"

(这里是对原文示例的意译,仅作说明。)

这样一来,无论是向量检索还是关键词检索,这个块都带上了"身份信息"。

对应两个子技术:

→

Contextual Embeddings:带背景的向量嵌入

→

Contextual BM25:带背景的关键词索引

↗五、几千万个块,谁来写背景?

当然不可能人工去写。

Anthropic 的做法是让 Claude(文中用的是 Claude 3 Haiku)来写。给它整篇文档和当前这个块,让它生成一段简短的、针对该块的背景说明。

每段背景通常只有 50~100 个 token。

你可能会问:每个块都要把整篇文档喂一遍,不是很贵?

这里提示缓存就派上用场了。文档只需要加载进缓存一次,后面每个块直接引用。

按文中的假设(800 token 的块、8k token 的文档),一次性生成上下文的成本约为每百万文档 token 1.02 美元。

对于一次预处理、长期受益的事,这个价格相当友好。

↗六、效果到底怎么样?

Anthropic 在代码库、小说、ArXiv 论文、科学论文等多个领域做了测试,指标是 1 减去 recall@20,也就是"前20个块里没能捞出相关内容的比例"。

结论很清晰:

→

上下文嵌入 + 上下文 BM25:失败率降低 49%

→

再加上重排序(Reranking) :失败率降低 67%(从 5.7% 降到 1.9%)

注:图中"约2.9%"由 5.7% 与 49% 的降幅推算得出,为估算值,非原文直接给出的数字。

重排序是什么?

初步检索会返回很多块(文中取前150个),质量参差不齐。重排序模型会根据与问题的相关度给每个块打分,再挑出最好的20个交给大模型。

好处是回答更准,同时因为模型要读的内容更少,成本和延迟也会降下来。不过它会多一步运行时开销,需要自己权衡。

↗七、落地时要注意这4点

Anthropic 也给了几条实践建议:

1→

块怎么切很重要:块大小、边界、重叠,都会影响效果

2→

嵌入模型要选:他们测试中 Gemini 和 Voyage 表现最好

3→

可以定制背景提示词:比如针对你的领域,加入专业术语表

4→

块的数量:他们试了5、10、20个,20个效果最好,但要结合自己场景测试

还有一句话值得记住:Always run evals(一定要跑评测)。

别人的结论,不等于你的数据上的结论。

↗八、一句话总结

Anthropic 实验总结的几条结论,可以直接当作清单:

→

嵌入 + BM25,比单用嵌入好

→

给块加上下文,提升很大

→

加重排序,效果更好

→

传给模型20个块,比10个、5个更有效

→

以上收益可以叠加

如果你正在做企业知识库、客服机器人或法律、财务问答,别急着换模型、调参数。

先看看你的文本块,是不是"没头没尾"。

· · ·

互动一下: 你的 RAG 系统,遇到过哪些"明明有却搜不到"的情况?欢迎留言聊聊。觉得有用,点个"在看"转给做 AI 应用的朋友。

原文来源:Anthropic Engineering,《Contextual Retrieval》,作者 Daniel Ford. www.anthropic.com/engineering...

相关推荐
国科安芯21 分钟前
算力上天之后的电与静:星上边缘计算载荷带外管理网络的低功耗调度与辐射容错
网络·人工智能·嵌入式硬件·安全·边缘计算·低轨卫星·商业航天
kisdiem32 分钟前
让 AI 边玩游戏边编写世界规则:从 XLand 到 ARC-AGI-3 的实验记录
人工智能·agi·玩游戏
kaixin_啊啊1 小时前
【零基础学AI】第 27 章课后练习与答案
人工智能
慢慢来不要急1 小时前
Anthropic 自建源码控制,AI Agent 把 Git 跑到了极限 · 11-09
人工智能·开发工具
CyrusYiVPP1 小时前
实测 Ollama 本地部署:我用 Python 搓了个离线问答机器人,Qwen4 27B 一到换个模型名就能用
人工智能·python
美团技术团队2 小时前
美团 LongCat-2.5 开源:从看见,到抵达
人工智能
aifannihao2 小时前
AI 学习第 8 课:1200 列纯噪声 CV 出 0.47,泄漏在筛特征那步
人工智能·机器学习·scikit-learn·学习路线·数据泄漏
老金带你玩AI2 小时前
我宣布!Magpie就是版本答案!
人工智能
Rocky Ding*2 小时前
REPA-E技术深度解析:解冻 VAE 之后,扩散模型为什么需要选择梯度
论文阅读·人工智能·深度学习·机器学习·aigc·ai-native·repa-e