输入“/”快速插入内容

陈财猫:如何用GPT写长篇科幻?用分治法完成复杂任务

2023年9月4日修改
🐱
作者:
陈财猫,提示工程师,AI产品经理。提示词框架“BORE”与“BROKE”原创作者。
提示工程教材《ChatGPT进阶 提示工程入门》已在北京大学出版社出版。
📚
该文章节选自《ChatGPT进阶 提示工程入门》第6章第1小节:“使用分治法让ChatGPT完成大而复杂的任务”。本文内容在原书基础上有调整。
飞书原文:如何用GPT写长篇科幻?用分治法完成复杂任务
BROKE框架的介绍:陈财猫:可操作,可重复的GPT使用框架“BROKE”
BORE框架的诞生:陈财猫:BORE框架的产生过程,一个自动驾驶产品经理的ChatGPT方法论
1 分治法的基本定义
分治法(Divide and Conquer)是计算机算法设计中的一种基本策略,也是一种历史悠久,非常古老的问题解决方法。从字面上解释“分治法”,就是“分而治之,各个击破”,其核心思想是将一个问题分解成若干个规模较小、相互独立且与原问题形式相同的子问题,然后分别求解这些子问题,最后合并这些子问题的解来得到原问题的解。
严格来说,分治法的基本步骤可以概括为以下三个阶段:
1.分解(Divide)将原问题划分为若干个较小的、相互独立的子问题。这些子问题通常具有与原问题相同的形式,但规模较小,因此更容易解决。
如果子问题还是比较难,那么此时我们可以将子问题分解为更简单的问题。直到可以轻松解决为止。
2.解决(Conquer)如果子问题可以容易地解决,则直接解决;否则,递归地解决各个子问题。
3.合并(Combine)将子问题的解组合成原问题的解。
让我们用“做年夜饭”打个比方,来为你介绍分治法的思想。假如今年春节,你要组织一场很大的家庭聚会,邀请了许多亲朋好友。准备这样一场聚会涉及很多工作,要一下子把所有事情都处理好显然是很困难的,这时候,你可以运用分治法的思想来把它拆成较小的问题,逐个击破。
首先,你可以把这个大问题划分成几个子问题:购买食材、烹饪、布置场地和安排座位。然后,你可以将这些子问题再细分,比如购买食材可以分为购买蔬菜、购买肉类、购买饮料等;烹饪可以分为炖菜、炒菜、烤肉等。这样,你就把一个庞大的问题分解成了许多相对容易处理的小任务,这就是分治法。
作为一种相当有效的问题解决策略,分治法具有悠久而古老的历史。比如说在《西游记》中的故事“三打白骨精”中,白骨精就是应用分治法思想的典范。白骨精认识到师徒四人团结一致是难以克服的问题,所以她采取了分化策略。她通过变身为不同的人物角色(少妇、老太婆、老公公)来诱骗唐僧,先让孙悟空被赶到花果山(分解,Divide),将师徒四人分解为不同的部分。而没有孙悟空的唐僧则很快被抓走了(解决子问题,Conquer)
当然,因为主角光环的原因,唐僧并没有被吃掉,白骨精失败了,所以也就没有了合并(Combine)的部分。不然除了唐僧以外,白骨精还可以多吃三个。但是这种解决问题的思路是值得大家学习的。
2 将分治法应用到ChatGPT提示设计中
在ChatGPT的使用过程中,分治法最有意义的是它通过拆解问题,灵活解决困难的思想。你可以在解决问题的过程中灵活应用这种思想,无需死板地遵循固定的步骤。
写一个复杂的提示词是比较艰巨,比较困难的任务。但是我们将这个任务拆解开来,就可以将“一个非常复杂的问题”拆解为几个“比较简单的问题”。而拆解后的“比较简单的问题”可以被更轻松的解决。
2-1 示例1:BROKE框架
举个例子,在我提出的“BROKE”提示词设计框架中,我们将“设计一个完整的提示词”这个又大又艰巨的任务拆成了“背景B,角色R,目标O,关键结果K,试验与改进E”五个元素。 由于分别填写这5个要素的内容是更简单的,我们可以逐个处理它们,最终轻松地组合成一个完整且高效的提示词。
“BROKE”提示设计分析法
2-2 示例2:“要给模型时间思考”与“列出步骤”
在吴恩达的“面向开发人员的提示工程课程”中,他也提出“要给模型时间思考”并“列出步骤”。“列出步骤”就是在将完整问题分解为多个小问题,然后再逐个解决,这也可以说体现了分治法的思想。
吴恩达+OpenAI官方的提示工程课