Anthropic 提升 AI 效率:兩階段架構如何讓 Claude 代理程式完成「長期複雜任務」

Anthropic 採雙代理程式,解決 AI 跨會話健忘問題,像輪班工程師般,讓複雜專案穩定推進

Anthropic 提升 AI 效率:兩階段架構如何讓 Claude 代理程式完成「長期複雜任務」

為什麼 AI 助理會「健忘」?長期任務的大挑戰

隨著 AI 科技越來越厲害,我們開始要求 AI 助理(例如 Claude)去執行一些複雜的任務,這些任務可能需要花費好幾個小時,甚至好幾天的時間才能完成。

AI 在處理這類「長期任務」時,面臨一個核心難題:記憶限制

像換班工程師一樣,每次都從零開始

目前的 AI 模型必須在「離散的會話」(discrete sessions)中工作,就像軟體專案由多位輪班工程師負責一樣。由於 AI 每次能處理的資訊量(稱為「上下文窗口」, context window)是有限的,複雜的專案通常無法在單次會話中完成。

想像一下,一個軟體專案由輪班的工程師負責,但每一位來接班的工程師,都完全不記得上一位工程師做了什麼事。這就是 AI 助理在跨越多個上下文窗口工作時所遇到的挑戰。即使使用了上下文管理功能(如「壓縮」, compaction),AI 仍然難以持續有效地工作。

AI 容易犯的兩大錯誤

當 AI 試圖在多個會話中完成一個複雜的專案時,經常會出現兩種失敗模式:

錯誤一:一次想做太多事,導致半途而廢

AI 助理常會試圖「一步到位」(one-shot)地完成整個應用程式。這樣做的結果是,模型往往在實作到一半時,就因為上下文用盡而「忘記」了正在做的事情,留下了半成品且沒有文件紀錄的程式碼。當下一位 AI 助理開始工作時,它必須花費大量的時間去猜測前一位做了什麼,並嘗試讓基礎的應用程式重新運作。

one-shot attempt

錯誤二:進度剛開始,就宣布大功告成

另一個失敗模式發生在專案後期:當 AI 助理看到已經有一些功能完成後,它可能會誤以為整個工作已經結束了。

Anthropic 的聰明解法:兩階段工作法

為了解決這些問題,Anthropic 開發了一套雙重解決方案,讓 Claude 代理程式工具包(Claude Agent SDK)能夠有效地跨越多個上下文窗口工作。這個方法將問題分解成兩個部分。

第一階段:初始化代理程式 (Initializer Agent)

在第一個執行環節,會使用一個專門的提示詞來啟動初始化代理程式

初始化代理程式的任務是為所有功能奠定基礎,讓後續的代理程式可以一步一步、逐個功能地工作。

它會設定初始環境,包括:

  1. 寫下功能清單: 為了避免 AI 試圖一次完成整個應用程式或過早宣布專案完成,初始化代理程式會根據使用者提供的高階提示,撰寫一份功能需求的全面文件。例如,在一個模擬 claude.ai 的專案中,清單可能包含超過 200 個功能。
  2. 設定初始狀態: 這些功能在一開始都會被標記為「未通過」(failing),這樣後續的編碼代理程式就會有一個清晰的藍圖,知道什麼才是完整的功能。
  3. 建立關鍵文件: 它會建立一個 init.sh 腳本來設定環境,一個 claude-progress.txt 文件來記錄所有代理程式所做的工作,以及一個初始的 Git 提交(commit)紀錄。
💡 為了確保 AI 不會不當地修改或覆蓋功能清單,實驗發現使用 JSON 格式比 Markdown 格式更為可靠。
{
    "category": "functional",
    "description": "New chat button creates a fresh conversation",
    "steps": [
      "Navigate to main interface",
      "Click the 'New Chat' button",
      "Verify a new conversation is created",
      "Check that chat area shows welcome state",
      "Verify conversation appears in sidebar"
    ],
    "passes": false
  }

第二階段:編碼代理程式 (Coding Agent)

每一次後續的工作會話,都由編碼代理程式負責。它的任務是穩步地推進工作進度,並在每個會話結束時,為下一班 AI 留下清晰的「文物」(artifacts)。

聚焦於增量進度 (Incremental Progress)

編碼代理程式被要求一次只專注於處理清單上的一個功能。這種增量方法對於解決 AI 傾向於一次做太多事情的問題至關重要。

保持環境的「整潔狀態」

一旦完成了程式碼更改,AI 必須將環境保持在「整潔狀態」(clean state)。所謂的「整潔狀態」指的是程式碼應該是適合合併到主分支的品質:沒有重大錯誤、程式碼有條理且文件完善,讓下一位開發者可以輕鬆開始新功能的工作,而不需要先清理殘局。

為了實現這一點,AI 會將進度提交到 Git,並附上具體的提交訊息,同時在進度文件中寫下總結。這讓 AI 能夠利用 Git 來恢復到程式碼的工作狀態,或是復原錯誤的程式碼更改。這些做法也提高了效率,因為 AI 不必浪費時間去猜測前一位做了什麼。

確保程式碼「沒壞」:高效的測試與啟動流程

有效的軟體工程師每天都會做的事情,為 Anthropic 如何設計 AI 代理程式的實踐提供了靈感。

每次啟動前,先確認專案無誤

在每次會話開始時,編碼代理程式會被要求執行一系列步驟來「掌握狀況」:

首先,AI 會執行像 pwd 這樣的基本指令來查看它正在工作的目錄。接著,它會閱讀 Git 紀錄和進度文件,以了解最近的工作內容。

然後,AI 會讀取功能清單文件,並選擇下一個最高優先級、尚未完成的功能來著手工作。

為了確保它能快速識別應用程式是否被留在了損壞的狀態,AI 會執行以下動作:

它會要求初始化代理程式寫一個 init.sh 腳本,用來啟動開發伺服器。然後,在實作新功能之前,AI 會先運行基本的端對端測試

在模擬 claude.ai 的專案中,這意味著代理程式總會先啟動本地開發伺服器,然後使用測試工具來執行「開始一個新聊天、發送一條訊息、接收回應」的流程。這確保了 Claude 可以快速發現是否有任何現存的 Bug,並立即修復它們。如果這時候它直接開始實作新功能,問題很可能會變得更糟。

不再假裝完成:強制端對端測試

Anthropic 觀察到的另一個主要失敗模式是:Claude 傾向於在沒有適當測試的情況下,就將功能標記為完成。即使它進行了單元測試(unit tests),也可能無法識別出功能是否在實際的端對端流程中正常運作。

因此,現在明確要求 Claude 像人類使用者一樣,使用瀏覽器自動化工具(例如 Puppeteer MCP 伺服器)來進行所有的測試。透過提供這些測試工具,AI 能夠識別並修復那些光從程式碼中看不出來的 Bug,大大提高了效能。同時,代理程式被嚴格指示,只有在經過仔細測試後,才能將功能清單中的狀態標記為「通過」(passing)。

💡 總結:
這種兩階段工作法就像把一棟大樓的建造任務交給 AI。
- 初始化代理程式是建築師,它先畫好藍圖(功能清單)和地基(初始環境)。
- 接著,編碼代理程式就是一位輪班、有紀律的工匠,他們每次只砌一塊磚(一個功能),每天收工前都會把工地整理乾淨(乾淨的 Git 提交和進度紀錄),並在開工前先檢查地基是否穩固,確保工作持續且穩定地向前推進。

未來展望:下一步的 AI 代理程式

雖然 Anthropic 提出的兩階段解決方案(初始化代理程式與編碼代理程式)已經有效地證明了 AI 能夠在跨越多個上下文窗口的長期任務中取得增量進展,但這項研究仍存在一些開放性的問題與未來的發展方向。

專業分工:多代理程式架構的可能性

一個值得探索的未來方向是:單一的、通用型編碼代理程式是否是最佳的解決方案。

目前的研究將工作分解為兩大核心步驟(初始化與編碼),但未來的架構或許可以透過多代理程式(multi-agent architecture)來實現更優異的性能。

這意味著可以建立專業化的代理程式,例如:

  • 測試代理程式(A testing agent):專門負責執行和驗證程式碼的正確性。
  • 品質保證代理程式(A quality assurance agent):確保程式碼符合標準。
  • 程式碼清理代理程式(A code cleanup agent):專注於提升程式碼的整潔度和可讀性。

透過將軟體開發生命週期中的子任務交給專門的代理程式處理,或許能讓整體的工作流程更加有效率和精確。

多代理程式(multi-agent architecture)

應用範圍的拓展

目前的示範和研究主要針對全端網頁應用程式開發(full-stack web app development)進行了優化。

Anthropic 認為,未來的方向是將這些長期任務的解決方案推廣到其他領域。這些在長期代理程式中學到的經驗教訓,很可能可以應用於其他需要耗費長時間的代理程式任務,例如在科學研究金融建模等領域所需的長期自主性任務。

代理程式應用範圍
💡 簡而言之,未來的 AI 助理可能會像一支專業的團隊。 現在的解決方案是讓一個全能工程師(編碼代理程式)輪班工作;但未來,這個團隊可能會細分成專門的測試員、品管員和架構師,讓 AI 系統能夠在更複雜、更廣泛的領域中,安全且自主地完成長期任務。

Read more

【PwC Insight Hub】從限電停工到數智韌性:製造業如何用 AI 建立不被中斷的工廠?

【PwC Insight Hub】從限電停工到數智韌性:製造業如何用 AI 建立不被中斷的工廠?

2021 年 9 月 26 日晚上十點,新竹某電子廠的供應鏈主管收到一則訊息。 「昆山廠因為限電政策,明早六點起全面停工,復工時間未定。」 他盯著螢幕,第一時間想的不是「損失多少」,而是:「我有哪些料會斷?」手上有二十幾家上游供應商,十幾條產線同時在跑。有些物料是昆山獨家供應,有些雖有備援,但不確定是否能即時補上。更麻煩的是,他不知道這些料「現在在哪」——有些剛出貨、有些卡在倉庫、有些根本不知道生產了沒。 他打開 ERP 想查庫存,但畫面跳出來的是三天前的帳面數字。實際還有多少?夠撐幾天?哪些訂單會延遲?沒有人能給出答案。 他開始打電話。先是打給昆山供應商,沒人接。再打備援廠商,對方說「要查一下」,然後就是漫長等待。天快亮時,資料才逐一湊齊,而產線,已經開始缺料。 那一晚,台灣有數十位供應鏈主管在做著同樣的事。盯著通訊軟體、查貨況、發郵件、

為什麼 Google 敢向 NVIDIA 叫板?Ironwood TPU 開火,Nvidia 霸主地位首現裂痕

為什麼 Google 敢向 NVIDIA 叫板?Ironwood TPU 開火,Nvidia 霸主地位首現裂痕

Google Cloud 悄悄把 Ironwood TPU(第七代)切到 GA(General Availability),沒有大張旗鼓的 keynote,也沒有找一堆 KOL 排隊喊「mind blown」,就是默默地在控制台把價格表亮出來,然後把 9,216 顆晶片的 pod 直接掛網。這種「我做好了,你自己來玩」的態度,我給滿分。 Ironwood TPU * 單顆 Ironwood 比 Trillium 快 4.2 倍(FP8) * 單 pod 9,216 顆 → 42.5 ExaFLOPS * HBM 容量與頻寬直接翻倍