---
tags: [Agent架構, AI工程, 工作流]
date: 2026-06-12
read: false
source: "2026-06-12T092930+0800-The Plan Is Code Trying Out Claude Code's Dynamic Workflows.md"
original_title: "The Plan Is Code Trying Out Claude Code's Dynamic Workflows"
---
# The Plan Is Code: Trying Out Claude Code's Dynamic Workflows
原始來源與檔名:2026-06-12T092930+0800-The Plan Is Code Trying Out Claude Code's Dynamic Workflows.md
---
## NAPKIN | 餐巾纸
### 餐巾纸公式
> Orchestration Code = Parallel Agents + Typed Schemas + Multi-Lens Verification
_將編排邏輯寫成程式碼,透過嚴格的資料格式(Schema)串接並行運作的代理,並輔以多角度驗證來過濾雜訊。_
### 一句話
> Claude Code 的 Dynamic Workflows 揚棄了傳統基於對話上下文的代理協作,轉而由 AI 直接生成包含代理排程、Schema 驗證與多角度交叉驗證的「程式碼腳本」來實現大規模的自動化任務。
### 餐巾纸草图
```text
+----------------+ +-------------------+ +-------------------+
| Finders | ----> | Verifier Pipeline | ----> | Final Synthesizer |
| (Haiku Model) | Schema| (3 Lenses/Haiku) | Schema| (Opus Model) |
+----------------+ +-------------------+ +-------------------+
| | |
Generate Cross-Check Summarize
Candidates & Refute & Conclude
```
## ROUND 1: SKELETON | 骨架掃描
**"這篇文章在說什麼"**
* **核心問題**: 如何有效地組織並排程一組具有專業分工的 AI 代理 (Agents) 以完成複雜任務?
* **核心答案**: 將計畫轉為程式碼,透過動態生成的工作流腳本搭配嚴格的輸出格式 (Schema) 來排程並行代理。
* **論證結構**: 案例型(透過 3 萬個檔案的程式碼庫漏洞掃描案例拆解機制)
### 章節骨架
1. **Dynamic Workflows 介紹**: 從對話編排轉向程式碼編排。
2. **底層建構模塊**: agent, parallel, pipeline 的組合運用。
3. **腳本即編排器**: 無狀態的腳本控制代理的資料流向。
4. **實戰執行樣貌**: 資源傾斜於證偽而非發現。
5. **價值與適用場景**: 適合需廣泛掃描且可自動化評分的任務。
## ROUND 2: DISSECTION | 血肉解剖
**"憑什麼這麼說"**
### 論證鏈
```text
傳統對話式編排容易丟失上下文 --> 將編排邏輯轉化為獨立腳本,代理彼此隔離 --> 代理透過 Schema 輸出結構化資料回傳給腳本 --> 腳本利用 parallel/pipeline 進行分發與多角度驗證 --> 最終只匯總通過驗證的結果,實現高效大規模並行。
```
### 關鍵證據
1. **大型專案實測**: 針對 3 萬檔案的 codebase 耗時 32 分鐘,啟動 330 個子代理,消耗 2200 萬 Token,成功產出漏洞清單。
2. **Schema 強制規範**: 要求代理輸出布林值等結構化資料,讓編排腳本不需解析自然語言即可進行計數與邏輯過濾。
3. **多角度驗證機制 (Lenses)**: 1 個 Finder 搭配 3 個 Refuter (利用性、信任邊界、緩解措施) 進行交叉證偽,大幅過濾假警報。
### 隱形假設與邊界
* **隱形假設**:
* 便宜且快速的模型 (Haiku) 足以發現並判斷潛在的安全漏洞,最昂貴的模型 (Opus) 只需留給最後的總結。
* 安全漏洞可以透過局部代碼檢視來發現,不強烈依賴全域上下文。
* **邊界條件**:
* 當任務需要依賴橫跨整個代碼庫的深度上下文關聯時,這種孤立單一範圍的代理方法會失效。
* 無法介入正在運行的代理,缺乏 Human-in-the-loop 的微調機制。
## ROUND 3: SOUL | 靈魂提取
**"還能怎麼用"**
* **作者盲點**: 未深入探討如何建立具備「中斷與人工介入」機制的動態工作流;且過度依賴 Schema 可能限制模型表達複雜例外狀況的能力。
* **知識連接**: 這種 Pipeline 與並行處理模式,本質上就是 MapReduce 框架在 AI 代理時代的重現。
* **行動觸發**: 開發多智能體系統時,停止讓主控 Agent 處理所有上下文,改以撰寫調度腳本 (Orchestration Script),並嚴格定義 JSON/TypeScript Schema 介面。
### 跨域映射
* 在 **分散式系統**,這叫 **MapReduce** (將任務 Map 給 Finder,再由腳本 Reduce 其結果)。
* 在 **軟體工程**,這叫 **合約式設計 (Design by Contract)** (透過嚴格的 Schema 確保輸入與輸出符合預期)。
---
# The Plan Is Code: Trying Out Claude Code's Dynamic Workflows (Architectural Deep Dive)
## 前言/背景
隨著 AI 代理(Agents)技術的發展,如何有效編排多個具備專門職責的代理來完成複雜任務成為核心挑戰。本文探討了 Claude Code 推出的「動態工作流 (Dynamic Workflows)」,其核心理念是揚棄傳統基於「對話上下文 (Context Window)」的代理溝通模式,轉而由 AI 自動生成一段**包含代理協作迴圈的編排腳本 (Orchestration Script)**,以程式碼來精確控制資料流與執行順序,並以程式碼安全漏洞掃描為實戰案例進行剖析。
## 章節詳細總結
### 動態工作流的核心差異與建構模塊
傳統的多智能體編排通常依賴一個主控代理 (Orchestrator) 將各子代理的結果匯集在自己的上下文視窗中。當任務規模擴大時,主控代理往往會被龐大的協調訊息淹沒。
Dynamic Workflows 解決此問題的方式是**完全切斷代理之間的直接對話**。任務執行是由一個置中的腳本動態生成所需角色(如 Finder, Verifier, Fixer, Synthesizer),代理的執行結果會轉化為腳本中的**變數值 (Variables)**,而非聊天訊息。
其底層由三個核心 API 建構模塊組成:
* `agent()`:啟動單一子代理。可傳入 Prompt,並可透過定義 Schema 強制返回驗證過的結構化資料。
* `parallel()`:並行啟動多個代理,並具有「屏障 (Barrier)」特性,必須等待所有代理完成才返回結果。
* `pipeline()`:同樣是並行分發,但具有「資料流 (Flow)」特性,各節點不需互相等待,前一個項目的後續流程可先進行。系統底層限制最多同時運行 16 個代理,單次執行上限為 1000 個代理。
### Schema 即資料傳遞介面 (Schema as Interface)
讓上一個代理的輸出能穩定成為下一個代理輸入的關鍵,在於**強制使用 TypeScript Schema** 進行輸出驗證。例如在安全漏洞掃描中,驗證者 (Verifier) 的輸出被嚴格限制:
```typescript
const VERDICT_SCHEMA = {
type:'object', additionalProperties:false, required:['refuted','verdict','reason'],
properties:{
refuted:{ type:'boolean' },
verdict:{ type:'string', enum:['real','not-real','uncertain'] },
reason:{ type:'string' },
},
}
```
透過上述設定,代理無法回傳模糊的自然語言,必須明確給出布林值 `refuted` 及列舉型別的 `verdict`。這使得編排腳本只需計算 `refuted === false` 的數量,而無需進行任何自然語言處理。
### 腳本即編排器 (The Script is the Orchestrator)
在此架構中,腳本充當無狀態的排程器 (Scheduler),所有判斷與控制邏輯都是確定性的 (Deterministic),模型僅在 Worker 內部進行推理。
以核心掃描迴圈為例:
```typescript
const perArea = await pipeline(
AREAS,
area => agent(finderPrompt(area), { phase:'Scan', schema: FINDINGS_SCHEMA, agentType:'Explore' }),
(found, area) =>
Promise.all(found.findings.map(async f => {
const verdicts = await parallel(LENSES.map(lens => () =>
agent(refuterPrompt(f, lens), { phase:'Verify', schema: VERDICT_SCHEMA, agentType:'Explore' })
))
const survivedVotes = verdicts.filter(v => v.refuted === false).length
return { ...f, survived: survivedVotes >= 2 }
}))
)
```
這段代碼展示了架構決策:對每個程式碼區塊使用 `pipeline` 非同步啟動 Finder;發現潛在漏洞後,透過 `parallel` 啟動多個 Refuter 進行交叉驗證;最終以 `survivedVotes >= 2` (至少兩個 Refuter 無法證偽) 作為保留該漏洞的閾值。
### 資源分配策略與多角度證偽 (Multi-lens Verification)
在實戰案例中,系統展現了兩個重要的架構決策:
1. **模型降級策略 (Model Downgrading)**:23 個 Finder 與 306 個 Refuter 全數採用便宜且快速的 Haiku 模型進行大範圍平行處理,僅在最後的整合階段使用 Opus 模型。
2. **多視角對抗驗證 (Adversarial Lenses)**:賦予 Refuter 不同的「審查視角 (Lenses)」,例如:
* `exploitability`: 攻擊者控制的輸入能否真實觸發?
* `trust-boundary`: 污染的值是否真的跨越了信任邊界?
* `mitigations`: 是否有既有的防禦機制可中和此漏洞?
這種設計將大部分算力投入在「證偽 (Disproving)」而非「發現 (Finding)」,有效降低了偽陽性。102 個初步候選漏洞經過驗證後,最終僅保留了 23 個。
## 總結與結論
* **編排邏輯的程式碼化**:將計畫轉為腳本,不僅能納入版本控制,還能大幅減少主控節點的 Context 消耗與混亂,多智能體系統的瓶頸已從「聊天」轉移到「工作流設計」。
* **強型別邊界 (Strongly-typed Boundaries)**:透過 Schema 約束 Agent 輸出,將非結構化語言硬性轉化為結構化變數,是實現大規模可靠工作流的基礎。
* **分離「發現」與「證偽」的關注點**:利用低成本模型進行發散探索,並設計多視角 (Lenses) 的對抗性網路進行收斂與過濾,可控制成本並提升精確度。
* **全域上下文缺失的限制**:基於局部範圍與並行化所設計的工作流,在面對需要跨模組深度上下文理解的問題時存在先天盲點,架構師必須在設計階段認知到這種取捨。
Obsidian 整理
原始文章