這有什麼難的?我能做些什麼?(遞迴式思考)

Lesswrong·

當我面對困難的任務時,我會明確地詢問「這件事難在哪裡?」以及「我該如何處理?」,並遞迴地將障礙分解成可控的小目標,直到找到清晰的解決方案為止。

這是「理性思維短篇提示系列」的第三篇。

我的理性思維起手式通常是「我的目標是什麼?」。

緊隨其後的則是:「這件事為什麼很難?針對這點我能做什麼?」

如果你正打算掏出刻意的「理性」工具(而不是憑直覺行事或模仿鄰居),那麼你的處境可能有些困難。

明確列舉「這件事難在哪裡?」,並準確全面地^([1])列出這些困難點通常很有用;理想情況下,如果你能成功處理每一個難點,這件事就會變得容易。

接著,你就有了新的子目標:「想辦法處理每一個難點」。然後你可以集思廣益(brainstorm)解決方案^([2])。

有時候,這些子目標本身也很難。這時要做的事就是問:「好吧,這個子目標難在哪裡?我要如何處理那個難點?」

範例

我會舉兩個例子,一個比較「簡單」(我大部分需要做的只是「真的去嘗試」),另一個則比較複雜(我需要進行一些相當有創意的思考才能取得進展)。

範例 1:試圖閱讀一個方程式

我正在讀一篇 LessWrong 的文章,裡面有一個方程式。我並不是個擅長數學的人。通常,我看到有方程式的文章就會直接跳過。但這一次,文章裡只有這麼一個方程式,而且除此之外內容都很有趣。

我可以跳過方程式,但下一段馬上就引用了它,而且它似乎是支撐論點的關鍵。

好吧,呃,如果我真的試著去讀這個方程式呢?

我試了。這很難。我的眼神變得呆滯。幾分鐘後,我突然發現自己在刷 Facebook。

這件事難在哪裡?

嗯:

  • 方程式裡大約有 7 個項,很難解析它們是如何組合在一起的。
  • 我不知道方程式裡任何一個項代表什麼意思。

讓我們處理第一個問題:7 個項。我的工作記憶大約只有 4 個槽位,而我需要其中一些來對方程式進行推理。我有什麼辦法處理這個問題嗎?

讓我們腦力激盪一些選項

選項 1:一次只看方程式的一小部分。

……喔,好吧,這行得通。好,我只專注於方程式的左邊。那裡有一個 f(x)。

f 是什麼?

x 是什麼?

現在我們來到了難點 #2:我不知道方程式裡任何一個項代表什麼意思。我該如何處理?一些選項:

選項 A:重新閱讀前一段話。

……喔,這立即見效了。原來我之前粗略掃過前一段,是因為我知道它在討論方程式。它字面上解釋了每一個項的意思。這有點令人不知所措,但我一次讀一個句子(重複使用上面的選項 1),並在理解每個項之後再繼續下一個。

這花了一點時間,但我做到了。

範例 2:疲憊時處理官僚作業

下一個例子比較長,因為通常問題是分形(fractally)難度的。處理這種情況是一項重要的生活技能。

我正試著填寫一些表格。它需要一些我不知道如何獲取的資訊,而且我預期獲取過程會很煩人。

此外,我睡眠不足,感到很累。我的視線無法集中。

預設結果:「呃,這太糟了」,放棄,斷斷續續地嘗試處理然後又去刷 Facebook,既沒有成功玩到,也沒有完成表格。

這件事難在哪裡?嗯:

  • 我很累,所以專注力較低。
  • 我不知道資訊在哪裡。

試圖同時處理這兩件事會讓人感到不知所措。但現在更明顯的是,我可以將它們拆開並分別處理。

#1. 我很累

讓我們從這個開始,因為它會是處理另一個問題的效能倍增器。讓我們腦力激盪一些選項。我想到:

我試著喝點水。我還是很累。我試著做幾個開合跳。我還是很累。

遞迴:事實證明,小睡一下也很難。

小睡一下?呃,那會花不少時間,而且我不太擅長午睡,加上我剛喝了兩罐紅牛。我不指望小睡會奏效。

嗯。如果我試著只是在黑暗的房間裡躺一會兒,半心半意地假裝在睡覺,讓思緒漫遊呢?

好吧,如果我那樣做,我最後一定會玩手機,連半心半意的睡覺都做不到。

如果……我不把手機帶進黑暗的房間呢?

好吧,你知道嗎,那可能行得通。

我試了。效果還可以——我沒有完全恢復體力,但專注起來容易了一點。

#2. 我不知道資訊在哪裡

這裡最愚蠢的部分是,在預設情況下,我會週期性地「開始思考填寫表格」,並嘗試一些自動導航式的動作,比如「掃視稅務表格,希望答案會自己跳出來」。然後失敗了,我就莫名其妙地出現在 Facebook 上。

寫下「我不知道如何獲取資訊。我該如何處理?」,會引出一個尷尬且顯而易見的答案:「我必須想辦法弄清楚如何獲取資訊」,這意味著「我需要一個獲取資訊的計劃」。

但是,我注意到我的大腦仍在逃避這個問題。我試著去思考它,但即使喝了水和/或睡了覺,這件事還是顯得模糊不清。

遞迴:尋找資訊很難。

思考了一會兒後,我意識到兩件事:

  • A. 我不知道如何找到資訊,甚至不知道從哪裡開始。
  • B. 我對這整件事感到生理性的反感。我預期尋找資訊會非常煩人,花很長時間,而且全程都很痛苦。

嗯。

當我把注意力轉向第二點時,我該怎麼辦?嗯,一些選項:

  • 確認我是否真的需要做這份文書工作。
    (這是一個很好的第一步,雖然在這種情況下事實證明我確實需要)

  • 現在先放棄,看看晚點會不會容易些。
    (不幸的是,我已經連續好幾天放棄了,我懷疑我需要做點不同的事情才能真正取得進展)

  • 嘗試採取一些不同的心態,看看是否有幫助。

當我想到選項 #3 時,我的大腦生理性地反抗並大聲尖叫:「不,如果我用理性思維來解決這個問題,我可能會弄清楚如何處理文書工作,然後我就真的得去做那些文書工作了。

喔,好吧,呃,那是個問題。

這是一個非常困難的問題,以至於我對解決它的建議是另外幾篇完整的文章:《刻意悲傷》,以及《繫好安全帶,老兄,準備好迎接多個艱難的認知步驟》。在以此為基礎的現實案例中,我甚至連那都做不到,我不得不找一個臨時的思考助手來定期檢查並提醒我保持專注。

這花了大概一個小時,而且有點尷尬。為了這篇部落格文章,我跳過細節,直接進入下一個簡單的步驟:

回到問題 A。

我不知道如何找到資訊。我需要制定某種實際的計劃來找到它。有哪些事情可能有幫助?

這部分可能是分形難度的,每個選項都可能遇到另一個難點。但既然我已經繫好安全帶,多想幾步就不再那麼令人討厭了。

一些想法:

  • 我可以更仔細/徹底地閱讀表格上的說明。
  • 我可以 Google 相關的公司/政府網站。
  • 如果事實證明我那「獨一無二」的情況不符合這個官僚體系的分類,我可以再次確認我是否拿對了表格,或者接受輸入一些不完全準確的內容所帶來的後果。
  • 我可以寫下一份明確的清單,列出我認為需要採取的步驟以及我的困惑,並用它來處理即將到來的工作記憶超載。

哪一個最終會起作用取決於我處理的具體文書工作。但是,我發現自己經常「連試都不試」去弄清楚如何找到資訊,而只是在那裡晃來晃去,希望它能神奇地變簡單,這真的有點尷尬。一旦我明確了問題,通常就更容易解決。

所以我列出了困惑的部分。我將每個困惑轉化為明確的步驟。我執行了這些步驟。

這個難題變得有點容易了,雖然還是有點煩人。

然後我就完成了。

插曲:內容真多

你可能注意到範例 #2 的內容非常多。事實上,多到我把其中一些內容埋在了另外幾篇部落格文章之後。(我確實在寫這篇文章的過程中寫了《繫好安全帶,老兄,準備好迎接多個艱難的認知步驟》,因為我意識到這本身就是一項完整的技能。)

這是難題的一個相當普遍的特徵。這很糟。你必須想辦法應對。

有幾種處理方法。你可以拿出筆記本,試著將你的工作記憶外部化。你可以一次處理一個專案的一小部分——你甚至可以在兩個以不同方式呈現難度的不同難題之間切換,讓你的後腦消化第一個問題中最後一個困難點。

既然我是以流派式(stream of conscious)寫作的,我要重新總結一下高層次的細節:

  • 我很累,所以專注力較低。
  • 我不知道資訊在哪裡。
  • 我不知道如何找到資訊,甚至不知道從哪裡開始。
  • 我對這整個過程感到生理性的反感,以至於我的大腦在反抗理性的概念。

在每一步中,我都腦力激盪了多個選項。

我透過半心半意地小睡並把手機留在房門外解決了「疲累」問題。

我透過悲傷於「即使文書工作很糟我也必須去做」的事實,並心理準備好迎接多個煩人的步驟,以及找人陪我坐著專注,解決了 2B。

我透過結合更仔細地閱讀說明、明確寫下所有讓我困惑的步驟,以及 Google 我不理解的部分,解決了 2A。我把這一切變成了一份給自己的簡單指令清單。

範例 3:讓 LLM 真正發揮除錯作用

從某種意義上說,官僚作業的練習是「容易」的。你知道如何填寫表格。你已經做過一百次了。人類已經做過數百萬次了。它之所以「難」的唯一原因是它有點糟。但如果你坐下來仔細思考,它並不算太糟。

有時候,某件事之所以難,更多是因為「你真的不知道該怎麼做」,你需要找到一種看待問題的新方法。

最近,我正在「憑感覺寫程式」(vibecoding)一個有趣的業餘專案。我想做一個網站,裡面有同一首歌的許多不同版本的樂譜,並且能夠將一種音樂記譜法轉換為另一種。其中的一個子線程是:我們能否掃描樂譜的靜態 PDF,並將其轉換為我可以編輯的文件格式?

我請 Claude Agent 寫一個轉換腳本。

它沒用。

我說:「嘿 Claude,它沒用。」

Claude 說:「喔,我的錯。讓我試試 <某個隨機的東西>。」Claude 試了那個隨機的東西,然後說:「好了,我修好了!」但並沒有修好。

我說:「請再深入思考一下,並在宣稱完成之前確保你完全理解了問題。」

它做了一些看起來模糊像是在深入思考的微小認知儀式,然後又做了同樣的事情。

天哪 Claude,你除錯的樣子就像我在狀態不佳的日子裡一樣,隨機亂撞而不是制定系統化的清單並試圖理解問題。

如果這是一個嚴肅的專案,我會說:「呃,我想我得認真除錯了」,然後再次「繫好安全帶」,開始閱讀文件、列出困惑清單並建立情境模型。

這件事難在哪裡?

  • 我現在不想做任何費勁的事。
  • 這件事還不夠重要到需要花費社交資本請朋友幫忙。
  • 我唯一可能派上用場的工具 Claude 似乎做不到。

第三個選項難在哪裡?

嗯,是因為這項任務顯然對 Claude 來說很難。

這對 Claude 來說難在哪裡?

嗯:

  • 它正在使用一個外部 PDF 轉換庫。也許這個庫很爛。也許它需要更換庫或用完全不同的方式解決問題。這裡的難點在於行動空間很大,而 Claude 根本沒有足夠的判斷力來導航那個行動空間。
  • Claude 顯然沒有能力僅僅透過看程式碼來判斷它是否解決了問題。
  • 此外,Claude 不能直接查看我的網站、點擊按鈕,看看 PDF 是否成功轉換。

如果我能為 Claude 解決其中任何一個問題,它可能就不會在顯然沒完成時聲稱已完成,而是會繼續嘗試。

問題 #1 似乎是個死胡同。總有一天 AI 會有良好的判斷力,在第一種模式匹配猜測無效時導航複雜領域。但今天還不是那一天。(當那一天到來時,我會感到害怕)。

問題 #2 和 #3 都意味著 Claude 根本無法判斷自己是否完成了。也許我可以說服它停止假裝完成,但那不會讓它完成得更快。

我對 #2 感到非常懷疑。Claude 似乎應該有能力逐行閱讀程式碼庫,包括進入外部庫,並模擬每一步是否應該奏效。我嘗試了很多次讓它可靠地做到這一點,但還沒成功。也許有一天我會找到一個好的元認知提示詞,但在投入了十幾個小時後,今晚看起來並不樂觀。

#3 呢?

為什麼 Claude 不能查看我的網站、點擊按鈕,看看轉換是否正常?

實際上,最近有一些工具可以讓它直接做到這一點。我還沒麻煩去安裝那些工具,因為我很懶。我可以安裝那些工具,但我必須連續執行幾個煩人的步驟來確保工具正常運作。這是一個有趣的業餘專案。我不想這麼做。

嗯。為什麼 Claude 需要導航網頁並點擊按鈕?

因為目前,轉換腳本直接內建在網頁中,只能透過瀏覽器訪問。

有什麼充分的理由嗎?

沒有。我可以將其重構成一個可以從命令行單獨運行的測試腳本。Claude Agent 確實有能力在命令行上建立並運行腳本(如果我給予權限的話)。

「嘿 Claude,你能給自己寫一個測試轉換功能的腳本,並在除錯時持續重新運行它,直到腳本可靠地運作為止嗎?」

「沒問題。」Claude 照做了。幾分鐘的暴力探索後,它解決了問題。事實證明,「首先,嘗試乾淨地重現問題」這一除錯原則對 LLM 來說和對人類一樣重要。

(這只是上週的事,但這對於讓 AI 持續工作直到真正完成似乎很有用。有時候將問題轉換為 AI 可以「看到」的東西會難一點,但我現在的工具箱裡有了「思考如何將程式問題轉換為 AI 可以看到的東西」。)

總結

當你有一項任務讓你感到挫敗且困難時,試著問自己:「這件事難在哪裡?」,然後追問:「針對這點我能做什麼?」

有時候,這比這些範例要容易得多,一旦你問了「為什麼這很難?」,你就會意識到「因為我需要連續思考該死的兩秒鐘,而我之前根本懶得去做」,然後你連續思考了該死的兩秒鐘,解決方案就顯而易見了。

有時候,處理「難點」本身也很難,你需要遞迴地問:「好吧,為什麼很難?針對那點我能做什麼?」

給讀者的練習

你最近在處理什麼困難的事情?它難在哪裡?你該如何處理?

(如果你願意在評論中寫下你的答案,我將不勝感激)


  • ^([1])(嗯,對於較輕量的問題,如果最難的那件事很容易想到,那麼僅列出那一件事可能就足夠了)

  • ^([2])參見《胡言亂語挑戰》《元策略腦力激盪》,了解一些關於訓練「產生解決問題的方法」這塊肌肉的背景。(但請注意一位評論者的回覆:「有時候解決方案其實不是『腦力激盪』,而是去散個步,讓思緒漫遊直到想通為止。」)

Lesswrong

相關文章

  1. 成為「有用的具體」

    6 個月前

  2. 尋找關鍵點:讓現實來給你一記當頭棒喝

    3 個月前

  3. 你就是可以做到:五種思考框架

    5 個月前

  4. 要寫得更好,只需向他人解釋

    5 個月前

  5. 「什麼這麼難…?」一個值得探究的問題

    5 個月前