
上一篇讲重排序,有人问:我的内容确实被收录了,站内搜索能搜到,为什么 AI 的答案里永远没它。今天拆这个更靠前的问题——候选集截断。
先给结论。抓取、切块、检索、重排序、生成,五环里最容易被忽略的,是检索和重排序之间那一下。检索按 top-k 把文档捞回来,常见一捞就是 20 条、50 条;重排序只在这 k 条里重新打分;生成只引重排序后最前面那 2 到 3 条。你的内容排在第 21 位,重排序连看都看不到它,前面所有功夫白做。
这一层不报错、不提示,但决定内容有没有上场资格。
一、这一层的位置:在召回之后,在重排序之前
多数教程讲到检索就停了,好像捞回来就等于能被引。真实链路不是这样:查询先经嵌入模型变成向量,从向量库里捞回最相似的 k 个文档块,这一步叫召回;召回结果交给重排序模型精排;精排的前几名,才进生成环节的上下文窗口。k 的取值直接决定生死,行业里常见的配置是 20 到 100,RAG 系统的默认值多在 20 到 50 之间。
你排在第 21 位和排在第 2 位,答案里没有任何区别。
这就是截断:不是不收你,是收了不给你上场机会。
二、三种典型的截断失效
2.1 长文档只召回首段
向量检索的常见单位是块,一篇 3000 字的工厂介绍会被切成十几个块。检索按块召回,排在后面的块天然吃亏,收尾位置的内容几乎永远沉底。一个典型情况:珠三角一家注塑厂把产能、模具、认证、合作方式全写在一篇长文里,被问年产能多少,AI 引用了首段;被问能不能做 17 模,它直接答不知道。
不是没写,是写在了第 9 个块里,检索根本没捞到它。
2.2 一问一答式检索,长文得分被摊薄
块与查询的相关性按整块算。一篇同时讲五件事的长文,每个块只覆盖五分之一的相关性,得分被摊薄;一篇只讲一件事的短文,整块都打在点上。同样 800 字,拆成 4 篇各讲一件事,和堆成 1 篇讲四件事,后者的单块得分通常只有前者的一半上下。这是嵌入模型对主题浓度的直接反应,跟文笔好坏没关系。
一篇文讲五件事,每件事都只沾到五分之一的相关性。
2.3 同质内容互相挤占候选位
这种最冤。一个工厂在 6 个平台发了 6 篇几乎一样的产品介绍,向量库去重后互相成为最近邻。查询命中这个主题时,6 个高度相似的块互相竞争那 20 个候选位,最后可能一个都进不了前 3——因为在排序模型眼里,它们是同一篇的 6 个副本,引哪篇都是引它,模型要么只引权重最高的一个域,要么都不引。
多发同质内容,不是 6 倍曝光。是六分之一的入选率。
三、怎么定位问题出在这一层
给一个可操作的判据:召得到,排不进。具体说,同一问法连续测 10 次,如果你的内容有 5 次以上能通过旁证被捞到——站内搜索搜得到、换个相近问法也能命中——但 AI 答案 10 次里 0 次引用,问题大概率不在抓取和索引,在截断或者重排序。这时候改标题、堆关键词都没用,得动结构。
诊断判据只有一条:内容召得到,但排名进不去。
四、一个最小探针:把截断演出来
下面的脚本模拟一个主题下 6 个同质块的得分与候选集截断的关系,纯标准库,可以直接跑。跑出来很直白:6 个同质块排名挨在一起,只有前 3 个有机会,后 3 个无论怎么写都进不去——同质内容不是在互相壮胆,是在互相挤。
模拟:同质块的得分挨得近,候选集截断让后几名永远上不了场
scores = [0.82, 0.81, 0.80, 0.79, 0.78, 0.77] # 6 个同质块的得分
K = 20 # 候选集大小(检索召回条数)
CUT = 3 # 最终进答案的条数
def enters_answer(rank):
if rank > K:
return “截断:重排序根本看不到”
if rank > CUT:
return “重排序后落选”
return “进答案”
for i, s in enumerate(scores, 1):
print(“排名 {}(得分 {}):{}”.format(i, s, enters_answer(i)))
同质块不是在互相壮胆,是在互相挤占候选位。
五、三条改法,按投入产出比排
5.1 长文拆成单一主题的短文
3000 字的工厂介绍,拆成产能、模具、认证、合作四篇。每篇首段就把结论摆出来,块的主题浓度上去了,单块得分跟着上去。
长文拆成单一主题的短文,每一篇只讲一件事。
5.2 首段即结论
不少系统对文档首块有额外权重,原文位置权重也是重排序的一类特征。把年产能 1200 吨、17 模起做放在第一段,别放在关于我们后面第三段。
把最关键的那句结论,放在第一段,别藏起来。
5.3 同主题别铺同质稿
同一个主题铺 6 个平台 6 篇一样的,不如写 2 篇不同角度的。前者在向量层互相挤占候选位,后者各自命中不同问法。铺的是词不是稿——同一家厂拆成产能、工艺、交期、认证不同侧面,每个侧面独立成篇,问哪句都有对口的那一篇在候选位里等着。
同一家厂拆成四五个侧面,每个侧面独立成篇。
六、小结
候选集截断是五环链路里最安静的一环,它不报错、不提示,只是让你的内容在离答案一步之遥的地方反复落选。诊断它的判据就一条:召得到,排不进。改法也简单:单一主题、首段结论、别互相挤。
内容召得到却排不进答案,问题就出在截断层上。





