收益:
- 将不断增加的复杂性从最简单的解决方案应用到代理
- 区分链接、路由和并行工作流程模式
- 将多步骤任务分解为计划-执行-验证循环
我们在上一个单元中建立了单车简单循环。实际工作通常需要多个步骤、多种工具,有时还需要做出分支决策:“查找本月晚些时候的订单,起草一封给客户的道歉电子邮件,为经理进行总结。”在本单元中,我们将介绍组织多步骤任务的模式、何时需要真正的代理以及计划-执行-验证周期。主要原则:需要多少复杂性就有多复杂。
从最简单的解决方案扩展到代理
并非每项任务都值得采用最复杂的解决方案。逐步提高复杂性,并止于最简单的适当解决方案:
- 单个调用:如果任务是通过单个模型调用(汇总、分类)解决的,则在此停止。
- 使用 RAG 进行单次调用:如果需要信息,请添加检索并再次进行单次调用。
- 固定工作流程:如果预先知道这些步骤,请手动对它们进行排序(代码流)。该模型在每个步骤中都会执行一项子作业,但顺序由您决定。
- 模型驱动代理:如果无法提前知道步骤,则模型决定调用哪个代理以及何时调用。最强大但最昂贵且风险最大的选择。
工作流和代理之间的区别至关重要:在工作流中,您编写控制流(可预测、可测试、便宜)。您将议程的控制权交给模型(灵活但不可预测)。大多数企业工作实际上是一个工作流程;真正的代理人相对较少。
提示:“我可以提前写出此任务的步骤吗?”问。如果你能编写它,就构建一个工作流程——更便宜、更安全、更可测试。但是,如果步骤根据输入而变化且无法预测,则需要代理。
三种基本工作流程模式
提示链接:一个步骤的输出是下一步的输入。 “生成草稿→编辑→格式化。”每一步都简单而专注;易于调试。
路由:首先对传入请求进行分类并将其发送给适当的专家。 “这个问题是技术问题、计费问题还是退款问题?” → 重定向到正确的子流。每条路径都通过自己的提示和工具进行了优化。
并行化:同时运行独立作业并组合结果。 “分别汇总 5 个文档,然后合并。”不仅速度快,而且每一件作品都受到充分关注。
图案
当
例子
被锁住的
步骤是连续且相关的
草稿→编辑→格式化
重定向
根据输入类型进行不同的处理
支持请求分类
平行
独立子作品
分别汇总多个文档
代理(循环)
步骤无法提前预测
开放式研究/修复
# 路由模式(概念)type = pattern.classify(request) # "return" | “技术”| “发票”如果游览==“返回”:答案= return_flow(请求)elif tur ==“技术”:答案=技术_流程(请求)否则:答案=发票_流程(请求)
计划-执行-验证周期
真实代理中的强大模式:制定模型计划,然后执行,然后验证。该模型将复杂的任务分解为子步骤,使用工具执行每个步骤,最后询问“我实现了目标吗?”他检查了一下。验证步骤以单独的、新鲜的外观捕获错误(“此输出是否满足任务?”)。
# 计划-执行-验证(概念)plan = model.uret("将此任务分解为步骤:" + task)for step in plan: result = agent_loop(step) # 使用工具执行check = model.uret("此输出满足任务吗?告诉我是否缺少任何内容:" + task + results)if check.missing: # 修正轮 ...
对于长时间任务,有两个好的做法:施加停止条件(最大步数——防止无限循环)和进度跟踪(让代理写下他正在做的事情,这样他就不会分心)。没有步数限制的智能体如果被卡住就会永远旋转,成本将会爆炸。
弱/强设计
弱(将所有事情都放在一个巨型代理身上):
说“完成复杂的事情”并使用无限的工具发布它。# 结果:不可预测的行为,无限循环的风险,高成本,# 无法调试。
强大(流量优先,仅在需要时代理,有限):
首先将作业划分为固定步骤(路由+链接)。仅在步骤未知的子任务中使用代理;添加步数限制、进度跟踪和验证回合。
三个迷你箱
案例 1 — 工作流代替代理。一个团队与一名自由代理人一起设置“处理支持请求”任务;有时,特工会转 15 步,走上错误的道路。步骤基本固定(分类→获取相关信息→撰写草稿→提交审批)。当我们切换到路由+链接工作流程时,一致性从 58% 提高到 96%,成本减半。
情况 2 — 并行增益。法务团队正在一一总结20份合同;总共花了4分钟。当我们切换到并行模式(全部同时进行,然后合并)时,时间减少到 25 秒,并且质量提高,因为每个摘要都受到充分关注。
情况 3 — 没有停止条件。一名调查人员不断地调用同样的两个工具,寻找他找不到的信息;一夜之间积累了大量成本。当最大 8 步限制和“如果你在 3 次尝试中找不到它,就说我不知道”规则被添加后,成本就得到了控制,并且诚实的“我找不到它”答案出现了。
常见错误
- 将一切委托给代理:如果步骤已知,工作流程会更便宜、更安全且可测试。
- 将工作流程与代理混合:您或模型负责控制吗?在没有明确这一点之前不要进行设计。
- 不设置停止条件:代理进入无限循环并累积成本。
- 没有进度跟踪:在长时间的任务中,代理会分心,再次做同样的工作。
- 跳过验证轮次:不正确但看似合理的输出未经检查地交付。
注意:药剂越自由,爆炸半径就越大。灵活性并不是免费的;每一个额外的自由都会增加不可预测性和风险。选择最窄的适当解决方案。
综上所述
- 在复杂性方面,“按需”原则适用:单次调用 → RAG → 工作流程 → 仅在确实必要时才代理。
- 在工作流程中,您编写控制流程(可预测);您将议程留给模型(灵活但有风险)。
- 三种基本模式:链接(顺序依赖)、路由(按类型分配)、并行(独立作业)。
- 真实代理使用计划-执行-验证循环、停止条件和进度跟踪。
- 随着灵活性的增加,不可预测性和成本也会增加;选择最窄的适当解决方案。
应用任务
从您自己的业务中选择一项多步骤任务(例如“准备和分发月度报告”)。 (1)你能提前写出这个任务的步骤吗?如果你可以编写它,请将其设计为工作流程(什么模式:链接/路由/并行?);如果您不能写信,请解释为什么需要代理人。 (2) 用方框箭头图画出您选择的设计。 (3) 如果代理:写下您将如何设置停止条件、进度跟踪和验证轮次。 (4) 列出使用“单一开发代理”执行相同任务的 3 种风险。
清单
- [ ] 我可以在“根据需要的复杂性”等级上选择正确的级别。
- [ ] 我可以区分工作流和代理之间的控制差异。
- [ ] 我可以将链接、路由和并行模式映射到适当的任务。
- [ ] 我可以在代理中设置计划-执行-验证周期、停止条件和进度跟踪。
- [ ] 我谨记,太多的灵活性会带来不可预测性和成本。