RAG from scratch: Part 8 (Query Translation -- Step Back) by LangChain
该内容围绕查询翻译中的“后退一步(回溯)”展开,主要介绍了其在RAG流程中的位置、解决问题的不同方法、谷歌提出的后退提示法以及具体实践操作。
RAG from scratch: Part 8 (Query Translation – Step Back) by LangChain
查询翻译 — 后退一步(回溯) (Query Translation – Step Back)
该内容围绕查询翻译中的“后退一步(回溯)”展开,主要介绍了其在RAG流程中的位置、解决问题的不同方法、谷歌提出的后退提示法以及具体实践操作。
一、查询翻译在RAG中的地位
作为RAG流程第一阶段,接收输入问题并进行翻译或修改,以优化检索效果。
二、解决查询翻译问题的方法
1. 重写问题
采用RAG融合、多查询等方式,从不同视角修改问题,改善参考过程。
2. 分解问题
把问题变得更具体,拆分为子问题分别解决,再整合各子问题的答案。
3. 后退提示法(谷歌提出)
提出更抽象的问题,借助few-shot提示,依据原始问题生成后退或更抽象的问题示例,如从具体的“Jan Sell出生在哪个国家”到抽象的“Jan sell的个人历史是什么”。
三、实践操作 代码演示

1. 制定提示
利用论文中的few-shot示例制定提示,为模型提供示例,让模型退一步生成更通用、易回答的问题,如从“什么是LLM代理的任务组成”生成“任务组合的过程是什么”。
2. 检索与回答
对输入问题和后退问题分别进行检索,将两者连接到提示中形成字典,再连接到响应提示,尝试回答总体问题。
3. 应用场景及价值
该技术的效果受检索领域类型影响,在有大量概念性知识支撑问题的领域,如教科书、技术文档等,后退方法和独立检索有助于自动提出更高层次问题,改进检索。
四、视频原文
第一页:这是我们深入探讨从零开始的rag系列中查询翻译的第四期视频,我们将专注于后退一步的提示, 查询翻译就像我们在之前的一些视频中提到的那样,处于rag流程的第一阶段,主要目的是接受输入问题,然后对其进行翻译或修改,以改进检索。
第二页:现在,我们讨论了几种不同的方法来解决这个问题,一种通用方法是重写问题,我们讨论了两种方法即RAG融合,多查询。这实际上是关于提出一个问题并对其进行修改,以捕捉几个不同的视角,这可能会改善参考过程。现在,另一种方法是提出一个问题,并使其不那么抽象,即将其分解成子问题,然后分别解决每个子问题。这就是我们所看到的,从最少到最多的提示,以及许多其它变体,类似于子问题解决的方式,将这些解决方案整合成最终答案,
第三页:现在,谷歌也提出了一种不同的方法,那就是后退提示,所以后退提示采取了相反的方法,它视图提出一个更抽象的问题,
第四页:所以这篇论文讨论了很多关于使用few-shot提示来产生他们所谓的后退或更抽象的问题,它的做法是,根据你最初的问题,提供一些后退问题的例子,比如这是他们喜欢的提示模板,如果你是一个专家,世界知识,我问你一个问题,你的回答应该是全面的,而不是与下面的问题相矛盾,嗯,这就是你提供你的原创内容,然后退一步,这里有一些例子,嗯,问题,嗯,在几年前,我们看到了该地区的创建,这个国家位于哪个地区,嗯,是她的县,肯定相关,Jan Sell出生在哪个国家,Jan sell的个人历史是什么,所以这将是两个更多的例子,所以这就像你问一个非常具体的问题,比如某人的国家,更抽象的问题就像只是告诉我这个人的一般历史,而不必担心那个特定的嗯更具体的问题,嗯
第五页:所以让我们实际上只是讨论一下在实践中如何做到这一点所以再次这里有点像各种方法的图表嗯从不太抽象到更抽象,现在这是我们使用论文中的几个few-shot示例来制定提示,嗯,所以再次像输入嗯是关于警察执行合法逮捕以及警察C成员所做的事情的东西所以它基本上给了模型一些例子,嗯,我们基本上把它表述成一个提示这就是这里发生的一切,我们再次重复这个总体提示我们从论文中看到你的专家世界知识,你的测试是退一步并解释一个问题生成更通用的退一步问题,这更容易回答这里有一些例子所以他就像一个非常直观的提示,所以好吧,让我们从问题开始:什么是LLM 代理 的任务组成? 我们将说生成堆栈问题,所以很直观对吧,任务组合的过程是什么?我们不必太担心代理,但总体来说,任务组合的过程是什么?然后,希望可以独立检索,我们可以独立检索与步骤问题相关的文档,此外,还可以检索与实际问题相关的文档,并将它们结合起来,得到最终答案。这就是所有正在发生的事情。嗯这就是响应模板,我们在后退上下文和问题上下文中进行管道连接。所以我们在这里要做的是,我们将输入问题并对其进行检索。我们还将生成后退问题并对其进行检索。我们将它们连接到提始终,因为这是我们的版本,这是我们的提示,键,正常问题,后退问题,以及我们的总体问题,我们再次将它们表述为一个字典,我们将他们连接到响应提示中,嗯,然后我们继续尝试回答我们的总体问题。所以我们将运行他,好的,我们现在有了答案。我想跳到langs smith这里,尝试向你展示一下底层是什么样的,让我们看看,让我们进入每个步骤,这是我们的提示,对吧,你是一位专家,世界知识,你的测试是退后一步,然后解释一个问题,嗯嗯,这就是我们的几个few-shot提示,这是我们的退一步的问题,那么任务组合的过程是什么,嗯,从输入来看,对于LM代理来说,我们对什么是TA组合过程,什么是LM代理,我们执行两种检索,然后原始问题答案填充我们的提示,然后这是从问题和步骤中检索的上下文,这是我们的最终答案,所以这又是一种很好的技术,嗯,可能取决于很多类型,比如你想要执行检索的领域类型,嗯,但在某些领域,例如有很多概念性知识支撑着你提出的问题,预计用户会问这种后退方法,它可以非常方便地自动提出更高层次的问题,例如,尝试改进检索。我们可以想象,如果你正在使用类似教科书或技术文档,其中独立的章节专注于更高层次的概念,然后其他章节专注于更详细的实现,后退方法和独立检索可能真的很有帮助,谢谢。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)