跳到主要內容

AI代理的協作革命:Anthropic的雙代理系統與外部記憶策略


在人工智慧(AI)代理能力日益增強的時代,開發者們對其寄予厚望,期待它們能獨力承擔需要數小時甚至數天才能完成的複雜任務,例如開發一款完整的軟體應用程式。然而,這些雄心壯志卻常常在一個關鍵環節上受挫:AI代理難以在多個「上下文視窗」(Context Window)之間保持連貫的記憶與進度。這好比一場馬拉松接力賽,每位接力者卻對前一位跑者的努力一無所知,導致工作無法無縫銜接。Anthropic 工程團隊的最新研究,正是為了解決這項核心挑戰,提出了一套借鑒人類軟體工程最佳實踐的「有效控制架構」(Effective Harnesses)。

這項突破性研究的核心觀點並非等待一個擁有無限記憶的「超級模型」問世,而是將重心從單純追求模型能力,轉向系統工程與流程設計的重大典範轉移。正如奧斯卡·王爾德(Oscar Wilde)所言:「記憶…是我們每個人隨身攜帶的日記。」對於缺乏內建持久記憶的AI代理而言,外部的「日記」與「工作日誌」便成了其維繫連貫性的關鍵。


AI代理的「失憶症」:長時間運作的核心障礙


儘管諸如 Claude 3.5 Sonnet 等頂尖大型語言模型(LLMs)擁有強大的單次互動能力,但在面對「建立一個 claude.ai 的複製品」這樣的高層次、長週期指令時,它們往往會遭遇滑鐵盧。其根本原因在於上下文視窗的物理限制,導致代理在每次新的互動會話(Session)開始時,便會「失憶」,忘記之前已經完成的工作與決策。

研究歸納出幾種主要的失敗模式:
一次性完成所有工作(One-shotting):代理傾向於試圖在單一上下文視窗內完成過多任務。這猶如要求一位工程師在沒有任何筆記或休息的情況下,獨自從頭到尾寫完整個專案。結果往往是在中途耗盡記憶體,留下未完成、無文檔的半成品,導致後續的代理實例需要花費大量時間去猜測和修復。

過早宣告完成(Premature Completion):
當後續代理實例看到部分已實現的功能後,可能會錯誤地判斷整個專案已經結束,從而停止工作,導致專案最終未能達到預期目標。

缺乏上下文的錯誤修復:
當代理產生的程式碼存在錯誤(Bug)時,新的代理實例由於缺乏完整的歷史記錄,難以定位和修復問題,甚至可能在修復過程中引入新的錯誤。
環境不一致:代理在每次啟動時,都可能需要花費大量時間重新探索和設置開發環境,這不僅降低了效率,也增加了出錯的風險。

Anthropic的解決方案:雙代理系統與外部記憶架構


為了克服這些挑戰,Anthropic 的「控制架構」借鑒了人類工程師輪班工作的模式。這套架構的核心思想是將代理的工作流程結構化,並強制其將所有狀態和進度持久化寫入外部系統。這構成了一個精妙的雙代理系統:

1. 初始化代理(Initializer Agent)


初始化代理僅在專案開始時運行一次,其職責在於為整個專案建立一個標準化、結構化的工作環境。它像一位經驗豐富的專案經理,在專案啟動之初就規劃好藍圖、設置好工具、並建立明確的溝通機制。其關鍵產出物(Artifacts)包括:init.sh:一個自動化腳本,用於安裝依賴、啟動開發伺服器等,確保每次編碼代理啟動時,開發環境都能保持一致且隨時可用。這就像亞伯拉罕·林肯(Abraham Lincoln)那句名言所強調的:「給我六小時砍一棵樹,我會花前四小時磨利斧頭。」充分的準備是成功的基石。

claude-progress.txt:
一個詳細的進度日誌,記錄了代理的思考過程、已完成的步驟以及後續計劃。它作為不同代理實例之間重要的「交接日誌」,確保知識的傳遞。

feature_list.json:
一份將龐大任務分解為數百個可管理子任務的詳細功能列表。所有功能的初始狀態都被標記為「failing」(測試失敗),迫使代理以測試驅動開發(TDD)的思維模式前進。

Git Repository:
建立一個初始的 Git 程式碼倉庫並進行首次提交,為後續的版本控制和進度追蹤奠定基礎。

2. 編碼代理(Coding Agent)


編碼代理是實際執行開發工作的核心。在每個後續的會話中,它都嚴格遵循一套標準作業程序(SOP),以實現增量式的開發進度:情境定位(Getting up to speed):啟動時,編碼代理首先會閱讀 init.sh、claude-progress.txt 和 git log,以快速理解當前專案的狀態和最近的變更。這就像工程師上班後,首先檢查日誌、閱讀最新的提交訊息,以了解前一個班次的工作進度。

任務選擇:代理會讀取 feature_list.json,選擇一個狀態仍為「failing」的高優先級功能來處理。這種明確的、單一的目標設定,有效地避免了「One-shotting」的傾向。

增量開發(Incremental Development):代理會專注於實現這一個選定的功能,避免同時處理多個任務,確保每個步驟都是可控且可驗證的。

自我驗證(Self-Verification):為了確保功能的正確性,代理會利用如 Puppeteer(透過 Anthropic 的 MCP 協議)等瀏覽器自動化工具進行端到端(End-to-End)測試,模擬真實用戶操作,確認功能不僅能運行,而且 UI/UX 也符合預期。這超越了簡單的單元測試,提供了一個更全面的驗證機制。

狀態持久化(State Persistence):完成並測試通過後,代理會執行以下關鍵操作:Git Commit:將程式碼變更提交到 Git,並撰寫詳細的提交訊息,為版本歷史留下清晰的記錄。
更新進度日誌,在 claude-progress.txt 中記錄已完成的工作,供下一個代理實例參考。
更新功能列表,將 feature_list.json 中對應功能的狀態從「failing」修改為「passing」。
核心設計理念,工程化AI的自主性

Anthropic 的這項研究不僅提供了一個實用的解決方案,更揭示了構建可靠AI代理背後的深層次設計理念:狀態的具象化(Reification of State):此架構的核心是將代理腦中的抽象「專案進度」轉化為外部、持久化、機器可讀的文件(JSON、TXT、Git Log)。這有效地解決了模型本身的無狀態(Stateless)問題。值得一提的是,研究團隊選擇 JSON 而非 Markdown 來儲存功能列表,是因為其嚴格的語法結構能有效防止模型在編輯時意外破壞格式。

類測試驅動開發(TDD-like Workflow):
透過預先生成包含數百個「failing」測試的功能列表,系統強制代理進入「紅燈(失敗) -> 綠燈(通過) -> 重構」的循環。這為代理提供了清晰、單一的目標,有效防止了其「過早宣告完成」的傾向,並引導其有條不紊地推進開發。

標準作業程序(SOP)的重要性:
為編碼代理定義一套嚴格的啟動和結束流程,如同為AI員工制定了詳盡的工作手冊。這確保了不同代理實例之間行為的一致性和可預測性。在複雜的長期任務中,標準化流程對於維護秩序和效率至關重要。

環境即上下文(Environment as Context):
對於長週期任務而言,最有價值的上下文並非將數千行的對話歷史塞入 Prompt,而是提供一個結構化、自我解釋的工作環境。代理透過讀取文件和日誌來獲取上下文,遠比依賴有限的記憶體更高效。

工具使用與自我驗證:
強調代理必須具備使用外部工具(如 Puppeteer)來驗證其工作成果的能力。這超越了簡單的程式碼生成,邁向了更高階的自主解決問題能力,讓代理能夠像人類工程師一樣,不僅能「寫」也能「測」。

未來方向與對開發者的啟示


Anthropic 指出,當前的架構主要圍繞一個通用的編碼代理。未來的研究方向包括:多代理協作(Multi-Agent Systems):探索使用專門化代理團隊,例如由負責編寫和執行測試的「測試代理」、驗證功能是否符合需求的「QA代理」、以及專門清理和優化程式碼的「重構代理」共同協作。這呼應了亞里士多德(Aristotle)的哲學思想:「整體大於部分之和。」透過分工協作,AI系統的整體效能有望超越單一通用代理的極限。

領域泛化(Domain Generalization):將這套在 Web 開發中驗證成功的框架,應用到其他需要長週期思考和執行的領域,如科學研究、金融建模、法律文件分析等,拓寬其應用場景。

這項研究為構建實用、可靠的AI代理系統提供了清晰的藍圖。它證明了當前階段的關鍵突破口不在於等待一個擁有無限上下文的「超級模型」,而在於設計精良的系統工程和流程控制。通過為AI代理建立類似於人類最佳實踐的 Scaffolding,開發者可以讓現有模型的能力在複雜、長期的任務中得到極大擴展,使其表現遠超單次交互的極限。這不僅是技術上的飛躍,更是AI系統設計理念的一次深刻變革。


留言

這個網誌中的熱門文章

Vibe Coding:為什麼 Junior 更快上手?Senior 要如何追趕?

現象層面(市場觀察) 最近有篇文章討論 junior & senior 開發者在 AI 時代的角色轉變,非常熱門。 身為 Cympack 產品開發團隊 ,我們也一直關注這個議題,在閱讀這篇文章時觀察到一些有趣的現象,對我們來說,這正好反映出 AI 正在改變開發生態,junior 借力 AI 快速成長、senior 則需要在 「架構思維」 與 「多 agent 協作」 中找到新定位,其中有些啟發(insight) 可以跟大家分享。 為什麼 Junior 更容易上手 vibe coding? 心智負擔低 → Junior 沒有太多傳統 code workflow 的框架包袱 敢於嘗鮮 → Gen Z / 年輕工程師天生習慣用 prompt-based 工具、跟 LLM 互動 少「優雅程式設計」的束縛 → 不太糾結「這樣寫會不會不夠優雅」,反而 embrace 快速迭代、快速出成果 反觀 Senior: 熟悉大型系統設計 有豐富的「工程正統流程」知識(架構設計、測試策略、效能優化、設計模式) 對 AI 生成 code 的品質 / 維護性通常比較保留 部分 10+ 年資深工程師,對 prompt engineering 沒那麼熟練,還在觀望 技能面(未來的關鍵能力) Vibe coding 本質上 = prompt engineering + AI co-pilot 管理能力 能力項目 誰目前比較有優勢? Prompt 撰寫 / AI 互動 Junior 較強(熟悉 chat-based 流程) 系統設計 / 架構把關 Senior 較強 AI 生成 code 驗證 / Bug 察覺能力 Senior 較強(能看出潛在問題) 快速疊代 / Hackathon 式開發 Junior 較強 長期維護性 / 穩定性 Senior 較強 總結 Junior 確實更快適應 vibe coding,並且更習慣以 「chat-based coding」 的工作流開發。 Senior 擁有驗證 AI 產物與系統設計的深度能力,但若不主動練習 vibe coding,長期會逐漸落後於新一波開發潮流。 就如同在 GAI 技術年會分享,希望帶給各位的感受, 『與 AI 協...

Vibe Coding 協作到自建 Dev Agent?從 Claude / Codex 到 OpenHands

過去一年,越來越多工程師開始 把 AI 真正帶進工作流程 。從一開始用 ChatGPT、Claude 來問語法問題,到後來很多人愛上 Cursor,直接在編輯器裡讓 AI 幫忙改 code、補 test case、甚至自動整理 PR。這樣的開發體驗,已經大大改變了我們寫程式的方式。 更現實的是,在很多企業內部、政府單位、或涉及機密資料的專案裡, 其實根本不能直接用 Cursor 或雲端 LLM 工具。   畢竟這些服務通常會把資料傳到雲端模型做處理,萬一專案裡有未公開的技術、敏感客戶資料,或是受限於法規 (像金融、醫療、政府標案) ,直接用雲端 AI 工具就會踩 紅線 。  因此,許多團隊反而更希望 「自己架一套 Dev Agent」 ,可以在內網執行,資料完全掌握在自己手上,該整合的內部工具、該讀的私有 repo、該串的 CI/CD pipeline,全部客製化、安全可控。 這時候,像 OpenHands 這樣的開源 Dev Agent 框架就特別有價值。它的出發點不是單純的 AI 助手,而是讓你能夠打造出一個真的可以跑在自己環境裡、可以理解整個開發流程的 AI 工程師。從建置到部署,從 CLI 操作到瀏覽器查詢, 從多檔案編輯到自動測試,全部都能自己完成,甚至還能針對不同專案調整專屬的工作流。 對很多開始探索 AI 協作開發的團隊來說,這是一條 從 「AI 幫你寫一段程式」,走向「AI 幫你解決一整個任務」 的進化路徑。而且,還是在可控、可自定義、安全的環境裡完成的。 🧩 主要概述 OpenHands 是由 All‑Hands AI 開發的開源「軟體開發代理人平台」,能模仿人類工程師從建立程式、修改程式碼、執行指令,到瀏覽網頁、呼叫 API……等一整套開發流程 它提供雲端(OpenHands Cloud)與本地 Docker 運行版本,用戶能配置 LLM(如 Claude、OpenAI、Gemini…) 📚 核心特性與怎麼使用 代理人的工具能力 支援代碼編輯、命令行、執行環境、網頁瀏覽、API 呼叫—接近人類開發者完整技能。其中 OpenHands Cloud 版本提供 $50 試用額度讓大家方便使用,又或者如果自己本機有 docker 的話,可以自己Local 版本透過 Docker 自架環境。 ...

Google Gemini 全端 AI Agent 快速入門 - 打造「思考」的 AI 助理

一套從搜尋、反思到輸出的全端 AI 代理人範例,讓你看懂什麼叫 Research Agent 在 AI 工具百家爭鳴的今天,大家都在問一個問題: 「我能不能不只問 AI 答案,而是讓它像一位助理一樣,有流程、有反思、還有出處,真正幫我完成一件事?」 Google 最近釋出了一個相當具有指標意義的開源專案 gemini-fullstack-langgraph-quickstart ,正是為了解這個問題而誕生。 這套系統到底是什麼? 這個範例不是傳統 Chatbot,而是展示一個完整的 AI research agent : 它會根據使用者的提問,自動發想搜尋關鍵字、查資料、整合重點,最後給出答案還附上引用來源。背後的邏輯設計得非常扎實,不只是能跑,更是具備可讀性、可擴展性與可商用性。 它的流程大致如下:  1. 使用者輸入問題(例如:「抖音是否影響台灣選舉?」)  2. Gemini LLM 幫你想出關鍵字(不只是照抄問題)  3. 呼叫 Google Search API 抓資料   4. LangGraph 控制流程 → 判斷資料夠不夠 → 若不足,自動補查  5. 整合最終答案,並產生 citation(來源說明) 你可以想像這就像一位實習助理幫你寫報告, 不只輸出一段內容,而是會 去查、會判斷、會補資料,而且說明「我為什麼這樣說」 。 LangGraph 是什麼角色? LangGraph 就是整個 Agent 背後的控制系統 。 用白話講,它幫你定義 AI 每一步要幹嘛、遇到什麼狀況該走哪條路、要不要反思、要不要再查,甚至可以定義條件邏輯與資料流動。 這就不像寫一個單純的 Chat API,而是比較像「把一個流程圖變成可以跑的程式」。 對工程師來說,它提供了從 prompt 到流程控制的設計彈性;對產品設計來說,它讓 AI 有了 「多步驟任務執行」 的能力。 技術架構與使用方式 這整套系統是 Fullstack 架構,前後端都幫你整好了,技術選型也非常實用:   前端:Vite + React + TailwindCSS + Shadcn UI  後端:FastAPI + LangGraph...