用户问题太短太口语化,RAG 的 Query 改写怎么做?

第 1198 题 约 2 分钟读完

本文目录
  1. 面试怎么回答
  2. 常见的问题类型
  3. 改写的几种方式
  4. 注意事项
  5. 术语表是数据团队的资产

面试怎么回答

用户问题常见的毛病是太短模糊、口语和术语不一致、依赖上下文、多意图、错别字缩写。我的改写方式有:结合对话历史做指代消解,生成独立完整的问题;用业务术语表或模型做同义扩展,多路检索合并;多意图拆成子查询;必要时用假设答案做向量检索;从问题里提取时间、部门等转成元数据过滤;实在太模糊就反问澄清。改写可能改错,所以原问题和改写后的问题一起检索再合并,用小模型降低成本,记录改写前后的内容便于排查,并在检索评测集上对比召回率。术语表可以从搜索和对话日志里持续挖掘维护。

先把这段讲顺;面试官追问时,再展开下面的原理和细节。

详细讲解

用户在知识库助手里输入:「那个报销咋弄」「上次说的那个表」「还是不行」。这样的问题直接拿去检索,基本找不到有用的东西。面试官问 Query 改写,想看你怎么把用户的真实意图转换成适合检索的查询。

常见的问题类型

  • 太短、太模糊:「报销」—— 是差旅报销、招待费报销,还是报销进度查询?
  • 口语和术语不一致:用户说「跑数」,文档写「离线任务调度」;
  • 依赖上下文:「它的负责人是谁」,「它」指的是上一轮提到的表;
  • 一个问题包含多个意图:「XX 表的口径是什么,最近为什么延迟」;
  • 有错别字或缩写:「dws 层」「GVM」。

改写的几种方式

  1. 指代消解和补全:结合对话历史,把「它」「那个」替换成具体对象,生成一个独立完整的问题。这是多轮对话里最重要的一步;
  2. 同义扩展:维护业务术语表(口语 → 规范术语,缩写 → 全称),或者让模型生成几个同义说法,多路检索后合并;
  3. 问题拆分:多个意图拆成多个子查询,分别检索;
  4. 假设答案检索(HyDE):让模型先写一个「假设的答案」,用这个答案去做向量检索。因为答案和文档的表达方式更接近,有时召回更好;
  5. 提取过滤条件:从问题里识别时间、部门、产品等,转成元数据过滤;
  6. 澄清:确实太模糊时,反问用户而不是硬猜,比如「你是想了解差旅报销的流程,还是查询报销进度?」

注意事项

  • 改写会改错:模型可能误解意图,改写后反而偏离。可以同时用原问题和改写后的问题检索,合并结果;
  • 延迟和成本:每次改写多一次模型调用,可以用小模型做;
  • 可观测:记录原问题和改写结果,排查时能看到是不是改写出了问题;
  • 评测:在检索评测集上对比改写前后的召回率。

术语表是数据团队的资产

数据团队可以从搜索日志、对话日志中挖掘高频的口语表达,和规范术语建立映射,持续维护。这比单纯依赖模型改写更稳定。