讓模型先想再答
6 道容易錯的題各跑 5 次,直接回答對 21 次,先寫推理過程對 29 次,開啟思考模式全對。講清楚為什麼先想再答有用,以及它要付出多少代價。
- 約 35 分鐘
- 難度:入門
- 實測:2026-09-14 deepseek-flash
程式碼和執行結果保留原樣(簡體中文),與實際執行時完全一致。
"9.11 和 9.9 哪個大?"這個問題,小學生都能答對,大模型卻經常答錯。上一個模組的實驗裡,deepseek-flash 關掉思考時就答成了 9.11。
同一個模型,換一種問法就能答對:讓它先把推理過程寫出來,再給答案。這一課用實驗看看這招到底多有用、花多少錢,以及它和"思考模式"是什麼關係。
為什麼先寫過程有用
回憶第 01 模組第 2 課:模型一次只生成一個詞元,每個詞元都基於前面所有的內容。
如果要求"只回答答案",模型必須在第一個詞元就給出結論。比較 9.11 和 9.9,它沒有地方"算",只能憑直覺。而它的直覺可能被訓練資料裡大量的版本號帶偏了:在軟體版本里,9.11 確實比 9.9 新。
如果讓它先寫過程,比如"9.9 可以寫成 9.90,比較小數點後第一位,9 大於 1……",這些推理步驟就成了後面詞元的輸入。等到寫結論時,它是在前面已經寫好的推理基礎上得出結論,而不是憑空猜。
所以,讓模型先想再答,本質上是給它地方打草稿。它能"想"多少,取決於它寫出來多少。
實驗:三種做法對比
我挑了 6 道容易錯的題:前面見過的比較小數、數字數、正方形面積、數字母,外加兩道新的:
- 一根繩子對摺三次,然後從正中間剪一刀,繩子變成了幾段?(答案是 9:對摺三次是 8 層,中間剪一刀有 16 個斷口,加上原來的兩個端頭,組成 9 段)
- 我有 3 個蘋果,吃掉 1 個,又買了 2 個,然後把一半送給朋友,還剩幾個?(答案是 2)
三種做法,都用 deepseek-flash:
DIRECT = "只回答最终答案,一个数,不要任何解释。"
STEP_BY_STEP = "先一步一步写出推理过程,最后单独一行写“答案:”加上一个数。"
METHODS = [
("直接回答", DIRECT, False), # 关掉思考
("先推理再回答", STEP_BY_STEP, False), # 关掉思考,但要求在回答里写推理过程
("开启思考", DIRECT, True), # 打开思考模式,回答里只要答案
]
每道題每種做法各跑 5 次,從回答裡取出"答案:"後面的數字,和標準答案比對(完整程式碼見 code/02-prompting/reasoning.py)。我執行的結果:
直接回答:21/30 正确,平均输出 1 词元,共 0.0003 美元
9.11 和 9.9 哪个大?(正确答案 9.9)→ ['9.11', '9.11', '9.11', '9.9', '9.9']
“秋天的叶子一片片落下”这句话有几个字?(正确答案 10)→ ['11', '11', '11', '11', '12']
单词 raspberry 里有几个字母 r?(正确答案 3)→ ['3', '2', '3', '3', '3']
先推理再回答:29/30 正确,平均输出 244 词元,共 0.0091 美元
9.11 和 9.9 哪个大?(正确答案 9.9)→ ['9.11', '9.9', '9.9', '9.9', '9.9']
开启思考:30/30 正确,平均输出 431 词元,共 0.0160 美元
讀結果
直接回答錯了 9 次。數字數的題 5 次全錯,而且錯得不一樣,有 11 也有 12。比較小數的題 5 次錯了 3 次。有意思的是,繩子和蘋果這兩道看起來更復雜的題,直接回答反而全對,可能是這類題在訓練資料裡見得多。
寫出推理過程,錯誤從 9 次降到 1 次。只是在提示詞里加了一句"先一步一步寫出推理過程"。剩下的一次錯誤還是 9.11 那道,說明寫了過程也不是萬無一失:如果推理的第一步就走偏了(比如一開始就認定"11 比 9 大"),後面的推理只會順著錯下去。
思考模式全對。思考模式其實做的是同一件事,只是做得更徹底:模型在 reasoning_content 裡先想一遍,這部分經過了專門的訓練,會自己檢查、發現矛盾時回頭重來。最後的 content 裡只放答案,我們處理起來也方便。
代價是詞元。直接回答平均只輸出 1 個詞元,寫推理過程要 244 個,開思考要 431 個。30 道題的花費從 0.0003 美元漲到 0.016 美元,是 50 多倍。響應時間也相應變長。
手動寫過程還是開思考
截至 2026 年 9 月,DeepSeek 的主力模型都支援思考模式,所以大多數情況下直接開思考就好,不用在提示詞裡手動要求"一步一步想"。
手動要求寫推理過程,在這些情況下仍然有用:
- 你用的模型不支援思考模式。
- 你想讓使用者看到推理過程,比如解題輔導、給出判斷依據。思考模式的
reasoning_content是給開發者看的草稿,內容和格式都不受你控制,一般不直接展示給使用者。 - 你想控制推理的方式,比如要求"先列出已知條件,再列出要求的量,再逐步計算"。
用手動方式時要注意一點:要讓模型先寫過程,後寫答案。如果提示詞要求"先給答案,再解釋理由",模型會先憑直覺給出答案,然後為這個答案編一套理由,那樣推理就白寫了。
什麼時候值得讓模型想
先想再答不是免費的。本實驗裡,思考讓花費增加了 50 多倍。
值得:多步計算、邏輯推理、需要仔細比對的任務、寫程式碼、複雜的規劃。這些任務答錯的代價通常遠高於多花的那點錢。
不值得:簡單的分類、翻譯、改寫、從文本里提取一個欄位、閒聊。這些任務模型憑"直覺"就能做好,思考只會增加延遲和費用。上一課的留言分類,關掉思考就答對了 20/20。
拿不準的時候,用第 01 模組第 6 課的方法:拿你的真實任務,開和不開各跑一遍,比較準確率和花費。
練習
- 在
reasoning.py的題目里加 3 道你覺得模型容易錯的題(比如"一個星期後的星期幾"、"兩個時間相差多少分鐘"),看看三種做法誰表現最好。 - 把
STEP_BY_STEP改成"先給出答案,再解釋你的理由",最後一行仍然寫"答案:"。跑一遍,準確率和原來比有什麼變化? - 開啟思考時,把
reasoning_content打印出來,看看模型在 9.11 那道題上是怎麼想的。它有沒有中途改變主意?
自測
1. 為什麼要求模型"先寫推理過程再給答案",能提高準確率?
模型每次只生成一個詞元,後面的內容以前面寫出的內容為基礎。要求直接給答案時,模型在第一個詞元就得下結論,只能憑直覺。先寫推理過程,這些步驟就成為後續生成的輸入,結論是在推理的基礎上得出的。相當於給了模型打草稿的地方。
2. 如果提示詞要求"先給出答案,再解釋理由",會有什麼問題?
模型會先憑直覺寫出答案,後面的"理由"只是在為這個答案找依據,不會糾正它。推理必須寫在答案前面,才能幫助得出答案。
3. 你的應用要把使用者評論分成"好評""差評"兩類,每天處理 10 萬條。要不要開思考模式?
一般不需要。情感分類是簡單任務,不開思考通常就能做得很好,開了思考花費會成倍增加,延遲也更長。可以先用一小批真實評論,開和不開各測一次,如果準確率差別不大,就關掉思考。
提問與討論
這一課沒看懂的地方,在這裡問。看到別人的問題,也歡迎你來回答。
提問 +3 點,回答別人 +6 點。內容經審核後公開。
正在載入討論…