上下文排序
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,将 @user_3c6cb52e/context-ranking 安装到 AI 助手中。
技能介绍
解决什么问题
检索层通常先返回一个宽泛的候选集:向量检索、关键词检索或混合检索拿到 top-k(常见 k=15-30),其中不少片段只和查询擦边。如果直接把这些结果交给下游做上下文拼装,模型容易拿到一堆重复、偏题或信息密度不足的材料,回答随之变得空泛。上下文排序的目标就是把无序候选集转成有优先级的列表,让真正相关、多样且可用的信息浮上来,同时保留来源与置信度信息,方便后续 prompt 组装和引用校准。
核心能力与工作流
该技能采用多阶段排序,而不是只依赖单一分数:
- 第一阶段打分:对全部候选快速计算初步分数。关键词场景用
BM25,语义场景用cosine similarity;混合检索可用Reciprocal Rank Fusion (RRF)或加权线性组合合并两类分数。 - Cross-Encoder 重排:把第一阶段的 top 候选(通常 15-25)送进 cross-encoder 重排器,如
Cohere Rerank、bge-reranker-v2-m3或ColBERTv2。相比双编码器独立打分,cross-encoder 对 query 与 chunk 做联合注意力,精度更高,代价是更慢。 - 多样性选择:重排后顶部结果可能挤在同一个子话题上。通过
Maximal Marginal Relevance (MMR)惩罚与已选片段高度相似的候选,使最终列表覆盖查询的多个侧面。 - 最终打分与排序:综合重排相关性、多样性惩罚以及领域信号(如时效性、来源权威性),得到复合分,按降序取出 top-n(常见 n=3-7)作为注入 prompt 的上下文。
- 元数据与置信度:每个片段附带最终分数、来源路径和
high / medium / low置信档位,供下游决定如何展示与引用。
适用边界与注意点
- 不要跳过重排:仅靠 embedding 余弦或
BM25做最终排序,通常不如在 top 结果上加一层 cross-encoder 稳定。 - 多意图查询要开 MMR:像“X 是什么原因、怎么修”这类查询,若不做多样性选择,结果可能全在讲原因,修复步骤被挤掉。
- lambda 需要调:事实型问答可偏高相关性(如 0.7-0.8),探索式研究可提高多样性(如 0.4-0.5);默认可从 0.6 起步。
- 成本与缓存:cross-encoder 推理较重,多轮对话中相同 query-chunk 组合应缓存分数。
- 评估指标:用
NDCG和MRR在标注集上评估排序质量,比只看Recall@k更能反映排名好坏。 - 边界情况:分数并列时可按来源权威性、时效或信息密度破平;候选集超过 100 时建议先加阈值过滤再重排;跨语言查询需确认 embedding 与 reranker 支持,或先做翻译。
使用场景
- 混合检索返回 20 个候选片段时,需要筛出与 60 秒 WebSocket 断连最相关的 top 5,并保留服务器、Nginx 与客户端三类原因。
- 为 SSO/SAML 配置问答准备上下文时,要从文档候选中剔除 OIDC 与营销博客,只保留配置步骤、入口位置和排错提示。
- 当查询同时包含原因和修复两个意图,重排结果都堆在原因上时,需要用 MMR 拉入修复步骤并控制 lambda 在 0.6 左右。
- 多轮对话中反复出现相同 query-chunk 组合,需要缓存 cross-encoder 分数,避免每次重建上下文都重复跑昂贵重排。
适合人员
- 构建 RAG 的后端工程师,需要把召回的候选块排序后注入 prompt,降低回答跑偏。
- 负责搜索质量的算法工程师,需要用 BM25、向量分数和 cross-encoder 重排提升 precision。
- 维护技术文档或知识库的技术作者,需要从多个来源中选出可引用、低冗余的片段。
- 在多轮客服或问答系统中做上下文组装的开发者,需要为同一 query-chunk 缓存重排分数。