首页/AI/RAG 与向量库速查/查询指令与非对称检索
Embedding 与检索50 条

查询指令与非对称检索

查询短、文档长的不对称检索中,给查询侧添加任务指令(如 BGE-zh 的检索提示句)可提升效果;文档侧通常不加指令,以模型卡为准。

RAG 与向量库速查AI更新于 2026-10-13

查询指令与非对称检索

检索天然是不对称的:查询通常只有几个词,文档却是成段的文字,两者在语义空间里并不天然对齐。针对这个差异训练的模型会要求在查询侧加一段任务指令或前缀,把“这是一次检索请求”的意图显式告诉模型,例如为这个句子生成表示以用于检索相关文章。文档侧通常不加指令,因为文档本身就是被检索的对象。关键点是:不同模型的要求互不通用,必须逐个按模型卡核对,加错方向比不加更糟。

基本信息

适用场景查询短、文档长的不对称检索
查询侧按模型卡添加检索指令或前缀
文档侧通常不加指令,保持原文编码
模型差异BGE-zh 系列建议加指令,E5 用固定前缀,部分模型完全不加
错误代价加错方向或只加一侧,效果下降且无报错

典型使用场景

  • 中文短查询检索长文档:查询侧指令帮助模型理解检索意图
  • 模型迁移:从 BGE 换到 E5 或其它模型时,先核对指令规则再改代码
  • 封装隔离:把指令拼接写进 encode_query,避免调用方各自实现
  • 质量回归:每次调整指令措辞都在固定评测集上看 Recall@k 变化
  • 排错线索:检索结果整体不相关时,先确认两侧的指令与前缀是否配对

查询侧加指令

查询侧加指令
INSTRUCTION = '为这个句子生成表示以用于检索相关文章:'

def encode_query(q):
    return model.encode(INSTRUCTION + q, normalize_embeddings=True)

def encode_document(text):
    return model.encode(text, normalize_embeddings=True)   # 文档侧不加

qv = encode_query('如何配置超时')

常见模型族的规则

模型族查询侧文档侧
BGE-zh v1.5 等建议加一句检索指令不加
E5 / multilingual-e5固定前缀 query: 固定前缀 passage:
部分通用句向量模型不加不加
重排模型不适用(按查询片段对直接打分)不适用
把指令与前缀写成不可变常量并加单元测试:手写字符串容易多一个空格或写错冒号,这类错误不会抛异常,只会让检索质量悄悄下降。

易错点

  • 把指令也加到文档侧,两侧处理不一致反而降效
  • 换模型后沿用旧模型的指令习惯,未按新模型卡调整
  • 指令里多写或少写一个空格,与训练时的 token 序列不一致,效果下降且无报错
  • 不同服务各自实现编码,一侧加指令另一侧没加,线上结果与离线评测对不上
  • 把指令长度算进切片上限,长文档加指令后超限被静默截断

数据来源与参考

  • BAAI BGE 模型卡片(Hugging Face,检索指令说明)
  • Wang et al., Multilingual E5 Text Embeddings, arXiv:2402.05672
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌