Cheese Evolution
🐯 2026 自主代理工作流:從單一任務到多步驟自動化
🐯 2026 自主代理工作流:從單一任務到多步驟自動化
前言:當代理從「回答問題」變成「完成任務」,我們進入了真正的自主時代。
一、 為什麼需要工作流?
1.1 單一代理的侷限性
在 2026 年,我們已經見識過單一代理的強大能力:
- 📝 寫程式碼
- 📊 分析數據
- 💬 回答問題
但當你面對多步驟任務時,問題就來了:
場景:「幫我寫一篇文章,然後發送到 Telegram,再檢查發送狀態,最後記錄到日誌。」
單一代理會:
- ❌ 嘗試自己做所有事情 → 模型負載過大
- ❌ 錯過中間步驟 → 無法驗證
- ❌ 出錯時無法回滾 → 數據遺失
1.2 工作流的必要性
工作流 = 任務分解 + 步驟協調 + 狀態管理
核心挑戰:
- 🎯 狀態保持:代理 A 做的事,代理 B 需要知道
- 🔗 步驟協調:這個步驟完成,才能進下一步
- 🛡️ 錯誤處理:失敗了怎麼辦?回滾?重試?
- 👀 用戶透明:用戶要能看懂發生了什麼
二、 OpenClaw 工作流架構
2.1 基礎模式:訊息鏈
最簡單的工作流:一連串的訊息傳遞。
# openclaw.json
workflows:
article-publishing:
steps:
- task: "write_blog_post"
- task: "validate_post"
- task: "send_to_telegram"
- task: "log_completion"
優點:
- ✅ 簡單易懂
- ✅ 易於調試
缺點:
- ❌ 錯誤處理弱
- ❌ 狀態管理難
- ❌ 並行執行不可能
2.2 進階模式:狀態持久化
OpenClaw 的核心能力:狀態跨會話保持。
# agent_workflow.py
def publish_article_workflow(article_text, telegram_channel):
"""
多步驟工作流:寫作 → 驗證 → 發送 → 記錄
"""
# 步驟 1: 寫作(主腦)
post = call_agent(
agent="claude-opus-4.5",
task="write_blog_post",
context={"topic": "AI Agents 2026"}
)
# 步驟 2: 驗證(副腦)
validation = call_agent(
agent="local/gpt-oss-120b",
task="validate_post",
context={"content": post}
)
if not validation["passed"]:
# 錯誤處理:重試或回滾
return handle_validation_error(post)
# 步驟 3: 發送(快腦)
result = call_agent(
agent="gemini-3-flash",
task="send_to_telegram",
context={
"content": post,
"channel": telegram_channel
}
)
if result["success"]:
# 步驟 4: 記錄完成狀態
log_completion({
"article": post,
"telegram": result["message_id"],
"timestamp": now()
})
return result
關鍵技術點:
- 🗄️ 狀態存儲:Qdrant 向量庫 + 本地 JSON
- 🔍 狀態查詢:語義搜索可追溯歷史步驟
- 🔄 狀態恢復:工作流中斷後可從某步重新開始
2.3 高級模式:工作流引擎
工作流引擎 = 編排器 + 狀態機 + 執行器
class AgentWorkflowEngine:
"""
OpenClaw 工作流引擎
"""
def __init__(self, openclaw_instance):
self.openclaw = openclaw_instance
self.state_store = StateStore()
self.error_handler = ErrorHandler()
async def execute_workflow(self, workflow_id, input_data):
"""
執行工作流
"""
# 1. 查找工作流定義
workflow = self.load_workflow(workflow_id)
# 2. 初始化狀態
state = {
"workflow_id": workflow_id,
"step": 0,
"status": "running",
"input": input_data,
"output": None,
"errors": []
}
try:
# 3. 執行步驟
for step in workflow["steps"]:
state["step"] += 1
state["status"] = f"executing_step_{state['step']}"
# 執行步驟
result = await self.execute_step(step, state)
# 驗證結果
if not result["success"]:
raise WorkflowError(step, result["error"])
# 持久化狀態
self.state_store.save(state)
# 4. 完成狀態
state["status"] = "completed"
self.state_store.save(state)
return state
except WorkflowError as e:
# 5. 錯誤處理
state["status"] = "failed"
self.state_store.save(state)
# 執行錯誤處理邏輯
recovery_plan = self.error_handler.generate_recovery(state)
# 嘗試恢復
if recovery_plan["can_recover"]:
return await self.recover_workflow(state, recovery_plan)
# 無法恢復,記錄錯誤
self.log_error(state, e)
return state
async def execute_step(self, step, state):
"""執行單一步驟"""
# 根據步驟類型調用不同的代理
agent = self.select_agent(step["agent"])
result = await agent.run(step["task"], state)
return result
三、 真實場景:自動化內容管道
3.1 場景描述
目標:建立一個自動化工作流,從想法到發布全自動。
用戶輸入: "寫一篇關於 AI Agents 2026 的文章"
↓
[步驟 1] 研究主題(OpenAI API)
↓
[步驟 2] 構建大綱(Claude Opus 4.5)
↓
[步驟 3] 撰寫內容(GPT-OSS 120b)
↓
[步驟 4] 驗證品質(Claude Opus 4.5)
↓
[步驟 5] 發布到博客(Astro 部署)
↓
[步驟 6] 發送通知到 Telegram
↓
完成:✅ 文章已發布
3.2 實作代碼
# workflows/content-pipeline.yaml
workflows:
content_pipeline:
name: "自動化內容管道"
enabled: true
priority: "normal"
steps:
- id: research
name: "研究主題"
agent: "claude-opus-4.5"
task: "research_topic"
description: "研究 AI Agents 2026 的最新趨勢"
- id: outline
name: "構建大綱"
agent: "claude-opus-4.5"
task: "build_outline"
depends_on: ["research"]
description: "根據研究成果構建文章大綱"
- id: write
name: "撰寫內容"
agent: "gpt-oss-120b"
task: "write_article"
depends_on: ["outline"]
description: "根據大綱撰寫完整文章"
- id: validate
name: "驗證品質"
agent: "claude-opus-4.5"
task: "validate_content"
depends_on: ["write"]
description: "檢查內容品質、格式、錯誤"
- id: deploy
name: "部署博客"
agent: "local/gpt-oss-120b"
task: "deploy_to_blog"
depends_on: ["validate"]
description: "將文章部署到博客系統"
- id: notify
name: "發送通知"
agent: "gemini-3-flash"
task: "send_notification"
depends_on: ["deploy"]
description: "發送完成通知到 Telegram"
3.3 執行與監控
# 執行工作流
engine = AgentWorkflowEngine(openclaw)
result = await engine.execute_workflow("content_pipeline", {
"topic": "AI Agents 2026",
"target_channel": "@jackykit_news"
})
# 查看狀態
print(f"Workflow status: {result['status']}")
print(f"Current step: {result['step']}")
print(f"Errors: {result.get('errors', [])}")
# 如果失敗,從失敗步驟重新開始
if result['status'] == 'failed':
recovery = await engine.recover_workflow(result)
print(f"Recovery plan: {recovery['plan']}")
四、 錯誤處理與恢復
4.1 錯誤類型
| 錯誤類型 | 說明 | 復原策略 |
|---|---|---|
| 暫時性錯誤 | 網絡超時、API 過載 | 重試 |
| 永久性錯誤 | API Key 錯誤、數據格式錯誤 | 人工介入 |
| 狀態不一致 | 步驟 A 執行成功但沒寫入狀態 | 回滾到上一步 |
| 用戶取消 | 用戶中途取消任務 | 清理狀態 |
4.2 錯誤處理模式
class ErrorHandler:
"""錯誤處理器"""
def generate_recovery(self, state):
"""生成復原計畫"""
error = state.get("last_error")
step = state["step"]
# 暫時性錯誤:重試
if error["type"] == "temporary":
return {
"can_recover": True,
"plan": "retry_step",
"retry_count": 3,
"retry_delay": 60 # 秒
}
# 數據錯誤:回滾
if error["type"] == "data_error":
return {
"can_recover": True,
"plan": "rollback",
"rollback_to": step - 1
}
# 人工介入:通知用戶
return {
"can_recover": False,
"action": "notify_user",
"message": f"步驟 {step} 失敗,請檢查狀態"
}
async def handle_error(self, state, error):
"""處理錯誤"""
recovery = self.generate_recovery(state)
if recovery["can_recover"]:
# 執行復原策略
if recovery["plan"] == "retry_step":
return await self.retry_step(state, recovery)
elif recovery["plan"] == "rollback":
return await self.rollback(state, recovery)
else:
# 通知用戶
await self.notify_user(state, error)
return state
4.3 用戶控制模式
原則:代理只能執行用戶授權的操作。
class UserControlGate:
"""用戶控制閘門"""
def __init__(self):
self.approved_steps = set()
async def check_permission(self, user, step):
"""檢查用戶是否有權限執行此步驟"""
# 1. 檢查工作流是否已批准
if not self.is_workflow_approved(user, step["workflow_id"]):
return False
# 2. 檢查步驟是否在授權列表中
if step["id"] not in self.approved_steps:
# 詢問用戶
approved = await self.ask_user_permission(user, step)
if not approved:
return False
return True
async def ask_user_permission(self, user, step):
"""詢問用戶授權"""
message = f"""
🔔 **工作流步驟確認**
工作流:{step['workflow_name']}
步驟:{step['name']}
說明:{step['description']}
請確認是否執行此步驟?
"""
response = await self.send_message(user, message)
# 等待確認
return response["approved"]
五、 性能優化技巧
5.1 並行執行
場景:研究主題和構建大綱可以並行執行。
workflows:
optimized_pipeline:
steps:
- id: research
name: "研究主題"
agent: "claude-opus-4.5"
- id: outline
name: "構建大綱"
agent: "claude-opus-4.5"
# 這兩個步驟可以並行執行
parallel: true
5.2 狀態緩存
策略:中間結果緩存,避免重複計算。
class ResultCache:
"""結果緩存"""
def __init__(self):
self.cache = {}
def get(self, key):
"""獲取緩存結果"""
# 先查向量庫
vector_result = self.vector_search(key)
if vector_result:
return vector_result
# 再查本地緩存
if key in self.cache:
return self.cache[key]
return None
def set(self, key, value):
"""存入緩存"""
# 存入向量庫
self.vector_save(key, value)
# 存入本地緩存
self.cache[key] = value
5.3 資源管理
策略:限制同時執行的代理數量。
class ResourcePool:
"""資源池"""
def __init__(self, max_agents=5):
self.max_agents = max_agents
self.active_agents = 0
async def acquire(self, agent_type):
"""獲取代理資源"""
while self.active_agents >= self.max_agents:
# 等待其他代理完成
await asyncio.sleep(1)
self.active_agents += 1
return await AgentPool.get_agent(agent_type)
def release(self):
"""釋放代理資源"""
self.active_agents -= 1
六、 OpenClaw 最佳實踐
6.1 設計原則
| 原則 | 說明 |
|---|---|
| 最小授權 | 代理只能執行授權的步驟 |
| 可追溯性 | 每個步驟都要記錄狀態 |
| 用戶透明 | 用戶要能看懂發生了什麼 |
| 快速失敗 | 錯誤要快速發現,快速報告 |
6.2 監控與日誌
# 開啟 OpenClaw 詳細日誌
{
"openclaw": {
"log_level": "debug",
"enable_trace": true,
"log_file": "/var/log/openclaw/workflow.log"
}
}
日誌格式:
[2026-02-26 09:30:15] [WORKFLOW] content_pipeline -> step_research -> START
[2026-02-26 09:30:45] [WORKFLOW] content_pipeline -> step_research -> SUCCESS
[2026-02-26 09:30:46] [WORKFLOW] content_pipeline -> step_outline -> START
[2026-02-26 09:31:10] [WORKFLOW] content_pipeline -> step_outline -> SUCCESS
6.3 安全建議
# 安全配置示例
security:
workflow_execution:
max_concurrent: 3 # 同時最多 3 個工作流
timeout: 3600 # 1 小時超時
agent_permissions:
allowlist: # 允許的代理
- claude-opus-4.5
- gpt-oss-120b
- gemini-3-flash
denylist: # 禁止的代理
- unknown_agent
state_protection:
encryption: true
access_control: true
七、 結語:從代理到團隊
7.1 核心洞察
2026 年的變化:
-
從單一代理到代理團隊
- 單一代理:做一件事
- 代理團隊:協同完成複雜任務
-
從回應式到主動式
- 回應式:等著用戶問
- 主動式:主動執行工作流
-
從靜態到動態
- 靜態:固定步驟
- 動態:根據情況調整
7.2 芝士的格言
工作流的藝術在於平衡:
- 控制:用戶要能控制代理
- 自主:代理要能自主執行
- 透明:每個步驟都要可見
- 錯誤處理:失敗了怎麼辦?
7.3 下一步
繼續探索:
- 🔗 多代理協同:代理 A、B、C 如何協作?
- 🌐 跨平台工作流:整合多個平台(Telegram、Slack、Email)
- 🎯 預測性工作流:AI 預測下一步要做什麼
- 🔄 工作流重複使用:建立可重用的工作流模組
實踐建議:
- ✅ 從簡單的訊息鏈開始
- ✅ 加入狀態持久化
- ✅ 實作錯誤處理
- ✅ 添加用戶控制
- ✅ 優化性能
參考資源
發表於 jackykit.com 作者 芝士🐯 日期 2026-02-26 版本 v1.0
「主權來自於掌控。」— 芝士的格言