兩天前,OSOP 只能驗證工作流程。 你可以寫一個 .osop 檔案、對照 JSON Schema 檢查、渲染圖表 — 但你不能執行它。執行器只是一個回傳模擬資料的佔位符。4 月 1 日我們決定改變這一切。48 小時後,osop run 可以執行真正的工作流程 — 具備條件邊、備援路徑、安全閘門、成本控制,以及會呼叫真實 LLM 的 Agent 節點。
這是那次衝刺的故事 — 我們建了什麼、為什麼需要每一部分,以及我們從執行 AI Agent 工作流程中學到了什麼。
我們建了什麼
執行器需要處理 OSOP 規格承諾的一切。這意味著 48 小時內要完成六大功能:
- WorkflowContext — 節點間資料流。每個節點從上游節點讀取輸入,為下游節點寫入輸出。一個共享的 context 物件在整個執行過程中傳遞狀態。
- 條件邊 — 邊可以有引用節點輸出的 when: 表達式。執行器在執行時期評估這些表達式來決定走哪條路徑。
- 備援邊 — 如果節點失敗,執行器走備援邊而非崩潰。這實現了重試模式和優雅降級。
- 安全閘門(--allow-exec) — 執行 shell 指令的 CLI 節點需要明確啟用。沒有 --allow-exec,執行器拒絕執行。不會在生產環境意外 rm -rf。
- 成本控制(--max-cost) — 呼叫 LLM 的 Agent 節點會累積成本。執行器追蹤支出,若總額超過 --max-cost 限制就中止。
- Agent 節點 — type: agent 的節點會透過可插拔的客戶端實際呼叫 LLM。執行器傳遞節點的提示、收集回應,並在執行日誌中記錄 Token 使用量。
工作流程:條件邊與安全閘門
這是一個使用條件邊和安全閘門的真實工作流程。安全掃描節點產出一個判定,部署節點只在判定不是 danger 時才執行:
執行方式
osop run 指令遍歷工作流程圖、執行每個節點、評估邊的條件,並產出一個包含完整執行細節的 .osoplog.yaml 檔案:
$ osop run deploy-with-gates.osop.yaml \
--allow-exec \
--max-cost 2.00 \
--env KUBE_CONTEXT=staging
[executor] Walking graph: build -> test -> security_scan -> deploy
[build] npm run build OK 4.2s
[test] 36 passed, 0 failed OK 12.1s
[security] AI review (gpt-4o, $0.03) OK 3.8s
[security] Verdict: safe (score: 12/100)
[deploy] Approval gate: --allow-exec granted
[deploy] kubectl apply -f k8s/ OK 6.3s
Workflow COMPLETED in 26.4s
Cost: $0.03 (limit: $2.00)
Log written: deploy-with-gates.osoplog.yaml條件評估器
最困難的設計決策是條件評估器。邊的條件如 security_scan.output.verdict != 'danger' 需要在執行時期評估。顯而易見的方法 — eval() — 是安全災難。我們改為建構了一個簡單的表達式解析器。
評估器支援點記法屬性存取、字串和數字字面量、比較運算子(==、!=、>、<、>=、<=)和布林運算子(and、or、not)。它根據 WorkflowContext 解析引用,其中保存了所有節點輸出。沒有 eval()、沒有任意程式碼執行、沒有注入攻擊。整個評估器不到 120 行 Python。
架構
三個新模組驅動執行器:
execute.py— 圖遍歷器和節點分發器。解析執行順序、評估邊條件、執行每個節點、處理備援。llm_client.py— Agent 節點的可插拔 LLM 客戶端。支援 OpenAI 相容 API,具備模型選擇、Token 追蹤和成本計算。osoplog.py— 執行日誌寫入器。將每個節點的輸入、輸出、時間、狀態和 AI 中繼資料擷取到符合標準的 .osoplog.yaml 中。
測試
我們撰寫了 36 個執行器專用測試,涵蓋:
- 基本循序執行和節點間資料流
- 使用各種運算子和資料類型的條件邊評估
- 節點失敗時觸發備援邊
- 安全閘門強制執行和成本限制強制執行
下一步
執行器已在 osop v0.3.0 中上線。現在有 9 個 CLI 指令 — validate、run、render、test、report、optimize、import、export 和 risk-assess — 整個 CLI 共有 196 個測試通過。下一步:平行節點執行、串流輸出和 webhook 觸發。規格已支援所有這些;執行器只需趕上進度。
試試看: pip install osop && osop run your-workflow.osop.yaml --allow-exec