Advanced RAG-查询优化

Enrich完善问题

我们希望实现让人们通过自然的口语对话来使用大模型应用。然而,在口语表达需求和意图时,人们往往会遇到一些问题。例如,表达过于简略或含糊,容易引发语义歧义,导致大模型产生误解;用户的问题可能包含许多隐含要素,但表达的信息却不足,只能通过多轮对话逐步补全;

理想情况:通过大模型多次主动与用户沟通,不断收集信息,完善对用户真实意图的理解,补全执行用户需求所需的各项参数

Multi-Query 多路召回

当用户没有正确书写查询语句,或者LLM不能够正确理解用户查询语句的含义时,此时LLM生成的答案可能就不够完整和全面。

当用户输入查询语句(自然语言)时,
我们让大模型(LLM)基于用户的问题再生成多个查询语句,这些生成的查询语句是对用户查询语句的补充,它们是从不同的视角来补充用户的查询语句,
然后每条查询语句都会从向量数据库中检索到一批相关文档,
最后所有的相关文档都会被喂给LLM,这样LLM就会生成比较完整和全面的答案。
这样就可以避免因为查询语句的差异而导致结果不正确
  • 利用 LLM 生成 N 个与原始查询相关的问题
  • 将所有问题(加上原始查询)发送给检索系统。
  • 通过这种方法,可以从向量库中检索到更多文档。

Decomposition 问题分解

如果用户的问题很复杂,大模型需要推理分解多个步骤才能完成,但是大模型不具备推理能力怎么办?

  • 可以用提示词工程中的CoT策略,把用户的问题拆成一个一个小问题来理解接下来可以使用并行与串行两个策略来执行子任务。
  • 并行执行是将每个子任务抛出去获得一个答案,然后再让大模型把所有子任务的答案汇总起来。
  • 串行是依次执行子任务,然后将前一个任务生成的答案作为后一个任务的提示词的一部分。

总览

查询优化:查询优化的目标是提升用户意图理解的准确性,包括:

  • Enrich完善问题:通过大模型引导完善用户问题,产生一个更利于系统理解的完善后的用户问题。
  • 多路召回(Multi-Query)针对用户问题生成多个相关问题,分别检索后汇总结果。
  • 问题分解(Decomposition)将复杂问题拆分为多个子问题,依次或同步解决所有子问题从而获取最终答案。