内容提要
本文介绍用Java和Spring AI实现WMS补货AI代理的第二步。代理由规划器、执行器和报告器组成,定义分析、策略、决策、补货、通知五项能力,每项能力限定可用工具。出库发票完成后发布事件,事务提交后异步触发代理。规划器根据目标与可用能力生成有序任务计划,经结构化输出映射为对象,并以RUNNING状态和PENDING任务持久化到MongoDB。第三部分将讲述计划执行。
延伸解读
能力边界如何落到代码
文章把“WMS 定义允许做什么、代理决定做什么”落实为 AgentCapability:每项能力绑定一组工具,任务只能使用所属能力的工具。例如 ANALYSIS 可读库存与库存移动,但不能创建补货请求;DECISION 不暴露任何工具,只消费前序任务收集的结果。这种设计让权限边界在代码层面可检查,而不是仅靠提示词约束。
触发时机为何选在事务提交后
代理由 OUTBOUND_INVOICE_COMPLETED 事件触发,监听器使用 @TransactionalEventListener 的 AFTER_COMMIT 阶段并异步执行。这样代理启动时出库操作已持久化、库存已反映最新状态,避免读到未提交数据。代价是代理执行与出库事务解耦,其运行结果不会回滚原出库操作,读者需注意这一异步边界。
规划器输出为何要结构化并持久化
任务列表并非应用预先写死,而是规划器根据目标与可用能力生成,再通过 Spring AI 的结构化输出直接映射为 PlannedTask 对象,省去手工解析文本。随后整个执行以 AgentRun 存入 MongoDB,状态为 RUNNING,各任务为 PENDING。持久化让计划从开始就有可追踪记录,也为第三部分按任务逐步执行提供了状态基础。
Q&A
Spring AI 智能体在 WMS 补货场景中由哪些核心组件构成?
代理由三个核心组件构成:规划器(Planner)负责根据目标生成任务计划;执行器(Executor)逐项执行任务并调用可用工具;报告器(Reporter)总结执行结果并解释决策原因。
这个补货智能体定义了哪五项能力?每项能力有什么工具限制?
五项能力为:分析(ANALYSIS)可访问发票、库存和库存移动工具;策略(POLICY)获取货主政策;决策(DECISION)判断是否需要补货,不暴露任何工具;补货(REPLENISHMENT)创建补货请求;通知(NOTIFICATION)起草相关邮件。每项能力限定了可用的工具,形成任务边界。
WMS 中的补货智能体是如何被触发的?
出库操作成功完成且事务提交后,应用发布 OUTBOUND_INVOICE_COMPLETED 事件。监听器使用 @Async 和 @TransactionalEventListener(phase = AFTER_COMMIT) 异步启动智能体,并以出库发票号作为参考。AFTER_COMMIT 确保智能体仅在出库操作持久化且库存反映最新状态后启动。
规划器如何生成执行计划?计划如何持久化?
规划器接收目标与可用能力列表,通过提示词要求为每个任务分配恰好一项能力,并利用 Spring AI 的结构化输出将模型响应直接映射为 PlannedTask 对象列表。随后,AgentRunner 将执行状态以 RUNNING 状态、每个任务以 PENDING 状态保存为 MongoDB 中的 AgentRun 文档。
规划器生成的计划中,每个任务包含哪些信息?
每个计划任务包含两个信息:任务描述(description)和负责该任务的能力(capability)。任务初始状态为 PENDING。
为什么智能体要在事务提交后(AFTER_COMMIT)才启动?
使用 AFTER_COMMIT 确保智能体仅在出库操作已持久化且库存已反映最新状态后才开始执行,避免在事务未完成时读取到不一致的数据。