为什么复杂任务容易出错?
想象一下,当我们突然被人喊去处理一个复杂问题,如果不加思索,直接说出答案,我们的表现能好到哪里去?
大概率会出错。
如果开始之前先看清问题,确认条件,再一步一步处理,结果通常会更可靠。
对大语言模型来说也一样。
这里有一点需要注意:我们不需要要求模型公开完整的私有思维链,也不能把一大段“我正在思考”的文字当成答案正确的证明。
我们真正需要的,是人可以检查的内容:使用了哪些条件、采用什么公式或依据、必要的中间结果是什么,以及最后的答案。
先看一个简单问题
科比和乔丹是否来自同一个国家?
请直接回答,并给出一句可以核对的依据。
这个问题并不复杂。科比和乔丹都来自美国,所以他们来自同一个国家。
对于这种简单问题,把答案和必要的事实依据说清楚就够了。没有必要为了显得认真,写一大段过程。
那如果问题稍微绕一点呢?
再看一个复杂一点的问题
三个人三天喝了三桶水。
假设每个人每天喝水量相同,九个人九天喝多少桶水?
请直接给出答案。
如果只盯着“三、三、三”和“九、九”,很容易按表面的数字凭感觉回答。
真的是这样吗?
我们先自己算一下。
三个人喝三天,一共是 9 人天。三桶水除以 9 人天,每个人每天喝 1/3 桶。
九个人喝九天,一共是 81 人天。再乘以每人每天 1/3 桶,最后是 27 桶。
所以,直接按表面的数字换算是不对的,正确答案是 27 桶。
给出关键路径
面对这种题,只告诉模型“认真想一想”,不一定有用。
就像我们面对一个什么都能干的实习生。他处理一个复杂问题怎么都弄不好,并不是完全没有能力,而是不知道应该先看什么、再算什么。
这时候,我们需要给他一点关键指导。
可以把 Prompt 改成:
请计算下面的问题:
三个人三天喝了三桶水。假设每个人每天喝水量相同,九个人九天喝多少桶水?
请按下面的关键步骤计算:
1. 先计算三个人三天一共有多少人天;
2. 再计算每个人每天喝多少桶;
3. 计算九个人九天一共有多少人天;
4. 最后计算总用量。
请给出核对答案所需的公式和中间结果,再单独写出最终答案。
不要输出完整的内部思维过程。
可以检查的结果是:
原场景总人天数:3 × 3 = 9 人天
每人每天用量:3 ÷ 9 = 1/3 桶
目标场景总人天数:9 × 9 = 81 人天
总用量:81 × 1/3 = 27 桶
答案:27 桶
这里真正有帮助的,是把关键路径指出来,并让公式和中间结果可以被复核。
把计算依据和最终答案分开
为什么要把两部分分开?
因为我们既想快速看到答案,也需要在有疑问的时候回头检查依据。
但“可检查的计算依据”不等于模型的完整私有思维链。对于这道题,3 × 3 = 9 人天、3 ÷ 9 = 1/3 桶 和 81 × 1/3 = 27 桶 已经足够核对。
最后别忘了,模型把步骤写得很完整,也不代表一定正确。计算题可以再用计算器或代码复核一次,事实问题则要回到原始来源确认。
简单问题,把答案和必要依据说清楚。
复杂问题,给出关键路径,再把可以检查的依据和最终答案分开。
上一章: 善用 XML 标签
回到导读: 什么是 Prompt Engineering?