某制造企业供应链团队每天要处理大量供应商、库存、物流异常。核心问题痛点具体表现业务损失异常发现滞后库存低于安全水位时发现偏晚断供停工风险高补货决策不一致相同水位不同采购员处理不同资金占用波动大供应商管理靠人盯交期、质检靠人工跟踪采购大量时间耗在查进度多系统切换ERP / WMS / SRM 来回切一个异常要查多个系统一、业务方案1.1 目标异常发现从“天级”变为“巡检级”常规补货由 Agent 生成建议小额可自动执行采购人效提升一人可覆盖更多 SKU异常处理全流程可追踪1.2 核心流程数据层 ├─ ERP → 库存水位、在途订单、历史消耗 ├─ SRM → 供应商交期、质检合格率、评级 └─ WMS → 入库数据、库龄、呆滞料 Agent 巡检层 ├─ 检测库存异常低于安全水位 / 呆滞超期 ├─ 检测交期异常预计延迟 ├─ 检测质检异常批次合格率偏低 └─ 自动生成异常报告 自动化处理层 ├─ 常规补货 → 生成采购建议 / 小额自动下单 ├─ 延迟预警 → 通知供应商并要求回复 ├─ 呆滞处理 → 提出降价/退货/报废建议 └─ 严重异常 → 升级到供应链总监二、技术落地TeamAgent 实现说明供应链场景天然是多职责协作更适合TeamAgent 多个 ReActAgent 成员。2.1 系统架构┌──────────────────┐ │ TeamAgent │ │ (供应链主管) │ └────────┬─────────┘ │ ┌───────────────┼───────────────┐ │ │ │ ┌──────▼──────┐ ┌──────▼──────┐ ┌──────▼──────┐ │ 库存监控 Agent│ │ 补货执行 Agent│ │ 异常处理 Agent│ │ (ReActAgent) │ │ (ReActAgent) │ │ (ReActAgent) │ └─────────────┘ └─────────────┘ └─────────────┘ │ │ │ ┌──────┴──────┐ ┌──────┴──────┐ ┌──────┴──────┐ │ ERP API │ │ 采购/OA API │ │ SRM/通知 API │ └─────────────┘ └─────────────┘ └─────────────┘2.2 领域工具真实 APIimportorg.noear.solon.ai.annotation.ToolMapping;importorg.noear.solon.ai.chat.tool.AbsToolProvider;importorg.noear.solon.annotation.Param;/** 库存监控工具 */publicclassInventoryToolsextendsAbsToolProvider{ToolMapping(description查询指定 SKU 当前库存、安全水位、在途数量、日均消耗)publicStringcheck_inventory(Param(descriptionSKU 编码)Stringsku){// 生产环境改为 ERP 查询return { sku:%s, quantity:850, safeLevel:2000, inTransit:0, dailyConsumption:380.0, alert:below_safe_level } .formatted(sku);}ToolMapping(description查询 SKU 补货提前期天)publicStringget_lead_time(Param(descriptionSKU 编码)Stringsku){return{\sku\:\sku\, \leadTimeDays\: 12};}}/** 补货执行工具 */publicclassReplenishmentToolsextendsAbsToolProvider{ToolMapping(description根据当前库存、日均消耗、提前期计算建议补货量)publicStringcalc_reorder_qty(Param(description当前库存)intcurrentStock,Param(description安全水位)intsafeLevel,Param(description日均消耗)doubledailyConsumption,Param(description提前期天数)intleadTimeDays){intshortagesafeLevel-currentStock(int)(dailyConsumption*leadTimeDays);intreorderQtyMath.max(shortage,0);return{\reorderQty\: reorderQty};}ToolMapping(description创建采购单。小额可直接提交大额返回待审批)publicStringcreate_po(Param(descriptionSKU)Stringsku,Param(description采购数量)intqty,Param(description供应商编码)Stringsupplier,Param(description预估金额)doubleamount){if(amount50_000){return{\status\:\pending_approval\, \sku\:\sku\, \qty\:qty, \amount\:amount};}return{\status\:\submitted\, \poNumber\:\PO-System.currentTimeMillis()\, \sku\:\sku\, \qty\:qty, \supplier\:\supplier\};}}/** 异常处理工具 */publicclassExceptionToolsextendsAbsToolProvider{ToolMapping(description查询供应商交期与历史表现)publicStringcheck_supplier(Param(description供应商编码)StringsupplierCode,Param(descriptionSKU)Stringsku){return { supplier:%s, sku:%s, delayRate6m:0.12, passRate:0.983, preferred:true } .formatted(supplierCode,sku);}ToolMapping(description向主管发送异常升级通知)publicStringnotify_manager(Param(description异常摘要)Stringsummary){return已通知供应链主管summary;}}2.3 构建子代理与 TeamAgentimportorg.noear.solon.ai.agent.AgentSession;importorg.noear.solon.ai.agent.react.ReActAgent;importorg.noear.solon.ai.agent.session.InMemoryAgentSession;importorg.noear.solon.ai.agent.team.TeamAgent;importorg.noear.solon.ai.agent.team.TeamProtocols;importorg.noear.solon.ai.chat.ChatModel;ChatModelchatModelLlmUtil.getChatModel();// 1) 库存监控专家ReActAgentinventoryAgentReActAgent.of(chatModel).name(inventory_monitor).role(你是库存监控专家。负责检查库存水位识别低于安全水位的 SKU。).defaultToolAdd(newInventoryTools()).build();// 2) 补货执行专家ReActAgentreplenishAgentReActAgent.of(chatModel).name(replenishment).role(你是补货执行专家。根据缺货信息计算补货量并创建采购单。).defaultToolAdd(newReplenishmentTools()).build();// 3) 异常处理专家ReActAgentexceptionAgentReActAgent.of(chatModel).name(exception_handler).role(你是异常处理专家。分析供应商风险必要时升级通知主管。).defaultToolAdd(newExceptionTools()).build();// 4) 组建团队顺序协作TeamAgentsupplyChainTeamTeamAgent.of(chatModel).name(supply_chain_group).agentAdd(inventoryAgent).agentAdd(replenishAgent).agentAdd(exceptionAgent).protocol(TeamProtocols.SEQUENTIAL).build();AgentSessionsessionInMemoryAgentSession.of(supply_chain_round_001);Stringtask 巡检 SKU A-1002 1. 检查库存是否低于安全水位 2. 若缺货计算补货量并创建采购单供应商 SUP-01单价 0.12 3. 若金额或供应商风险偏高升级通知主管 ;StringresultsupplyChainTeam.prompt(task).session(session).call().getContent();2.4 大额补货加 HITL补货涉及资金建议对create_po做人工审批importorg.noear.solon.ai.agent.react.intercept.HITLInterceptor;HITLInterceptorhitlnewHITLInterceptor().onTool(create_po,(trace,args)-{doubleamountDouble.parseDouble(args.get(amount).toString());returnamount50_000?大额补货需主管审批:null;});ReActAgentreplenishAgentReActAgent.of(chatModel).name(replenishment).role(你是补货执行专家。).defaultToolAdd(newReplenishmentTools()).defaultInterceptorAdd(hitl).build();2.5 定时巡检怎么做TeamAgent / ReActAgent 本身不内置 cron。用业务调度触发即可// 伪代码每 15 分钟触发一次Scheduled(cron0 */15 * * * ?)publicvoidpatrol()throwsThrowable{StringskuListString.join(,,erpService.getAllActiveSku());supplyChainTeam.prompt(检查这些 SKU 的库存异常并给出处理建议skuList).session(InMemoryAgentSession.of(patrol-System.currentTimeMillis())).call();}三、业务效果定性异常发现从“人工发现”变为“定时巡检”常规补货从手工填单变为 Agent 生成建议 / 小额自动提交采购可把时间集中在战略物料与异常供应商每条决策可留 session / 审批日志便于审计真实处理示例巡检发现SKU A-1002 库存 850安全水位 2,000日均消耗 380在途 0Agent 链路check_inventory→ below_safe_levelget_lead_time→ 12 天calc_reorder_qty→ 建议补 6,850金额 6,850 × 0.12 822低于 5 万→create_po直接提交金额若 ≥ 5 万则 HITL 挂起等主管批准四、同类场景扩展业务场景数据源巡检逻辑自动动作零售门店补货POS、门店库存销量接近安全库存生成调拨单医疗耗材消耗记录、效期近效期优先消耗标记并通知临床备件库设备台账、故障率备件低于历史消耗生成采购需求大宗原料期货价、库存、产能低价 低库存生成采购方案跨境 FBA平台库存、销量预测可售天数不足生成货件计划五、落地建议先巡检、后执行前两周只发现异常并通知不自动下单分阶段放开金额阈值1 万 → 5 万 → 常规 SKU 全自动每条自动执行留审计日志时间、SKU、数量、审批人