RAG核心技术:Query改写

14 阅读2分钟

RAG核心技术:Query改写

为什么要进行Query改写

  1. 解决“语义鸿沟”:用户偏口语化的问题和文档中的专业术语不一致,检索时往往会漏掉关键文档。
  2. 解决“上下文缺失”:多轮对话中,用户可能会使用夹杂着代词(它,这个,那个)的问题,LLM不知道具体指代什么。
  3. 拆解“复杂问题”:当用户的问题包含多个逻辑时,一次检索很难找到包含所有答案的文档片段。

核心改写策略

  1. 语义鸿沟:可以使用HyDE,先生成一个假的答案,再用这个假答案去检索真实的文档,合理使用prompt生成的假答案会比query更接近文档中的片段。
  2. 上下文缺失:利用记忆管理,将用户对话总结并传入查询重写节点。
  3. 复杂问题:拆解问题 -> 子问题依赖判断 -> 子问题检索 -> 合成答案

疑难点

  1. HyDE
  • 不直接用用户查询生成向量检索,而是让 LLM 生成一个“假设性答案文档”用该假设文档的嵌入向量去检索真实知识库,使检索更贴近“答案语义”,而非仅匹配关键词。
  1. 复杂问题拆解为子问题
  • 拆解问题:调用LLM识别问题中的实体、隐含的逻辑依赖关系,并生成一个有向无环图 (DAG)  的执行计划。输出格式: JSON (包含 sub_questions 列表, 每个含 id, query_template, depends_on 列表)
  • 执行子问题:根据 DAG 的依赖关系,串行或并行地执行子问题的检索,知道所有子问题完成或发现死锁。
  • 中间结果验证:如果某个子问题的检索结果为空或质量极低,不应盲目进入下一步,而应尝试修复。
  • 全局上下文合成:将所有分散的子问题答案,按照最初的逻辑链条,组装成流畅的自然语言回答。