Workflow-Agent混合架构
核对日期:2026-05-09。
1. 定义与边界
Workflow-Agent 混合架构把稳定、可审计、合规要求高的路径交给代码 workflow,把开放性强、需要语言理解或动态工具选择的局部步骤交给 Agent。
Anthropic 将 workflow 定义为由预定义代码路径编排 LLM 和工具的系统,将 agent 定义为由 LLM 动态控制流程和工具使用的系统。混合架构的重点是明确两者边界,而不是追求“全自动”。
2. 为什么重要
企业生产系统通常需要稳定流程:权限校验、审批、写库、通知、回滚、审计。这些不适合完全交给模型动态决定。但流程中的某些环节,如摘要、分类、证据抽取、异常解释、方案建议,适合由 Agent 完成。
适用:
- 客服退款、理赔、采购审批、财务报销。
- 数据管道中需要 LLM 判断的局部步骤。
- 高风险动作必须经过确定性 gate。
不适用:
- 任务路径完全开放且探索性极强。
- 没有明确业务状态和审批规则。
3. 核心机制
原则:
- workflow 控制“是否能做、何时做、做完如何记录”。
- Agent 处理“如何理解、如何解释、如何生成候选方案”。
- 高风险副作用由 workflow 执行,不由模型自由执行。
4. 架构模式
| 模式 | Agent 位置 | 例子 |
|---|---|---|
| Agent as classifier | 入口分类,workflow 分支 | 工单分类、风险等级判断 |
| Agent as extractor | 从文本抽取结构化字段 | 合同条款、发票信息 |
| Agent as recommender | 生成候选动作,规则审批 | 退款建议、补偿建议 |
| Agent as exception handler | workflow 异常时解释和建议 | 自动化失败诊断 |
| Workflow as guardrail | Agent 每步都经过状态机 gate | 生产变更助手 |
5. 工程实现
def refund_workflow(ticket):
user = authenticate(ticket.user_id)
order = get_order(ticket.order_id)
facts = agent_extract_refund_facts(ticket.text, order)
validate_schema(facts)
risk = rules.evaluate_refund_risk(order, facts)
if risk.requires_human:
approval = request_approval(order, facts, risk)
if not approval.approved:
return close_case("rejected")
preview = agent_draft_customer_message(order, facts)
refund_id = commit_refund(order, facts.amount, idempotency_key=ticket.id)
audit_log(ticket, facts, risk, refund_id)
return preview
状态字段:
workflow_state:
status: awaiting_approval
agent_outputs:
extracted_facts_ref: facts_123
draft_ref: draft_456
rule_decisions:
risk_level: high
reason: amount_exceeds_threshold
audit:
trace_id: trace_abc
idempotency_key: ticket_789
6. 生产实践
- Agent 输出只作为候选事实或建议,进入 workflow 前必须 schema 校验。
- workflow 状态是事实源,Agent memory 不能替代业务数据库。
- 所有 commit 动作集中在确定性服务层。
- 为每个 Agent 步骤设置重试策略和 fallback。
- 对审批 UI 展示原文、抽取字段、风险理由和将执行的具体动作。
7. 常见反模式
- workflow 只是薄壳,实际权限和动作由 Agent 决定。
- Agent 输出未校验就写入业务系统。
- 同一状态在 workflow、Agent memory、前端三处各存一份且无主从。
- 失败后重新跑 Agent 导致重复扣款、重复发信。
- 人工审批只显示“是否批准”,不显示具体参数和证据。
8. 评测方法
- Workflow Completion Rate:流程是否按状态机正确完成。
- Agent Extraction Accuracy:字段抽取是否准确。
- Gate Effectiveness:高风险动作是否被正确拦截。
- Human Approval Quality:审批人是否能看到足够证据。
- Regression Tests:业务规则变更后旧案例是否保持预期。
9. 安全与治理
- 最小权限:Agent 步骤优先只读,写操作由 workflow commit。
- 防注入:用户文本和外部资料作为数据字段,不得修改 workflow 规则。
- 审计:保存 Agent 输出、规则判断、审批人、commit 参数。
- 补偿:对外部副作用定义撤销或人工处理流程。
10. 工程手册补充
10.1 控制流、状态流、工具流
Workflow-Agent 混合架构的原则是:确定性流程负责边界,Agent 负责不确定判断。
| 流 | 放在 Workflow | 放在 Agent |
|---|---|---|
| 控制流 | 状态转移、重试、超时、审批、补偿 | 对模糊输入做判断或生成候选 |
| 状态流 | 持久化 typed state、checkpoint、审计 | 临时上下文、候选解释、草稿 |
| 工具流 | 高风险写工具、支付、外发、生产变更 | 只读搜索、草稿生成、摘要 |
| 观测流 | 每个节点固定事件名和状态码 | LLM 输入输出、评分、拒绝原因 |
10.2 工程示例
nodes:
validate_request:
type: workflow
retry: none
classify_intent:
type: agent
output_schema: IntentDecision
max_tokens: 800
policy_gate:
type: workflow
deny_if:
- "risk == high and approval_id is null"
preview_action:
type: tool
side_effect: false
commit_action:
type: tool
side_effect: true
idempotency_key: "${run_id}:${action_id}"
失败恢复:
- Agent 节点输出不合 schema:重试一次,仍失败则进入人工队列。
- Workflow 节点失败:按确定性错误处理,不让 Agent 猜测系统状态。
- commit 节点超时:使用 idempotency key 查询外部状态,再决定补偿或继续。
- 用户中途修改目标:生成新 workflow run,旧 run 标记 superseded。
上线清单:
- 每个 Agent 节点都有输入 schema、输出 schema、最大预算和 fallback。
- 所有副作用工具都在 workflow 节点执行,并有幂等键。
- 端到端 trace 能看出“哪个判断来自模型,哪个动作来自代码”。
- 评测同时覆盖节点级准确率、流程完成率、人工审批命中率、补偿成功率。
11. 权威资料
- Anthropic, Building effective agents: https://www.anthropic.com/engineering/building-effective-agents
- LangGraph graph API: https://docs.langchain.com/oss/python/langgraph/graph-api
- AWS Step Functions documentation: https://aws.amazon.com/documentation-overview/step-functions/
- AWS Step Functions service integration patterns: https://docs.aws.amazon.com/step-functions/latest/dg/connect-to-resource.html
- OpenAI Agents SDK Guardrails: https://openai.github.io/openai-agents-python/guardrails/
- NIST AI RMF 1.0: https://www.nist.gov/publications/artificial-intelligence-risk-management-framework-ai-rmf-10