1. 先区分:工作流与 Agent
工作流是预先定义好步骤与分支的程序:输入经过哪些处理、何时调用工具、失败后如何回退,通常都能在代码或图中明确看到。Agent 则让模型在更开放的循环中决定下一步动作,例如选择工具、根据结果再规划、直到满足终止条件。
两者没有高低之分。任务规则稳定、风险明确时,工作流往往更合适;任务路径难以预先枚举、需要在工具之间灵活探索时,才需要逐步引入 Agent 的自主性。
2. 一个可落地的分层方式
- 确定性层:权限校验、输入格式化、敏感操作拦截、结构化输出验证,都应由普通代码负责。
- 模型推理层:只把需要理解、归纳、生成或判断的部分交给模型,并提供足够具体的上下文。
- 工具执行层:为每个工具定义清晰的参数、超时、错误码与副作用边界。
- 观察与恢复层:记录请求、模型版本、工具调用、耗时和失败原因;对可重试操作设置有限次数重试。
3. 常用模式不是“框架”,而是控制复杂度的方法
- 提示链(Prompt chaining):将复杂目标拆成可验证的小步骤;每一步输出进入下一步前先做检查。
- 路由(Routing):先判断任务类型,再交给专门提示词、模型或工具链处理。
- 并行化:相互独立的检索、抽取或候选方案可并发执行,最后统一汇总。
- 评估器—优化器:当输出可被明确评价时,使用评价结果驱动有限轮修订,而不是无限循环。
4. 真正需要 Agent 时,先写好“刹车”
开放式循环的风险来自不确定的成本和副作用。上线前至少要明确:最大循环次数、单次任务预算、允许的工具白名单、人工审批点、终止条件,以及失败后的可恢复状态。
对写入数据、发送消息、创建订单、修改配置等高影响操作,应先生成计划或预览,再等待明确批准。让模型能“建议”,不等于让模型能“直接执行”。
5. 一份最小上线检查清单
- 是否可以先用单次模型调用或固定工作流完成?
- 每次工具调用是否有超时、日志、权限和错误处理?
- 关键输出是否有结构校验或业务规则校验?
- 是否记录了模型版本、输入摘要、输出与请求 ID?
- 是否可以在不丢失状态的情况下暂停、重试或人工介入?
可靠的 Agent 系统不是“让模型做更多决定”,而是把模型放到适合它做决定的位置,并为每一个不确定性保留可观测、可验证和可回退的边界。
参考资料
本文为原创学习整理,观点与模式参考 Anthropic Engineering 的 Building effective agents。建议阅读原文以获取完整示例与上下文。