向量检索默认按相似度排序,但「有用」还取决于时效、权威、覆盖与多样性。本文给出可配置的加权排序公式、去重与多样性重排的做法、四个常见错误,以及验证排序改动的最小流程。
相似度只是"像不像",不等于"该不该排前面"
向量检索默认按相似度排序,但用户在真实场景里要的是**有用**,而有用至少还取决于四件事:
**时效**:三年前的方案可能已经过时;
**权威**:官方文档 > 二手转述;
**覆盖**:命中三句和一个完整章节,价值差很多;
**多样性**:五条结果讲同一件事,等于只有一条。
一个可用的排序公式
把排序做成**加权和**(权重可调、可回归):`score = w1·相似度 + w2·时效 + w3·权威 + w4·覆盖度`。
相似度归一化到 0~1;
时效用指数衰减(例如半衰期 180 天,可配置);
权威用来源等级表(官方 1.0 / 论文 0.8 / 社区 0.5 …),**等级表要人工定,不要模型猜**;
覆盖度可以用命中长度占比或段落完整度。
**关键**:权重是**配置**而不是散在代码里的魔法数字,这样能版本化、能回归。
去重与多样性
先做**近似去重**(同一段落被切成多块时,只留最好的那块);
再做**多样性重排**:同一来源/同一主题最多占前 N 位(MMR 思路);
结果里标注来源与时间,让用户能自己判断可信度。
常见错误
**只调相似度阈值**:阈值高→召回差,阈值低→噪声多,永远调不到满意;
**把权威度交给模型打**:模型对"哪个来源更权威"经常没有稳定判断,应由人工维护等级表;
**忽略时间**:在快速变化的领域,旧文档排第一会直接损害信任;
**没有多样性的硬约束**:重排模型自己也常把同类结果排一起。
怎么验证排序改动
固定 30~50 个真实问题,人工标注"前 5 条里是否有真正有用的":
1. 记录改动前的命中质量;
2. 只改**一个**因子(例如加时效);
3. 用同一批问题复跑,比较"前 5 条有用率"与"重复率";
4. 记录权重配置与结果,便于回滚。
排序优化的收益通常比换检索模型更大,而且成本低得多。