查看原文
其他

Prompt中文指南(四)让模型循环思考行动

李榜主 AIhackathon 2023-12-23

 Prompt中文指南,帮助你从0开始学习如何写提示。建议一定要按照提示案例一个一个尝试,你会发现,写好Prompt其实很简单……”


“ 另外我创建了AI交流群,里面会实时分享AI最新有用的信息,群里信息密度和新鲜度非常高,交流氛围也很好,欢迎感兴趣的朋友可以后台回复关键词【微信】,扫码入群。




在前面几篇指南里我们阐述了Prompt的基本结构与编写原则,用思维链(CoT)的技巧触发了模型的思考能力,用自我提问(Self-Ask)的方式引导大模型LLM将一个复杂的问题拆分为简单的问题,逐个回答,然后汇总成为答案。
但是GPT的大模型是预训练的,知识库的信息无法及时更新,譬如:GPT-3的模型知识库只更新到2021年9月,那么知识库里没有的事实他就很可能瞎编。
Shunyu Yao[1]提出了一种方法在语言模型中协同推理和行动来解决这个问题,方法叫:ReAct。



01


ReAct的逻辑



ReAct是 Reasoning + Acting的简写。ReAct跟自我提问(Self-Ask)的方法一样,是引导大模型LLM将复杂的问题解决过程,拆分为简单的问题,逐个回答,然后汇总为答案。
自我提问(Self-Ask)方式的差别是:
ReAct让大模型LLM按照以下三步循环,直到给出结果:
【思考1 Thought1】【行动1   Action 1 】观察1 Observation1
【思考2 Thought1行动1   Action 1 【观察1 Observation1
   … …
【思考 N Thought N【行动 N   Action N 【观察N Observation N
【思考1:是让大模型LLM思考当前情况下用户的问题应该怎么行动才能回答。
【行动1】并不只限于检索信息,是可以调用任何外部工具,类似ChatGPT插件的逻辑(ChatGPT根据插件提供的描述、还有它自己的知识库来决定,什么时候调用什么工具,目前是只能从用户选择的3个插件里选)。
【观察1】行动的结果
【思考2 】结合上一次的行动结果变成当前情况下的思考环境(【行动1】行动结【观察1】),根据当前的思考环境,思考用户的问题应该采取什么样的下一步行动才能回答。
整个过程是根据上一步的行动结果逐步推进的,并且可以直观的输出整个思考逻辑的执行过程,增加了ChatGPT决策的透明性,提高了对用户的可信度
ReAct引入了外部工具的概念,让LLM能够通过这种方式逐步思考并调用外部工具,再根据外部工具的结果进一步思考,完成 思考 - 行动 - 观察 - 思考 的循环,直到找出答案。



02


ReAct与Self-Ask的区别



ReAct 是 思考1 - 行动1 - 观察1 - 思考2 的循环,并在行动部分引入了外部工具。
自我提问(Self-Ask)只在打样(few-shot)的时候提出了一个思考:

是否需要拆分出子问题?
这个思考按照ReAct的逻辑,可以理解为Self-Ask只提出了【思考1】,其他的交给大模型LLM自己去处理了。



03


看案例


ReAct的过程仍然要靠打样(few-shot)来引导LLM类似的“思考”。案例里的思考方式就是打样

Prompt(Model: GPT-4)

按照以下的思考方式,回答我的问题。


我的问题是:Pavel Urysohn 和 Leonid Levin 是否因同一类型的作品而闻名?


思考方式:


问题:尼古拉斯·雷和埃利亚·卡赞有什么共同的职业?


思路1:我需要搜索尼古拉斯·雷和埃利亚·卡赞,找出他们的职业,然后找到他们共同的职业。


行动1:搜索【尼古拉斯·雷】。


观察1:尼古拉斯·雷(原名雷蒙德·尼古拉斯·金兹尔,1911年8月7日-1979年6月16日)是美国电影导演、编剧和演员,以1955年的电影《无因的叛逆》而闻名。


思路2:尼古拉斯·雷的职业是导演、编剧和演员。接下来我需要搜索埃利亚·卡赞,找到他的职业。


行动2:搜索【埃利亚·卡赞】。


观察2:埃利亚·卡赞是美国电影和戏剧导演、制片人、编剧和演员。


思路3:埃利亚·卡赞的职业是导演、制片人、编剧和演员。所以尼古拉斯·雷和埃利亚·卡赞共同的职业是导演、编剧和演员。


行动3:完成【导演、编剧、演员】。


Completion
思路1:我需要搜索Pavel Urysohn和Leonid Levin,找出他们的专业领域,然后看看他们是否在同一领域内有所成就。

行动1:搜索【Pavel Urysohn】。

观察1:Pavel Urysohn是一个俄罗斯数学家,他以他在拓扑学的工作而闻名。

思路2:Pavel Urysohn是一位在拓扑学领域有所成就的数学家。接下来我需要搜索Leonid Levin,找出他的专业领域。

行动2:搜索【Leonid Levin】。

观察2:Leonid Levin是一位计算机科学家和数学家,他在计算理论领域,特别是在复杂性理论上的贡献,如NP问题的定义,让他广为人知。

思路3:Leonid Levin是一位在计算理论和复杂性理论领域有所成就的计算机科学家和数学家。尽管他们都是数学家,但他们在不同的数学领域有所成就:Pavel Urysohn在拓扑学,而Leonid Levin在计算理论和复杂性理论。

行动3:得出结论,Pavel Urysohn和Leonid Levin并没有因为同一类型的作品而闻名。他们在不同的数学领域有所成就。


03


看论文图



参考文献:

[1]ReAct: SYNERGIZING REASONING AND ACTING IN LANGUAGE MODELS


Shunyu Yao∗*,1, Jeffrey Zhao2 , Dian Yu2 , Nan Du2 , Izhak Shafran2 , Karthik Narasimhan1 , Yuan Cao2


https://arxiv.org/pdf/2210.03629.pdf





继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存