智能体-慢思考与反思

191 阅读6分钟

模型的最大用处应该在于思考,而不是当作知识库

核心的两个思考是:推理规划和反思

问题场景

直接使用“LLM+线上搜索”效果并不好

原因在于:一些问题过于复杂,需要拆解成子问题后,逐一进行突破才可以解决。

其中,问题的拆解就是模型的 ”推理规划“ 而每一次的推理规划都是随机的,很可能不能解决当前问题,则需要让模型进行 ”反思“ ”反思“后如果不能解决复杂问题,则进行重新”推理规划“

推理规划+反思

推理规划有两种:

第一种 - 并行

Pasted image 20241012161531.png

如上图,可以直接将一个问题拆解成不同的子问题,并行进行查询和将所有子问题查询的内容与原问题一起让LLM进行总结

例如问题:字节比百度成立的时间早吗?

第一步,拆解问题

问题拆解为三个子问题:

  1. "字节成立时间"
  2. "百度成立时间"
  3. "字节和百度成立时间对比"

对应的提示语如下:

命题:{{原问题}}
请根据上面的命题,生成几条有针对性的搜索query,帮助用户进一步了解或验证命题的真实性。确保这些query能够涵盖相关的基本背景信息、事实依据或其他影响判断的关键信息。

第二步,汇总查询结果,回答原问题

每个子问题查询后的结果:

  1. 字节成立时间 对应的查询结果:subq1_answer
  2. 百度成立时间 对应的查询结果:subq2_answer
  3. 字节和百度成立时间 对比对应的查询结果:subq3_answer

将子问题的查询结果一起汇总,最后让LLM回答原始问题:

{{子问题的所有查询结果}} = subq1_answer + subq2_answer + subq2_answer

Pasted image 20241013104215.png

对应的提示词:

用户命题:
{{原问题}}
根据用户命题搜索到的信息:
{{子问题的所有查询结果}}
请根据上述信息,针对用户命题的内容,总结搜索到的信息,并输出总结后的信息。

第三步,反思

进行判断总结出来的答案是否回答了原问题,如果反思没有解决原问题,则重新尝试拆解问题

对应的提示语:

用户命题:
{{原问题}}
当前搜索到的信息如下:
{{第二步的答案}}
请根据以上信息,判断用户的命题是否已经被证明。
如果用户的命题已经被证明,无论证明结果为真还是为假,则is_proved为True,conclusion输出证明结论。
如果当前搜索到的信息还无法证明用户结论,则is_proved为False,conclusion输出当前的推断。

第二种 串行

有些子问题的产生是依赖于上一个子问题的结果的。 所以还有一种问题拆解的方式:串行拆解子问题。

如下图,每个子问题的产生都基于上一个子问题和答案再结合原问题,这样产生的子问题的上下文更加全面。

Pasted image 20241012165346.png

例如问题:今年诺贝尔物理学奖获得者 其中年轻的那位的出生地的今日天气

如果使用第一种并行的拆分结果,子问题的拆分如下: 1.今年诺贝尔物理学奖获得者名单 2.今年诺贝尔物理学奖年轻获得者的个人信息 3.今年诺贝尔物理学奖年轻获得者的出生地 4.年轻获得者出生地的今日天气预报

比如子问题4,“年轻获得者”是谁呢? 这个问题的上下文不全面,会导致搜索出的答案不准确,如果改成:“芝加哥和伦敦的今日天气? ” 则问题非常明确。

接下来,看一下串行的拆分流程:

  1. 拆分第一个子问题: 如果要回答原问题,需要拆解的第一个子问题是什么 模型思考规划后,第一个子问题是: 年诺贝尔物搜索2024年诺贝尔物理学奖获得者的信息 答案是:John J. Hopfield和Geoffrey E. Hinton

  2. 拆分第二个子问题: 结合第一个子问题和答案,拆分原问题,第二个子问题是什么 模型思考规划后,第二个子问题是: 搜索John J. Hopfield和Geoffrey E. Hinton的出生地 答案是:加哥和伦敦

  3. 拆分第三个子问题: 结合第一个和第二个子问题和对应的答案,拆分原问题,第三个子问题是什么 模型思考规划后,第二个子问题是: 搜索芝加哥和伦敦的今日天气 答案是:。。。。(天气情况)

  4. 全面总结以上信息:

  • 2024年诺贝尔物理学奖的两位获得者是约翰·J·霍普菲尔德(John J. Hopfield)和杰弗里·E·辛顿(Geoffrey E. Hinton)。其中,杰弗里·E·辛顿是较年轻的获奖者,他出生于1947年12月6日,出生地是英国伦敦:
  • 天气状况:大部多云
  • 最高气温:14°C风向
  • 风速:东南偏南风,风速为15到30公里/小时

对比两次的子问题拆分结果: 串行:

  1. 今年诺贝尔物理学奖获得者名单
  2. 今年诺贝尔物理学奖年轻获得者的个人信息
  3. 今年诺贝尔物理学奖年轻获得者的出生地
  4. 年轻获得者出生地的今日天气预报

并行:

  1. 年诺贝尔物搜索2024年诺贝尔物理学奖获得者的信息
  2. John J. Hopfield和Geoffrey E. Hinton的出生地
  3. 芝加哥和伦敦的今日天气

可以看出,并行拆分后的子问题上下文更加完整。 这样,对问题的检索则更加准确。

思考

把模型当成思考工具,不要当作知识库使用

模型的幻觉问题,让它很难让我们相信它的回答结果,这种不可解释性也限制了它当作知识库使用的场景。 但是模型的理解能力很强,如果让他更多的帮我们规划、思考、反思,则可以事半功倍。

让“流程”慢下来,准确度比速度要更重要

如果你用AI帮你做一个流程,想要一个“快一点”反馈出来的错误结果还是一个“慢一点”反馈出来的正确结果。 我想这也是gpt o1长推理链诞生的原因吧。 在项目中多使用思考和反思,使流程慢下来,让准确度提高上来。

参考文章:

拆解:智谱的「深度推理/多步搜索」 扣子的模版案例:信息处理|深度搜索