為什麼複雜任務容易出錯?
想像一下,我們突然被人叫去處理一個複雜問題,如果不加思索,直接說出答案,我們的表現能好到哪裡去?
很可能會出錯。
如果開始前先看清問題,確認條件,再一步一步處理,結果通常會更可靠。
對大型語言模型來說也是一樣。
這裡有一點需要注意:我們不需要要求模型公開完整的私密思考鏈,也不能把一大段「我正在思考」的文字當成答案正確的證明。
我們真正需要的是人可以檢查的內容:使用了哪些條件、採用什麼公式或依據、必要的中間結果是什麼,以及最後的答案。
先看一個簡單問題
科比和喬丹是否來自同一個國家?
請直接回答,並給出一句可以核對的依據。
這個問題並不複雜。科比和喬丹都來自美國,所以他們來自同一個國家。
對於這種簡單問題,把答案和必要的事實依據說清楚就夠了。沒有必要為了顯得認真,寫一大段過程。
那如果問題稍微繞一點呢?
再看一個複雜一點的問題
三個人三天喝了三桶水。
假設每個人每天喝水量相同,九個人九天喝多少桶水?
請直接給出答案。
如果只盯著「三、三、三」和「九、九」,很容易按表面的數字憑感覺回答。
真的是這樣嗎?
我們先自己算一下。
三個人喝三天,一共是 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?