Agent 循環(Agent Loop)就是「請 AI 幫忙」和「醒來發現工作已完成」之間的差距。大多數人從未建立過一個,因為在前沿模型上迭代一百次,可是要花真金白銀的。
本文內容:用一張圖說明的循環模式、兩個精確的設定(Claude Code 和原始 API),以及讓 K3 成為循環機器的快取數學。
你的第一個循環今晚就能啟動,每次運轉成本約為 $0.39 美元。
以下是完整設定 👇
在深入之前, 我每天在 Telegram 頻道分享 AI 與 Vibe Coding 的相關筆記:https://t.me/zodchixquant 🧠

循環到底是什麼
撇開那些天花亂墜的術語,一個循環就是重複四個步驟:
1目標 → 嘗試 → 檢查 → (通過? 繼續 : 重試)2 ↑__________________________|
- 目標: 一個可衡量的終點,而不是一種感覺。例如「所有測試通過」、「頁面載入時間低於 1 秒」、「分數高於 90 分」
- 嘗試: 模型朝著目標進行一個單位的工作
- 檢查: 某個機制驗證結果是否符合目標。可以是測試套件、程式碼檢查工具,或是另一個模型
- 重複: 將檢查結果回饋,再次進行,直到達成目標或預算耗盡
就這樣。其他的一切(記憶、子 Agent、夜間執行)都只是這個循環的裝飾。
為什麼特別選 K3:循環經濟學
循環每次運轉都會重新讀取相同的上下文:程式碼庫、目標、歷史記錄。在多數模型上,你必須為這種重複付出全額代價。但在 K3 上則不然:
1每次運轉成本 = 新 Token × $3/M + 快取 Token × $0.30/M23實際情況(800K 穩定上下文 + 每次運轉 50K 新 Token):4K3: $0.24 + $0.15 = $0.39/次5Fable 5: 850K × $10/M = $8.50/次
一個 50 次運轉的夜間循環:在 K3 上約需 $20 美元,在 Fable 5 上約需 $425 美元。這不是折扣,而是「放手讓它跑」和「得全程緊盯」之間的差別。
唯一規則:每次運轉都將你的穩定上下文作為完全相同的前綴,任務放在最後,這樣快取才會實際生效。

設定 A:Claude Code(5 分鐘快速路徑)
如果你慣用 Claude Code,循環功能已內建,K3 可以透過 Moonshot 的官方設定配置在底層:
1export ANTHROPIC_BASE_URL=https://api.moonshot.ai/anthropic2export ANTHROPIC_AUTH_TOKEN=${YOUR_MOONSHOT_API_KEY}3export ANTHROPIC_MODEL=kimi-k34export ANTHROPIC_DEFAULT_OPUS_MODEL=kimi-k35export ANTHROPIC_DEFAULT_SONNET_MODEL=kimi-k36export ANTHROPIC_DEFAULT_HAIKU_MODEL=kimi-k37export CLAUDE_CODE_SUBAGENT_MODEL=kimi-k38export ENABLE_TOOL_SEARCH=false9export CLAUDE_CODE_AUTO_COMPACT_WINDOW=104857610claude
然後循環只需要兩個指令:
- /goal 設定終點:「tests/ 中的所有測試通過,且程式碼覆蓋率維持在 80% 以上」。Claude Code 會持續朝著這個目標努力,而不是在得到第一個答案後就停下來
- /loop 讓它循環執行:對話會按照排程或直到目標達成前,持續重新執行
透過 /status 確認你正在使用 K3(/model 選單不會顯示)。設定中的 1M 自動壓縮視窗,意味著長時間的循環很少需要壓縮,這能讓迭代歷史記錄保持活躍。
設定 B:原始 API 循環(完全控制)
對於 Claude Code 之外的循環,這裡提供一個完整的極簡循環,相容於 OpenAI:
1from openai import OpenAI23client = OpenAI(4 api_key=MOONSHOT_API_KEY,5 base_url="https://api.moonshot.ai/v1",6)78# 穩定前綴:每次運轉完全相同 = 以 $0.30/M 的價格命中快取9STABLE = f"""你是一個處於循環中的程式碼 Agent。10目標:讓下面專案中的所有測試通過。11專案:12{project_dump}13規則:14- 每次運轉專注於一個變更15- 用 2 行說明你改了什麼以及為什麼16- 如果測試通過,請精確回覆:GOAL_REACHED17"""1819history = []20MAX_TURNS = 302122for turn in range(MAX_TURNS):23 result = run_tests() # 你的檢查:pytest, npm test 等24 if result.passed:25 print(f"在 {turn} 次運轉後完成")26 break2728 response = client.chat.completions.create(29 model="kimi-k3",30 messages=[31 {"role": "system", "content": STABLE},32 *history[-6:], # 最後 3 輪對話,限制長度33 {"role": "user", "content":34 f"第 {turn} 次運轉。測試輸出:\n{result.output}\n"35 f"修復下一個失敗。"},36 ],37 )38 change = response.choices[0].message.content39 apply_change(change) # 寫入編輯,提交到一個分支40 history += [41 {"role": "user", "content": f"已提供第 {turn} 次運轉的測試輸出"},42 {"role": "assistant", "content": change},43 ]
三個關鍵細節:
- 檢查是程式碼,不是感覺。 run_tests() 決定進度,模型從不自我評分
- 歷史記錄是有限制的。 僅保留最後 3 輪對話;穩定前綴承載了持久的上下文,並保持快取友好
- 每次變更都提交到一個分支。 循環可以錯 10 次,只要主分支不受影響即可
在你放手前,先設定安全機制
- 預算停止: 計算每次運轉的 Token 數量,在達到某個美元上限時終止循環。僅靠 MAX_TURNS 是不夠的,一次膨脹的運轉可能會消耗掉比十次正常運轉更多的資源
- 進度停止: 如果同一個測試連續 3 次運轉都失敗,就暫停並標記。無法收斂的循環只會禮貌地燒錢
- 一個 K3 的注意事項: 推理目前僅以最大模式運行,因此每次運轉都會以 $15/M 的價格產生完整的思考輸出。保持每次運轉的目標明確,每次只處理一個失敗,輸出端就能保持合理
常見錯誤
- 目標模糊。 「改善程式碼」這樣的目標會讓循環永遠跑下去。循環的價值取決於其終點是否可被驗證
- 讓模型自我評分。 「看起來是對的」正是循環產出垃圾的原因。檢查者必須是外部的:測試、程式碼檢查工具,或帶有評分標準的第二個模型
- 破壞快取。 前綴中的時間戳記、隨機 ID 或重新排序的檔案,會導致每次運轉都以 $3/M 而不是 $0.30/M 計費。完全相同,就意味著完全相同
- 沒有分支紀律。 一個無監督的循環若擁有對主分支的寫入權限,就是一場加了更多步驟的恐怖故事
- 直接開始夜間執行。 先在你監控下運行你的第一個循環,10-15 次運轉。在你能放心睡覺之前,先贏得信任
15 分鐘設定
- 取得一個 Moonshot API 金鑰,在 10-30% 的加值獎勵期內充值,有效期至 8 月 11 日(3 分鐘)
- 選擇設定 A 或 B 並完成配置(5 分鐘)
- 為一個真實的小任務設定一個可驗證的目標:一個失敗的測試、一次程式碼檢查通過(2 分鐘)
- 在監督下運行 10 次運轉,觀察檢查如何驅動工作(4 分鐘)
- 記錄成本。然後決定下一個循環的規模可以有多大(1 分鐘)
循環是程式設計中最古老的概念,應用於最新的工具上。K3 只是讓它變得足夠便宜,讓你可以實際使用。
感謝閱讀!
我每天在 Telegram 頻道分享 AI 與 Vibe Coding 的相關筆記:https://t.me/zodchixquant 🧠






