因素08:掌控控制流
大约 2 分钟
因素08:掌控控制流
来源:12-Factor Agents / Factor 8(Own your control flow)
一句话先懂
控制流(循环、分支、暂停、重试、升级)必须由确定性代码掌控,不能交给模型随意决定。
奶奶版理解
导航会建议“右转”,但方向盘和刹车必须在你手里。
遇到施工、堵车、危险路段,你得自己决定绕路还是停车。
原文核心观点
- 模型可以建议“下一步”。
- 程序必须决定“何时继续、何时中断、何时人工接管”。
- 尤其在高风险工具执行前,要允许人工审查。
一种可用控制流模板
while True:
step = llm_decide(thread)
if step.intent in ["request_human_input", "wait_external"]:
save_thread(thread)
notify(step)
break
if step.intent == "fetch_data":
result = fetch_data(step)
append_event("fetch_data_result", result)
continue
if step.intent == "deploy_production":
request_approval(step)
save_thread(thread)
break关键设计点
- 定义可中断节点(human, long task, high risk)。
- 定义重试预算(次数、间隔、是否降级)。
- 定义升级策略(转人工、转只读模式、终止并告警)。
- 定义最大循环步数,防止跑飞。
常见误区
- 默认无限 loop,无步数上限。
- 所有错误都自动重试,不做分类。
- 高风险动作没有“选择后执行前”审查窗口。
我的思考
这条是系统安全阀。
如果把控制流都让模型“自由发挥”,你会得到看似聪明但不可预测的系统。
我建议:
- 模型做策略建议
- 控制流做硬边界
两者结合才能既灵活又稳。
小结
- 控制流是工程资产,不是模型资产。
- 可中断、可恢复、可升级是生产必需品。
- 没有控制流,就没有真正可控的 agent。
