跳到主内容
快讯直播
AI智模界
AI 词典

嵌入模型的指令前缀:检索效果掉一截的隐形开关

一句话定义:指令前缀(instruction prefix)是在把一段文本送进嵌入模型(embedding model)之前,按模型训练时的约定贴在开头的固定字符串,用来告诉模型"这是查询还是文档、该按哪种任务来理解它"。

为什么会有这么个东西

E5、BGE 这类模型是专门为检索训练的。训练数据的构造方式很朴素:把查询和它对应的文档拼成一对,让模型学会"这两段向量应该靠得近"。但查询和文档长得不一样——查询短、口语化,文档长、书面化。为了不让模型混淆两种角色,训练时就在前面加标记:查询拼成 query: 怎么退订会员,文档拼成 passage: 退订会员的操作步骤是……。

模型见过上亿条这样的样本,前缀早就成了它判断任务的开关之一。上线推理时你不加,等于给它一个训练时没见过的输入格式,输出的向量方向就会偏,向量检索的召回自然往下掉——而且掉得莫名其妙,因为你查代码找不到任何明显的 bug。

打个比方

这就像图书馆的两种卡片:读者写的是索书单,书架上贴的是书脊标签,格式不同但指向同一本书。管理员是按"两种格式"训练出来的,你递给他一张没有任何格式标记的白纸,他也能看,但会犹豫、会放错位置。前缀就是那个纸头的格式栏。

别和这几个概念搞混

概念用在哪谁定的长什么样
指令前缀嵌入模型的输入训练时定死,跟模型绑定固定字符串,如 query: / passage:
提示词 prompt生成式大模型使用者随写随改自由文本,可以任意发挥
特殊 token模型内部格式分词器或架构决定如 [CLS]、[SEP]
微调">指令微调训练阶段训练者改的是模型能力,不是推理输入

关键区别是:前缀不是"写得越漂亮效果越好"的提示词,它是接口的一部分,写死、写错、漏写都算调用错误。

落到实际工作里

第一,建索引的脚本和在线查询的代码必须对齐。常见事故是离线灌库时忘了给文档加 passage:,上线后觉得"模型不行",其实是一半数据格式错了。第二,换嵌入模型时要重读模型页面(model card),前缀约定是逐模型不同的:E5 常见是查询 query:、文档 passage:;BGE 中文系列常见的做法是给查询加一句"为这个句子生成表示以用于检索相关文章:";有些模型只在查询端加指令,文档端什么都不加。第三,检索效果突然变差时,把"前缀是否配对"列进排查清单的前三条。

对普通使用者的意义更简单:如果你在自建知识库或搜索功能里换过模型,却感觉"越换越差",先别怀疑数据,去看看那一行前缀有没有删掉。具体每个模型要加什么,以官方页面为准。

AI 生成本文由 AI 基于公开信息自动生成,仅供参考。