Skip to main content

Cross-Encoding

在 Agent 开发的上下文中,引入 Cross-Encoding(交叉编码)通常是为了解决一个核心问题:如何让 Agent 在大量信息中精准地找到最相关的那一块

简单来说,Cross-Encoding 是一种比传统向量搜索(即 Bi-Encoding,双编码)更精确但计算成本更高的文本匹配技术。

为了让你快速理解,我先用一个类比:

  • Bi-Encoding(传统向量检索):好比让你只根据两个人的简历摘要(预先生成的向量)来判断谁更适合某个岗位。速度极快,但会丢失很多细节。
  • Cross-Encoding(交叉编码):好比把两个人的完整简历岗位要求同时放在你面前,让你逐字逐句地对照、比较、权衡。判断极准,但每次比较都需要重新完整阅读,无法提前准备。

一、Cross-Encoding 技术原理

  • 模型架构:通常基于 BERT 等双向注意力机制的 Transformer 模型。
  • 工作方式:它将两段文本(例如 用户问题候选知识片段)拼接在一起,用一个分隔符 [SEP] 隔开,然后一次性输入到模型中。模型通过自注意力机制,让两段文本的每个词互相“看到”对方,进行深度交互和融合。
  • 输出:输出一个分数(0到1之间),代表两段文本的相关性或蕴含关系(例如,问题是否可以被这段知识回答)。

二、在 Agent 开发中为何要引入 Cross-Encoding?

Agent 的工作流程通常是:感知(用户输入)-> 检索(相关知识/工具)-> 规划(思考步骤)-> 行动(调用工具或生成答案)。其中最常出问题的一步就是检索。如果 Agent 拿错了信息,后续的规划和行动都会出错。

引入 Cross-Encoding 主要有以下三个作用:

1. 作为“精排器”(Reranker)——最常见的用法

这是最核心的应用。Agent 的典型检索流程会变成**“粗筛 + 精排”**:

  • 第一步(粗筛):用速度快但精度稍低的向量检索(Bi-Encoding),从几十万条知识/工具中快速召回 Top-100 个候选。
  • 第二步(精排):用一个 Cross-Encoding 模型,将这 100 个候选依次与用户问题做深度比较,重新打分并排序,选出最相关的 Top-3 或 Top-5。

为什么需要这一步? 向量检索可能会把“苹果好吃吗?”召回成“苹果公司的股价”,因为它们在向量空间里距离很近(都包含“苹果”这个词)。而 Cross-Encoding 模型能理解上下文,判断出前者问的是水果,后者是公司,从而把正确结果排到前面。

2. 精确判断工具/函数调用意图

Agent 需要决定调用哪个工具(比如“查天气”、“发邮件”、“计算器”)。简单的关键词匹配不够可靠。

  • 做法:将用户输入 帮我看看北京明天会不会下雨 与每个工具的描述 工具A:获取指定城市的实时天气 一起输入 Cross-Encoder。
  • 结果:Cross-Encoder 会给(用户输入,工具A描述)打一个高分(如 0.95),而给(用户输入,工具B描述:发送电子邮件)打一个极低分(如 0.01)。这比单纯依赖 LLM 的函数调用(Function Calling)更可控和高效。

3. 验证 Agent 的最终输出或中间结论

在一些高可靠性的场景(如金融、医疗 Agent),可以用 Cross-Encoding 来验证 Agent 生成的答案是否“忠实”于检索到的知识源,防止“幻觉”。

  • 做法:将 检索到的知识Agent生成的答案 输入 Cross-Encoder,判断答案是否被知识所支持。如果得分很低,Agent 可以重新生成或向用户道歉。

三、Cross-Encoding vs. Bi-Encoding:关键取舍

特性Bi-Encoding (向量检索)Cross-Encoding (交叉编码)
核心思想将两段文本独立编码成向量,然后计算向量相似度(如余弦相似度)。将两段文本拼接后联合编码,通过注意力机制深度交互。
交互程度弱交互。编码时彼此不知道对方的存在。强交互。每个词的表示都融合了另一段文本的信息。
精度中等。容易受到词义混淆的影响(如苹果水果 vs 苹果公司)。非常高。是公认的排序任务天花板,接近人类判断水平。
速度与成本快,成本低。可以预先为所有文档计算好向量(离线),查询时实时算用户问题向量即可。慢,成本高。无法预计算。每次比较都需要完整计算两个文本,计算量随文本长度平方增长。
可扩展性。能轻松处理百万、千万级的文档库。。只能处理百、千级的候选集(因此必须放在第二阶段)。
典型角色召回器(Retriever)精排器(Reranker)

四、在 Agent 开发中实践的建议

  1. 不是替代,而是增强:不要试图用 Cross-Encoding 直接检索百万级文档,那样成本会高到无法接受。正确的做法是 Bi-Encoding(召回) + Cross-Encoding(重排) 的经典组合。
  2. 选好模型:Hugging Face 上有现成的优质 Cross-Encoder 模型,如:
    • cross-encoder/ms-marco-MiniLM-L-6-v2:轻量、快速、效果好,非常适合作为第一选择。
    • BAAI/bge-reranker-v2-m3:多语言支持好,对中文效果不错。
  3. 延迟优化:Cross-Encoding 会增加几十到几百毫秒的延迟。如果对实时性要求极高(如聊天机器人),可以:
    • 减少重排的候选数(例如从 100 个中重排前 20 个)。
    • 使用更小的模型。
    • 在用户无感知的异步环节使用。
  4. 什么时候不必要?:如果你的 Agent 只需要处理结构化的数据库查询(SQL)或 API 调用,并且函数描述很少且清晰,那么 LLM 自身的函数调用能力可能已经足够,不一定需要 Cross-Encoding。

总结

在 Agent 开发中,引入 Cross-Encoding 的本质是进行“精排”。它以额外的计算成本为代价,极大地提升了 Agent 从非结构化文本(知识库、历史记录、工具描述)中挑选正确信息的能力,是构建高质量、低幻觉的检索增强型 Agent 的关键技术之一。 通常与向量检索配合使用,形成“粗筛-精排”的标准流程。