簡介:人人想要的代理,但少了炒作
關於編碼代理,大多數都試圖成為你的老闆、你的副駕駛和你的治療師——然後忘記了只是編寫程式碼。劇本是這樣的:新增一打向量儲存,撒上一些協調精靈粉塵,綁定一個瀏覽器,然後就收工了。它的演示效果很好。但當你要求它在星期五下午 4:52 修復一個不穩定的整合測試時,它就會崩潰。
如果停止追逐通用軟體管家的夢想,而只是構建一個讀取程式碼、規劃、編輯、執行和重複的工具,那麼使用 Claude 4.5 構建一個輕量級編碼代理實際上很簡單,這令人驚訝。沒有關於「AI 取代開發人員」的說教。沒有魯布·戈德堡管道。只是一個緊密的迴圈,可以很好地完成顯而易見的事情。
這是一個關於如何在不拖累整個 AI 運營部門的情況下實現目標的操作指南。我們將使用 Claude 4.5 作為大腦,檔案系統和 shell 作為手,以及少量記憶體來實現短期關注。就是這樣。輕量級意味著你可以在一次坐下來就能理解它,在本地運行它,並信任它,因為每個步驟都是可檢查的。如果你最近使用過這個領域的任何東西,這幾乎具有顛覆性。
為什麼 Claude 4.5 適用於最小代理
Claude 4.5 具有你真正想要的程式碼氣質:仔細遵循指令,在閱讀差異方面出奇地不錯,並且不太渴望虛構你沒有要求的框架。該模型能夠逐步推理,而無需整篇提示小說。推理加上約束的結合使其成為編碼代理迴圈的理想選擇:
你可以將其附加到任何儲存庫,並在一個下午獲得價值。訣竅是抵制將其變成「AI 平台」的衝動。如果你保持代理輕量級,Claude 4.5 會在不礙事的情況下完成繁重的工作。
輕量級架構:五個部分,沒有戲劇性
這是你需要的完整堆疊:
- 核心迴圈:一個呼叫 Claude 4.5 並解釋其工具使用訊息的進程。
- 工具:一小組——read_file、write_file、list_dir、run_tests(或 run_cmd)、search_code。
- 上下文構建器:使用儲存庫元數據和最近的差異組裝一個簡短而有針對性的提示。
- 短期記憶體:一個滾動的對話視窗加上一個用於計劃和約束的顯式草稿本。
- 保護措施:令牌、時間和檔案寫入限制;一個試運行模式;和回滾快照。
就是這樣。你可以在終端中以無頭模式運行它,或者在必要時將其封裝在最小的 UI 中。這樣做的原因是無聊的:每個動作都被觀察和驗證。代理提出一個變更,顯示差異,運行測試,讀取輸出,然後繼續或停止。中間沒有神秘的肉。
如何構建代理(而不會迷失方向)
步驟 1:定義合約——提示和工具
你的代理與其與模型的合約一樣好。保持系統提示簡短、嚴格且始終實用。
系統提示,已提煉:
- 你是一個編碼代理。你的工作是對儲存庫進行小的、正確的更改,以滿足使用者任務。
- 在隱藏的草稿本中大聲思考;僅向使用者公開計劃和差異。
工具模式(不要過度思考):
- read_file(path, offset?, length?)
- write_file(path, content, create_if_missing=false)
- run_cmd(command, timeout=60, cwd=repo_root)
- search_code(query, path=repo_root, max_results=50)
可選的便利功能:git_diff 和 git_revert(sha) 如果你想要免手動回滾。你可以跳過向量儲存;大多數有用的任務都取決於工作記憶體中的少量檔案加上快速搜尋。
步驟 2:保持上下文精簡
上下文填充是代理設計的貨物崇拜。不要將整個單體儲存庫轉儲到提示中。而是:
- 儲存庫摘要:一段 README 摘要;入口點;測試運行器命令。
- 活動檔案:僅代理計劃觸及的檔案——根據需要分塊讀取它們。
- 任務:使用者目標,措辭簡潔:「修復 tests/foo_test.py 中的失敗測試 FooTest.test_bar。」
- 約束:運行時限制、檔案寫入白名單、樣式規則和語義版本控制期望(如果適用)。
- 最近的歷史記錄:最後兩個差異及其測試結果。沒有其他。
Claude 4.5 完全能夠在需要時透過 search_code 和 read_file 獲取更多上下文。給它地圖,而不是領土。
步驟 3:迴圈(觀察 → 規劃 → 行動 → 反思)
- 觀察:首先列出目錄,讀取失敗的測試、被測程式碼和錯誤日誌。要求 Claude 總結兩到三個要點的失敗症狀。
- 規劃:讓 Claude 提出一個包含以下內容的計劃:
- 行動:透過 write_file 應用建議的差異。逐字顯示差異。運行測試。
- 反思:將 stdout/stderr 反饋回來。詢問 Claude:繼續、回滾或停止?如果計劃發生變化,則需要一句參考實際輸出的理由。
- 退出:當測試通過時停止,或在 N 次迭代後停止,以先到者為準。
這是光榮的配對程式設計,你在這裡實際上保持了配對的誠實性。
步驟 4:保護你的週末的保護措施
- 寫入白名單:僅允許在 src/、lib/ 或明確批准的路徑中寫入。
- 差異大小限制:將每個步驟的編輯限制為 200-500 行。如果更大,則拆分為子步驟。
- 命令允許列表:測試運行器、linter 和一些開發腳本。禁止網路。你想要可重現性,而不是狂野西部的 curl。
- 超時和重試:短暫的超時,最多一次重試——無休止的重新運行迴圈是代理走向死亡的地方。
- 試運行模式:列印建議的差異,但不寫入。非常適合程式碼審查。
如果你明確規定,Claude 4.5 將遵守規則。如果你不這樣做,當它試圖透過重新組織你的整個儲存庫以符合 2017 年的某篇部落格文章來「幫助」時,不要感到驚訝。
步驟 5:真正有用的記憶體
短期記憶體解決了 80% 的問題。保留:
這足以讓 Claude 4.5 進行連貫的推理。長期記憶體——任務日誌、嵌入——對於重複出現的程式碼庫可能很有用,但將其視為可選的糖。如果你的代理無法在沒有 500MB 向量索引的情況下修復測試,那麼它不是代理——它是一個依賴項。
最小實施草圖
用偽程式碼術語來說,你可以在幾百行中實現此代理:
- initialize: 載入儲存庫元數據、約束和模型客戶端
- plan = model.propose_plan(context)
- while not done and steps < MAX:
- diff = model.propose_patch(plan)
- show(diff); maybe approve
- out = run_cmd(plan.test_cmd)
- reflect = model.evaluate(out)
- if reflect == pass: done = true
- else if reflect == rollback: git_revert(last_commit)
- else: plan = model.revise_plan(out)
你會注意到缺少的部分:沒有管理代理的代理,沒有「委託」,沒有單獨的「規劃器模型」和「執行器模型」。如果你不使用魯布·戈德堡裝置來破壞它,Claude 4.5 可以很好地完成這兩項工作。
不要過度努力的提示
糟糕的提示試圖變得聰明。好的提示是無聊且具體的。這是你的核心指令區塊的一個明智的骨架:
- 樣式偏好:語言版本、格式化器、linter 規則。
- 流程:觀察 → 規劃 → 行動 → 反思;顯示差異;運行測試;迭代最多 N 個步驟;當測試通過時停止。
透過這種結構,Claude 4.5 不需要 100 行的角色扮演場景。它只是工作。
實際範例:修復失敗的測試
假設測試在 tests/time_test.py 中失敗,因為 parse_time("09:00") 返回 5400 而不是 32400。代理的迴圈應如下所示:
- 觀察:讀取 time.py 和 time_test.py;運行 pytest -k parse_time。
- 規劃:假設——秒與分鐘的數學錯誤;建議編輯 parse_time;新增單元邊緣案例。
- 行動:修補 parse_time,為前導零小時新增測試;運行測試。
- 反思:如果測試仍然失敗,讀取錯誤,調整數學或正則表達式,重新運行。
最小的成功修補可能是一個兩行的變更。這就是重點。小的編輯,快速的週期,真正的進展。
輕量級勝過大雜燴的地方
- 透明度:每個步驟都是可審計的。你可以對其進行差異比較,你可以還原它,你可以重新運行它。
- 控制:保護措施使損壞保持在本地。代理無法漫遊到你的基礎架構中。
- 使用者體驗:你理解它。你的隊友理解它。你未來的自己不會恨你。
以及權衡:
- 廣度:輕量級編碼代理不會在一次通過中重構你的五種語言單體儲存庫。它也不應該這樣做。
- 狀態性:在沒有大型記憶體層的情況下,它會按設計忘記遙遠的歷史。在它成為錯誤之前,這是一個功能。
Claude 4.5 的編碼代理最佳位置
Claude 4.5 在以下方面表現出色:
它不太擅長:
最後一點很重要。獲得強大結果的最佳方法不是讓代理變得更大——而是讓任務變得更小。使用你的大腦進行範圍界定,並使用 Claude 4.5 在該範圍內執行。
關於 IDE 整合的說明
抵制將其直接烘烤到具有五十個切換的 IDE 窗格中的衝動。具有純文字差異的基於終端的迴圈更容易信任和調試。如果你想要編輯器糖,請保持其簡單:
你可以稍後整合。首先,使其工作。
如果你想要一個務實的環境來運行這種迴圈,而無需重新發明支架,那麼 Sider.AI 實際上可以工作——至少當你將其用於它擅長的事情時。它可以保持對話和差異的整潔,讓你運行命令,並且不會強迫你使用一些宏偉的「自主代理框架」。訣竅是保持自己的規則:簡短的提示、緊密的迴圈、可見的差異。Sider 不會礙事,這比它應該的要罕見。 常見的陷阱(以及如何避免看起來很傻)
- 過多的上下文:如果你的提示讀起來像勒索信,那麼你就做錯了。按需獲取檔案。
- 過早的重構:代理建議重新組織模組?先讓它通過測試。稍後重構。
- 虛構的檔案:在任何寫入新路徑的 write_file 之前,都需要 list_dir 和 read_file。
- 無限的重新運行迴圈:限制步驟。要求為每個新假設提供理由。
- 一個巨大的差異:拆分變更。較小的差異失敗得更快,並且更容易推理。
沒有偏執的安全和保障
- 機密:代理不需要它們。如果命令需要令牌,請停止並詢問。
如何知道它正在工作
- 提前期縮短:過去需要一個小時的錯誤修復現在需要十分鐘。
- 你信任它:你停止盤旋在每個動作上,因為它沒有燒毀你。
- 團隊成員使用它:成功的定義是其他人在沒有會議的情況下採用它。
小心擴展
如果你真的必須擴展,請有紀律地進行:
- 並行子任務,而不是並行大腦:拆分工作,在單獨的目錄中運行多個輕量級迴圈,並在綠色時合併。
- 情節記憶,而不是大腦轉儲:儲存成功的修補程式和症狀到修復的映射。手術檢索。
- 定期「更大」的傳遞:保留人工引導的會話用於重構;代理協助,不領導。
最小參考實施(草圖)
用於移動的 Python 風格偽程式碼:
- def init(self, repo_root, model):
- self.history = [] # last two diffs and test outputs
- "repo": summarize_repo(self.root),
- "constraints": {"write_whitelist": ["src/", "tests/"], "max_diff_lines": 300, "no_network": True},
- "history": self.history[-2:],
- plan = self.model("propose_plan", self.context(task))
- diff = self.model("propose_patch", {"plan": plan})
- out = run_cmd(plan.test_cmd)
- eval = self.model("evaluate", {"output": out, "plan": plan})
- self.history.append({"diff": diff, "out": tail(out)})
以人為本的結局
該行業一直在承諾自主開發人員代理。我們真正需要的是一個誠實的助手,它可以讀取、規劃、編輯、運行和停止。Claude 4.5 擅長於此,前提是你不要將其埋在主要存在以證明自己的框架下。輕量級不是一種妥協——這是重點。構建迴圈,添加保護措施,並讓工具做工具在保持簡單時一直做的一件事:使工作更小。
結論:獲勝的無聊捷徑
這是使用 Claude 4.5 構建輕量級編碼代理的檢查表:
如果你眯著眼睛看,它看起來可疑地像優秀的軟體工程,只是更快。這就是妙語。你在這裡能做的最聰明的事情不是追求「自主性」——而是編纂紀律。你對代理的要求越少,你得到的就越多。
常見問題
Q1:如何開始使用 Claude 4.5 構建輕量級編碼代理?
定義一個小型的工具集(讀取、寫入、搜尋、運行),編寫一個嚴格的系統提示,並實施一個觀察 → 規劃 → 行動 → 反思迴圈。保持上下文小,並輸入真實的日誌和差異——當任務範圍窄且回饋具體時,Claude 4.5 的表現最佳。
Q2:我是否需要向量資料庫或記憶體層來構建 Claude 4.5 編碼代理?
不需要。對於大多數任務,短期記憶體加上 search_code 就足夠了。僅當你重複訪問相同的儲存庫並且可以證明它在不使代理變得更愚蠢的情況下節省令牌時,才新增長期記憶體。
Q3:對於 Claude 4.5 編碼代理,哪些保護措施是必不可少的?
將可寫入路徑列入白名單、限制差異大小、限制命令,並記錄每個動作。這些簡單的限制使代理保持可預測性,並使回滾變得無聊——以一種好的方式。
Q4:輕量級代理可以處理多檔案重構嗎?
是的,如果你將工作拆分為小步驟並保持迴圈緊密。Claude 4.5 可以管理重構,但你引導範圍;否則,你會得到一個你不想審閱的巨大、脆弱的差異。
Q5:Sider.AI 在 Claude 4.5 編碼代理中的位置是什麼?
Sider.AI 作為一個整潔的工作區很有用:對話、差異和命令都在一個地方,而無需強制使用重量級代理框架。使用它來運行你的迴圈,而不是重新發明它。