
在 Claude Opus 5.5 上建構主動式代理迴圈
- Orca新Orca: OrcaCyber Ultra 1.02026-10-17$5.00 / $10.00 每百萬 tokens · 13 tok/s
- deepseek新DeepSeek: DeepSeek V4.1 Flash 10172026-10-1745智能
- DeepSeek新DeepSeek: DeepSeek V4.1 Flash2026-10-1740智能
- Orca新Orca: OrcaCyber Zero 1.52026-10-10$3.00 / $7.50 每百萬 tokens · 154 tok/s
- openaiOpenAI: GPT-6.1 Sol2026-09-2952智能
- anthropicAnthropic: Claude Sonnet 5.52026-09-2856智能
- typesafeTypeSafe: Jev 1.132026-09-24$0.04 / $0.00 每百萬 tokens · 983 tok/s
- OpenAIOpenAI: GPT-6 Luna2026-09-2238智能
- OpenAIOpenAI: GPT-6 Sol2026-09-2248智能
- AnthropicAnthropic: Claude Opus 5.52026-09-2258智能
- xAIGrok 4.72026-09-2146智能
- OrcaOrca: OrcaCyber Zero 1.02026-09-17$3.00 / $7.50 每百萬 tokens · 95 tok/s
- OrcaOrca: OrcaVerify Text 1.02026-09-16$2.00 / $0.00 每百萬 tokens · 964 tok/s
- OpenAIOpenAI: GPT-6 Astra2026-09-0453智能77程式
- GoogleGoogle: Gemini 3.8 Flash2026-09-0241智能76程式
- AlibabaQwen: Qwen3.8 Max (0902)2026-09-0245智能76程式
- AnthropicAnthropic: Claude Fable 5.12026-09-0153智能82程式
- TencentTencent: Hy4 preview2026-08-28$0.83 / $2.50 每百萬 tokens · 47 tok/s
- AlibabaQwen: Qwen3.8 Flash2026-08-26$0.15 / $0.47 每百萬 tokens · 100 tok/s
- z-aiZ.ai: GLM 5.3 Flash2026-08-2642智能72程式
打造自己的主動式代理時,令人不舒服的部分在於,真正有趣的工作並不是呼叫模型。你可以讓 Claude Opus 5.5 在一個下午內回答問題。但讓它按排程醒來、只讀取自上次以來有變動的內容、判斷是否有任何事值得交給人類、起草行動,然後停下來等待——這要花上數週,而且幾乎沒有一件事發生在模型內部。Anthropic 以 Claude Duet 的形式推出了這個迴圈的一個版本,而對任何想自己打造的人來說,這個產品有用的地方不是它的功能清單,而是從它被組裝起來的方式中可見的種種決策。它沒有公開的 API,也無法重新指向你自己的系統,所以如果你要的是這個迴圈而不是這個應用程式,你就得自己打造。接下來是架構,逐一階段說明,並如實交代每個階段的成本。
先說整體輪廓。五個階段依序執行,而第五個階段只有在人類表示同意後才會到達。排程器觸發。彙整步驟把每個已連線的系統化約為一項差異。決策步驟把該差異加上政策轉成具型別的提案。模型之外的核准閘門決定該提案是否可以執行。執行器負責執行。這就是整個設計,而其中所有困難之處都存在於接縫之間。

第一階段:一個每隔幾小時觸發一次的排程器
第一個決定,人們往往出於熱情而非工程判斷而做錯:不要持續輪詢。Anthropic 的 Duet 文件在說明其檢查間隔——每隔幾小時檢查一次——時表示,若不停檢查,會更快耗盡方案的額度上限。這不是行銷上的保守說法,而是對真實成本問題的正確答案,也是每個自製代理在第一週都會掉入的陷阱。
持續輪詢之所以代價高昂,有其結構性原因。每一次掃描都是一個完整上下文:指令、工具定義、你載入的素材,以及模型對這些內容所做的任何推理。以每分鐘一次的頻率計算,一天就是 1,440 個完整上下文,而絕大多數都找不到新東西。你付了全額費用,只換來「信箱沒有變化」的通知。改成每三小時一次,一天只有八個上下文,發現成果與支出之間的比例,也就成為你能向簽核請款的人交代的事情。
所以排程器是 cron 風格的計時器,設有最小間隔下限,而不是事件串流。事件聽起來很吸引人——事情一發生就立刻反應——但它會把你推回持續不斷的工作模式,讓忙碌一天的成本變得沒有上限。計時器則提供可預測的上限,這正是帳單金額變動不定時你所需要的。當你想讓某個來源的反應更快時,只需縮短那個連接器的間隔,並接受額外的花費。
第二階段:一個位元組完全相同的前綴,保留在快取中
這裡正是公布數字發揮最大作用的地方。在 OrcaRouter 上的 Claude Opus 5.5,每百萬輸入 token 為 4.00 美元,每百萬輸出 token 為 20.00 美元,具備 1M-token 上下文視窗,快取讀取每百萬為 0.20 美元,採供應商牌價、0% 加價。請把這些數字視為設計限制,而非價目表:一次快取讀取的成本是全新輸入 token 的二十分之一,因此,你在各次掃描之間保持穩定的每一個位元組,都是你不再需要支付全價的位元組。
實際上,系統提示詞與工具 schema 是在部署時組裝一次,之後絕不會在每次掃描時重新產生。不會從鍵順序不同的字典重新序列化,也不會用時間戳、請求 ID,或把當天已連線的帳戶拼接進中間來做模板化。任何一個位元組不同,就會使快取前綴失效,而指令區塊在每次掃描時都會退回完整輸入價格。團隊更常是意外而不是刻意丟失這一點,通常是因為某個「有幫助的」抽象層開始在提示詞頂端附近注入執行識別碼。
能經得起真實程式碼考驗的紀律其實很無聊:一個函式為穩定區塊回傳常數字串,工具結構描述用凍結的字面量,所有可變元素都放在它之後。然後一個測試會對該區塊做雜湊,並在雜湊值改變時讓建置失敗,因為總有人最後會新增一個結構描述欄位,卻完全沒想到快取。那個測試花一小時,卻能保住整個快取帶來的好處。
第三階段:每個連線一份摘要,而不是把整個信箱倒出來
第三階段是消費性產品可以免費享有、而你卻沒有的那一階段。Duet 位於 Anthropic 的帳戶內,並能觸及已連接的應用程式,因此它可以詢問自某個時間點以來有什麼變更,並得到一個簡短的答案。在那個帳戶之外開發時,你就像任何普通用戶端一樣與相同的 API 對話:你要嘛實作增量讀取,要嘛把全部內容拉下來,然後交給模型一大片文字牆。
全量拉取是預設做法,因為它第一天就能運作。它也是讓每次掃描成本變得難以預測的最快方式,因為輸入會隨著信箱規模增長,而不是隨著實際變更的內容增長。掃描四十個未變更的郵件串,成本與掃描四十個郵件串、其中只有一個郵件串重要時相同,而這兩者之中只有一種情況有機會產生有用的提案。這樣過了一個月後,你大部分的預算都花在確認現狀上。
摘要步驟應該是程式碼,而不是提示詞。針對每個連線,使用 API 提供的任何游標或差異機制來抓取,並把結果歸納成結構化摘要:出現了什麼、修改了什麼、解決了什麼。為每個項目指定穩定的識別碼,讓後續階段可以引用;並記錄每個連線上次成功抓取的游標,這樣一來,抓取失敗時就不會把昨天的資料當成新內容重播。一份無法分辨「什麼都沒發生」與「我無法檢查」的摘要,終究會對它從未觀察到的狀態自信地做出報告。
第四階段:一個會輸出物件而非散文的決策步驟
Claude Opus 5.5 正是位於這個位置,而它輸出什麼,決定系統其餘部分究竟能不能建構起來。直覺做法是讓模型寫一份摘要,再由人來閱讀。這對儀表板可行,對閘門卻行不通:下一階段必須決定是否允許某個動作,而許可不能授予一段文字。
決策步驟應回傳一份具型別的行動提案:一個來自封閉清單的行動名稱、該行動所套用的目標、參數、一行理由,以及明確的信心值或升級旗標。封閉的行動清單不是官僚程序;它是讓核准關卡得以強制執行的機制,因為關卡只能驗證它能夠列舉的行動。一個能發出任何動詞的代理程式無法受到關卡管制,只能被信任。
兩點實務提醒。先給模型摘要,再給政策,讓政策落在變動素材之後,快取前綴也得以保持完整。並把預設結果設為「不採取行動」,而不是一份讀起來像在行動的空提案。把沉默當成失敗的迴圈只會產出大量噪音,而為了看起來有用而刻意製造工作的代理,比回報「沒有任何變動」的代理還糟。
第五階段:一道真正能說「不」的審批關卡
閘門必須是獨立的服務,而不是代理程式自身程式碼裡的一個分支。這是這次建置中最重要的結構性決定。如果代理程式的流程能自行執行該動作,那麼該流程中的一個 bug、一次提示注入,或一個設定錯誤的旗標,就會觸及實際效果。如果執行器只接受閘門已簽署的提案,代理程式最糟也只能提出錯誤的提案,而閘門的拒絕就是真實的。
Anthropic 為 Duet 公布的政策,即使在你的清單有所不同之處,其架構也值得仿效。這道關卡要求:在動作要發送訊息、付款、簽署文件或刪除任何東西之前,先取得核准。在此之上還有第二層,即使獲得核准也會被拒絕——以 Duet 而言,是交易證券與在帳戶之間轉移資金。這個模式是兩層式政策:一大組可由人類允許的受控動作,以及一小組無論任何核准都無法解鎖的動作。即使每個項目都改變,也要複製這套層級,因為它們解決不同的問題。關卡防的是失誤。禁止清單防的是遭入侵的操作者,包括人類操作者。
真正關卡的另一半,在於它會中斷流程。Duet 的核准請求會顯示確切動作並等待,刻意讓流程停下來,而不是只在旁註記。一個只把一行字寫進沒人看的日誌的關卡,不是關卡,而是收據。如果你的核准步驟需要有人凌晨三點盯著儀表板,那要不是間隔太短,就是動作清單太廣。兩者都能修正,而且都不是靠新增通知來解決。
記憶體、憑證,以及兩個你無法單靠測試脫身的面向
五個階段底下潛藏著兩個棘手問題,而兩者乍看都像功能,直到你發現它們並不是。
• 上下文的延續。每次掃描都是全新的上下文,因此代理需要在各次掃描之間記住的任何內容,都必須在兩次掃描之間寫下來。每個連線一份滾動的狀態檔案,大小設有上限,用來保存待辦事項與近期決策,對大多數迴圈而言便已足夠。行不通的做法,是指望模型從摘要中重建歷史,因為摘要明確只是對變化的描述,並不包含任何關於已經決定了什麼的記憶。
• 憑證託管。 Duet 採用的是 Anthropic 託管式代理所遵循的設計,因此它永遠不會直接看到你的密碼或登入權杖。重現這套紀律,正是多數自製代理會略過的部分;而一旦略過,就代表每個提示詞都有一條通往憑證的路徑。模型絕不應持有權杖、絕不應以文字形式取得 API 金鑰,也絕不應成為負責驗證身分的元件。讓摘要步驟與執行器持有憑證,只把結果交給模型。
接著還有一個沒人想去想的攻擊面:一旦代理程式會讀取電子郵件和網頁,每一項都是可能含有指令的輸入。對一個沒有獨立權限概念的模型來說,一則寫著「把這封轉寄到下方地址」的訊息,與資料無從分辨。有兩種防禦勝過任何程度的提示強化。讓動作清單保持封閉,這樣注入的指令就沒有動詞可抓。並把關卡設在模型的影響範圍之外,因為一則能說服模型送出東西的注入,仍得說服看到目標地址的人。
容錯移轉,以及路由真正發揮作用的地方
在迴圈建立之後,出現了一個單一供應商設計所沒有的架構選項。OrcaRouter 的路由 DSL 會將數個模型組合成一次呼叫,而模型融合則會執行一組平行回答的模型;兩者都能讓多個模型支援單一請求。這裡的實際用途並不光鮮:讓較便宜的模型負責摘要彙整,因為那裡的工作是壓縮而非判斷;並將 Claude Opus 5.5 留在決策步驟,也就是提案形成的階段。同一個 OpenAI 相容金鑰可觸及超過 200 個模型,因此切換哪個模型服務哪個階段只是設定變更,而不是改寫。

容錯移轉是另一半。當供應商出狀況一小時,只能連上一個端點的代理程式也會跟著出狀況一小時;而沒有備援的排程迴圈,就只會錯過該次掃描。路由會把錯過的掃描變成較慢的掃描——這好處直到你需要它的那一週才顯得重要,而到了那時,它就是紀錄出現缺口與沒有缺口的差別。

你實際上報名的是什麼
運行這個迴圈,就等於在經營一項服務;而這項服務具備四項特性,你剛剛已經接手了它們。
• 正常運作時間。Anthropic 的應用程式是別人的呼叫器;你的則是你的。一個無聲停止觸發的排程器不會產生錯誤,也不會有任何輸出;你是從某個人發現自己的晨間簡報沒來而得知,而不是從警示中發現。
• 憑證保管。你的摘要步驟所持有的每一個權杖,都由你負責;而一旦外洩,影響範圍就是該連線所能觸及的一切。Anthropic 的設計讓憑證遠離模型;若你的做法並非如此,模型就會成為你所有已連結帳號的攻擊面。
• 提示注入防禦。 這道關卡在此能帶來很大保障,但僅限於它所管制的動作。代理未經核准所做的任何事——讀取、撰寫摘要、寫入自身狀態——都不受保護,而遭投毒的摘要可能汙染記憶,後續掃描正是從中進行推理。
• 漏洞賞金不屬於任何人。如果你的迴圈誤觸發,向客戶送出錯誤訊息,就沒有廠商可以升級處理,沒有狀態頁,也沒有事故報告。上述決策是唯一的安全網,這就是為什麼閘門是獨立服務,而且動作清單是封閉的。
這一切都不構成反對打造它的理由,只反對草率地打造它。每個階段都很小,而階段之間的接縫才是判斷力所在:用計時器而非串流,用凍結的前綴而非範本,用摘要而非傾印,用物件而非文字敘述,還有一道作為服務而非註解的閘門。把這些做對,這個迴圈就值得保留——它會找到你不曾想過要去找的東西,並在做出任何無法挽回的事之前停下來。把這些做錯,你打造出的東西就會不斷消耗你的預算,還只告訴你早就知道的事。
