news 2026/4/19 1:29:18

【Bedrock AgentCore】Multi-Agent 架构实战:用 6 个 Agent 打通零售供应链数据→洞察→行动全链路

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Bedrock AgentCore】Multi-Agent 架构实战:用 6 个 Agent 打通零售供应链数据→洞察→行动全链路

【Bedrock AgentCore】Multi-Agent 架构实战:用 6 个 Agent 打通零售供应链数据→洞察→行动全链路

最近接了个零售供应链的需求:运营团队每天 60% 时间花在"帮我查个数"上,从提需求到拿到分析结果平均 3 天。老板的原话是——“能不能让运营自己查?直接问就出结果?”

一开始想做 Text-to-SQL,让运营用自然语言查数据。做完发现不够——查到数据后他们还是不知道异常在哪、为什么异常、该怎么处理。

最后用了 Multi-Agent 架构:6 个 Agent 各管一段,从查数据到出报告到建议行动,全自动。基于 Strands Agents SDK + Bedrock AgentCore 搝管,跑了一个月效果还行。

这篇把架构、代码、踩坑都说一遍。如果你也在做供应链或者类似的数据分析类 Agent 项目,应该能少走点弯路。

痛点拆解

供应链运营的数据分析痛点可以拆成三层:

查询壁垒:运营不会写 SQL,每次想看个数据都得提需求排队。
洞察缺位:数据分析师给了数据,运营也不一定看得出规律——“发货完成率从 95% 掉到 88%”,但这到底严重严重?哪个环节出了问题?
行动脱节:就算分析出来了,从"发现问题"到"落地行动"还有一段路——该调哪个参数?通知谁?发什么邮件?

一个 Agent 搞不定。查数据需要 SQL 能力,分析需要业务知识,出报告需要总结能力,建议行动需要流程知识——每个环节需要的上下文完全不同。

Supervisor-Workers 架构

选了 Supervisor 模式:一个主管 Agent 负责理解意图和编排调用,下挂 5 个专业 Agent:

Agent职责工具
Supervisor理解意图、编排流程调用其他 5 个 Agent
Query Agent自然语言 → SQL,基础数据查询MCP>YAML 配置驱动

所有 Agent 定义在一个 YAML 里,不用写代码:

id:supply-chain-insight-agentdefault_agent_id:supervisormcp_servers:-id:data-queryname:Data Query MCPurl:http://data-query-server/mcpmcp_type:sseagents:-id:supervisorname:Insight Supervisorsystem_prompt:|对于综合分析类问题,按以下流程: 1. 通过 query_agent了解基本情况和同比变化 2. 判断是否存在异常(同比变化 > 5%) 3. 如有异常,通过 detail_agent 做多维度下钻 4. 通过 research_agent研究根因 5. 通过 summary_agent生成总结报告agent_tools:-query_agent-detail_agent-research_agent-summary_agent-action_agent-id:query_agentname:query_agentsystem_prompt:|负责基础数据查询和同比分析。mcp_tools:-data-query:query

关键设计:Supervisor 会根据问题复杂度决定调用哪些 Agent。简单查询只走 Query Agent,不浪费其他 Agent 的 token。

语义层设计

Agent 要查数据,先得理解业务术语。语义层做了术语到 SQL 的映射:

## 业务术语 → SQL 映射 - 库存周转天数 = stock_qty / NULLIF(sold_qty_30d / 30.0, 0) - 滝销品 = 库存周转天数 > 90 - 畅销品 = sold_qty_7d/7.0 > sold_qty_30d/30.0 * 1.5 - 发货完成率 = COUNT(status='delivered') / COUNT(*)

放在 Query Agent 的 System Prompt 里。运营说"查滝销品",Agent 就知道对应的 SQL 条件是库存周转天数超过 90 天。

业务规则变了(比如滝销标准从 90 天改成 60 天),改语义层定义就行,不用动代码。

Sub-Agent 封装为 Tool

Strands SDK 里,子 Agent 被包装成 Tool 给 Supervisor 调用:

def_create_tool_agent(self,agent_id,...):asyncdefagent_function(objective:str,context:str=None):agent=Agent(name=agent_name,model=model,system_prompt=system_prompt,tools=tools,plugins=plugins,)...returntool(agent_function,name=agent_id,description=description)

tool()装饰器把 async function 变成 Strands Tool。Supervisor 调用query_agent(objective="查华东上周各品类销量")就像调普通函数一样。

这样 Supervisor 完全不关心子 Agent 内部实现。Query Agent 是直连数据库还是走 MCP,Supervisor 不需要知道。

MCP 协议解耦数据源

Query Agent 通过 MCP(Model Context Protocol)调用数据源:

  • Agent 调用 MCP Server 的query工具
  • MCP Server 连接实际数据库,执行 SQL,返回结果
  • 换数据源只需换 MCP Server 配置

mcp_type: sse用 Server-Sent Events 通信,适合返回大数据集。

完整技术栈

组件选型
Agent 框架Strands Agents SDK(开源 MIT)
运行环境Bedrock AgentCore Runtime
模型Bedrock(Claude 系列)
状态存储DynamoDB
API 层API Gateway + Lambda
认证Cognito
数据层MCP Server 对接各类数据库

实战场景:渠道履约分析

运营经理在月度回顾时问了一句:“这个月各渠道的履约表现怎么样?有没有需要重点跟进的?”

这是个典型的开放式分析问题——没指定具体指标,没限定维度,需要系统自己判断"怎么看"和"看什么"。传统模式下回答这个问题:登录各渠道系统导出数据 → Excel 合并清洗 → 手动计算指标 → 逐个渠道对比 → 写分析报告,至少半天。

Multi-Agent 系统 30 秒搞定,过程是这样的:

Step 1:Supervisor 理解意图,调 Query Agent 查基础数据

Query Agent 自动把"履约表现"映射为语义层中定义的核心指标(发货完成率、平均履约时效),按渠道维度查本月数据,和上月同期对比。结果出来:渠道 B 的发货完成率较上月同期下降超 5%。

Supervisor 判定为异常,自动进入下钻。

第二步:Detail Agent 多维度下钻

按品类和时间维度拆解渠道 B 的数据——发现异常集中在运动鞋品类,其他品类正常。时间维度上看,下降从月中开始。

第三步:Research Agent 排查根因

从多个方向查运动鞋品类在渠道 B 的履约异常原因:查库存水位、查补货记录、查仓库产能。最终定位到:该渠道对应的仓库上周有设备检修,产能降了 30%,导致运动鞋这种高 SKU 量品类积压。

第四步:Summary Agent 生成报告

结构化输出:渠道 B 运动鞋品类履约异常,根因是仓库设备检修导致产能下降 30%,预计本周恢复正常产能。

第五步:Action Agent 执行行动

自动发两个动作:(1) 给渠道 B 运营对接人发通知,告知履约延迟原因和预计恢复时间;(2) 生成临时调货申请摘要,建议从邻近仓库调运动鞋库存补缺。

从提问到出报告加行动建议,30 秒。以前这事至少半天,还得跨三个部门协调。

再看一个简单场景:运营问"上周华东总销量多少"。Supervisor 判断为简单查询,只调 Query Agent,5 秒出结果。Detail/Research/Summary/Action 全跳过——简单问题不浪费 token 和时间。

数据架构

底层数据通过 AWS Glue 做 ETL 清洗和标准化,存在 Amazon S3 分层(raw/processed)。Agent 发出的查询通过 MCP Server 转成 SQL 打到数据层。

这套数据架构的好处是 Agent 层和数据层完全解耦。项目中期我们把查询引擎从一个方案换成了云原生查询服务,SQL 方言、连接方式、认证机制全变了。因为走 MCP,Agent 代码一行没改——只换了 MCP Server 的实现。

扩展方向

跑了一个月,运营团队提了几个后续需求:

知识库增强(RAG):目前业务知识通过语义层注入 System Prompt,规则明确、量可控的时候够用。但随着覆盖面扩大——行业知识(品类季节性规律)、历史案例(过去类似异常怎么处理的)、行动模板库(不同异常对应的处理流程)——会超出 Prompt 容量。下一步准备引入知识库作为 Agent 的检索工具,不改现有架构,加一个 MCP 数据源就行。

主动预警:不等用户提问,Agent 定时扫核心指标,异常时自动出报告推到运营群。其实现在已经有个简单版——Supervisor 每天早 8 点跑一遍,但还不够智能,阈值是硬编码的。

跨部门协作:供应链问题经常牵扯财务、销售、物流。未来可以让供应链 Agent 和其他业务域的 Agent 对话,生成跨部门的联合应对方案。

为什么选 Strands + AgentCore

Multi-Agent 框架很多,我们试过几个后选了 Strands + AgentCore:

  • 原生集成:Agent 定义、运行时管理、监控都在同一平台
  • MCP 原生支持:换数据源不用改 Agent 代码
  • 配置驱动:新增 Agent 改 YAML 就行。我们后来加了 Forecast Agent(预测库存),就加了一段 YAML,没写一行新代码
  • 开源:Strands SDK 开源 MIT,出问题能看源码排查

不足也有:Strands 还比较新,社区生态和文档还在建设中。但对已经在用 Bedrock 的团队,集成成本是低的。

踩坑记录

  1. Supervisor 编排过度:一开始所有问题都跑 5 个 Agent。简单问题(“上周销量多少”)也要过一遍 Detail + Research,又慢又费钱。后来加了分流——简单问题只走 Query Agent。

  2. 语义层漂移:业务术语的定义经常变,语义层没跟着改就会查出错误数据。必须有流程保证语义层和业务规则同步。

  3. 上下文传递:Detail Agent 需要 Query Agent 的输出才能下钻。通过context参数传递上游结果,Supervisor 负责拼接上下文。

  4. 错误处理:Query Agent 的 SQL 报错,Supervisor 要能识别并给用户有用的反馈。不能把ORA-00942: table or view does not exist直接怼给运营。

  5. 冷启动语义层:语义层需要大量业务知识填充。我们找运营团队整理了 200+ 个常用术语定义,前后花了两周。而且不同团队对同一个术语的理解不一样——"滾销品"在渠道运营和仓储运营那里定义就不同。最后拉了个对齐会,把所有术语定义统一了一版。

  6. token 成本控制:全流程 5 个 Agent 各调一次 LLM,复杂问题单次分析消耗 10K+ token。我们的策略是分流(简单问题只走 1-2 个 Agent),另外 Summary Agent 和 Action Agent 用了较小的模型,不需要复杂推理,省一些。

  7. 调试困难:多 Agent 链路出错时定位麻烦。重度依赖 AgentCore 的 OpenTelemetry 链路追踪——每个 Agent 的输入输出、工具调用、耗时都能在 CloudWatch 里看到。没有这个能力,多 Agent 的维护成本高得吓人。

参考链接

  • 官方博客(完整架构细节):https://aws.amazon.com/cn/blogs/china/multi-agent-architecture-retail-practice/
  • Strands Agents SDK:https://github.com/strands-agents/sdk-python
  • AgentCore 文档:https://docs.aws.amazon.com/bedrock/latest/userguide/agentcore.html
  • MCP 协议:https://docs.aws.amazon.com/bedrock/latest/userguide/agentcore-mcp.html
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/19 1:28:14

Gemini现可接入谷歌相册,生成个性化图像

谷歌旗下的Gemini现已支持接入Google Photos,通过"个人智能"功能,根据用户的个人偏好与生活方式生成专属图像。谷歌的"个人智能"功能允许Gemini从Google Photos等应用中提取数据,为用户提供个性化的回应。该功能现已进一…

作者头像 李华
网站建设 2026/4/19 1:27:11

STM32 HAL库RTC配置实战:从CubeMX到解决F1系列掉电日期丢失

1. STM32CubeMX RTC基础配置实战 第一次用STM32CubeMX配置RTC时,我像发现新大陆一样兴奋——点点鼠标就能生成时钟配置代码,再也不用翻几百页的参考手册了。但很快就被现实打脸:F1系列MCU掉电后日期总会莫名其妙重置到2000年1月1日&#xff…

作者头像 李华
网站建设 2026/4/19 1:22:15

在线考试|基于springboot + vue在线考试管理系统(源码+数据库+文档)

在线考试管理系统 目录 基于springboot vue在线考试管理系统 一、前言 二、系统功能演示 详细视频演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取: 基于springboot vue在线考试管理系统 一、…

作者头像 李华
网站建设 2026/4/19 1:21:29

5大核心功能揭秘:AKShare财经数据获取的完整实战指南

5大核心功能揭秘:AKShare财经数据获取的完整实战指南 【免费下载链接】akshare AKShare is an elegant and simple financial data interface library for Python, built for human beings! 开源财经数据接口库 项目地址: https://gitcode.com/gh_mirrors/aks/aks…

作者头像 李华
网站建设 2026/4/19 1:21:27

零食商城|基于springboot + vue零食商城管理系统(源码+数据库+文档)

零食商城系统 目录 基于springboot vue零食商城 一、前言 二、系统功能 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取: 基于springboot vue零食商城管理系统 一、前言 博主介绍:✌️大厂…

作者头像 李华
网站建设 2026/4/19 1:20:45

CTFshow misc入门misc8

1.工具:010 Editor、VMware(Ubuntu)、foremost2.解题:方法一(手动分离图片):打开文件,看到如下图片我们正常先用010 Editor,如下我们先用CTRLF搜索ctfshow,如…

作者头像 李华

关于博客

这是一个专注于编程技术分享的极简博客,旨在为开发者提供高质量的技术文章和教程。

订阅更新

输入您的邮箱,获取最新文章更新。

© 2025 极简编程博客. 保留所有权利.