5.1 工作流规划
介绍规划设计模式,以及如何通过提供工具集和LLM编写计划来构建高度自主的智能体。
5.1 工作流规划
就像复杂软件系统需要工厂模式、单例模式、依赖倒置等等设计模式和原则一样,Agent系统想要实现复杂度与效率并重,也需要一些设计模式。
本节我们将介绍规划 (Planning) 设计模式,规划模式的Agent系统高度自主,能够自行决定执行复杂任务所需的工具调用序列,而无需事先硬编码。
真实案例:客服助理Agnet
- 目标: 构建能够回答广泛、复杂查询的智能体,在运行时灵活地决定采取哪些行动。在本系统中,是一个能够回答客户像“你们有没有库存中售价低于100美元的圆形太阳眼镜?”这类复杂问题的Agent。
- 方法:
-
提供工具集: 给 LLM 提供一套功能工具。在本例中,是如下工具:
工具名 功能说明 示例用途 get_item_descriptions 获取商品的文字描述或元数据(如名称、款式、材质、颜色、形状等) 当用户说“round sunglasses”时,用它来查出所有带“round”特征的太阳眼镜 get_item_price 查询指定商品的价格 在找到商品后,用它来判断哪些低于 $100 check_inventory 检查商品是否有库存(以及库存数量) 找到圆形眼镜后,查询这些商品是否在库 check_past_transactions 查看用户的历史交易记录(如购买过哪些商品、是否退换货过) 用于客户支持场景,如“我上周买的眼镜有问题” process_item_sale 处理购买行为,即创建销售订单或执行购买交易 当用户确认要买时,调用这个工具执行交易 process_item_return 处理退货操作 当用户想退货时,用它发起退货请求 -
LLM 编写计划: 要求LLM根据用户请求返回一个逐步的执行计划,说明应按什么顺序调用哪些工具。在本例中,是如下流程:
- LLM 计划调用
get_item_descriptions来找“round sunglasses” - 根据 Step 1 的输出(找到的产品)
- 再调用
check_inventory查看库存 - 对库存中有货的结果
- 调用
get_item_price检查哪些低于 $100 - 输出最终结果
- LLM 计划调用
-
逐步执行: 按照计划,将每一步的指令和上一步的输出/上下文依次喂给 LLM,让它调用相应的工具并执行。
-
最终输出: 将所有步骤的结果反馈给 LLM,生成最终的用户答案。
-
可以看出,规划模式的Agent有许多好处,比如Agent拥有非常丰富的能力,进而扩展了能执行的任务范围。开发者也无需事先编排工具调用的确切序列,提高了系统的灵活性和自主性。
规划模式的Agent系统在流程控制与实际场景上也有些风险点。在运行时,开发者无法预知 LLM 会生成什么样的计划,带来了结果不稳定/出错/越权的风险。目前,规划模式在AI Coding应用中非常成功,但在其他领域仍然处在尝试阶段。