20 个销售 Agent 各自为战,谁来替用户做调度?

2026-05-28 23 预计阅读时间:1 分钟
来源:aws.amazon.com AI 摘要 原文链接

免责声明:本文为 AI 摘要整理,建议结合原文阅读。摘要可能省略上下文、版本差异或边界条件,不作为官方说明。

预计阅读时间:10 分钟

AWS 全球销售团队部署了超过 20 个领域专用 AI Agent——报价计算、客户画像、合同审查、竞品分析……每个 Agent 都能独立产出价值,但一线销售代表却要在不同系统间反复切换,自己判断"这个问题该找谁"。认知负荷没有减少,反而从"查资料"变成了"选 Agent"。Amazon Bedrock AgentCore 正是为解决这类编排问题而生:把多个专用 Agent 的调度逻辑收归一层,让用户只提需求,系统自动路由。

专用 Agent 的价值与瓶颈

单个 Agent 做得越专,边界就越清晰。报价 Agent 只管定价逻辑,合同 Agent 只管条款合规,各自训练、各自迭代,开发效率高。但瓶颈出现在使用侧:

  • 选择负担:销售代表面对一个客户问询,需要自己判断该调用报价 Agent 还是竞品 Agent,或者两者都要、还要决定先后顺序。
  • 上下文断裂:每个 Agent 独立维护会话状态,前一个 Agent 的结论无法自动流入下一个,代表要手动搬运中间结果。
  • 响应碎片化:20 个 Agent 各有入口、各有 UI,代表在 CRM、内部工具、聊天窗口之间来回跳转。

AWS 销售组织的实际数据印证了这一点——Agent 数量增长后,代表的有效使用率反而停滞,因为"选谁"本身成了一项新工作。

AgentCore 的编排思路

Bedrock AgentCore 的核心定位不是"再做一个更强的 Agent",而是做 Agent 之间的路由器与管线。关键能力包括:

  1. 意图识别与路由:接收用户的自然语言请求,识别涉及哪些领域,自动分发到对应 Agent。
  2. 链式编排:对需要多步协作的请求,按依赖顺序串联 Agent,前一步输出作为后一步输入。
  3. 状态汇聚:各 Agent 的中间结果统一收归到共享上下文,避免手动搬运。
  4. 回退与兜底:某个 Agent 调用失败或超时时,编排层可以降级到备选路径或直接返回已有结果。

这意味着销售代表只需要说"帮我评估这个客户的续约风险",AgentCore 会自动拆解为:客户画像查询 → 使用趋势分析 → 合同条款审查 → 综合评分,串联执行后返回一份整合结论。

实践:用 AgentCore 编排一个销售评估流程

下面是一个最小可运行的示例,展示如何用 Python SDK 定义两个专用 Agent 并通过 AgentCore 编排成一条链式流程。运行前需要配置 AWS 凭证并安装 boto3

import boto3
import json
import uuid

client = boto3.client("bedrock-agentcore", region_name="us-east-1")

# ── 1. 定义两个专用 Agent ──

# 客户画像 Agent:查询客户历史消费与行业信息
profile_agent = client.create_agent(
    agentName=f"customer-profile-{uuid.uuid4().hex[:8]}",
    agentResourceRoleArn="arn:aws:iam::123456789012:role/BedrockAgentRole",
    foundationModel="anthropic.claude-3-5-haiku-20241022-v1:0",
    instruction=(
        "你是客户画像分析专家。根据客户 ID,返回该客户的行业、"
        "历史消费金额、最近 6 个月使用趋势。只输出结构化 JSON。"
    ),
    description="查询客户画像与使用趋势",
)

# 续约风险 Agent:基于画像数据评估续约概率
risk_agent = client.create_agent(
    agentName=f"renewal-risk-{uuid.uuid4().hex[:8]}",
    agentResourceRoleArn="arn:aws:iam::123456789012:role/BedrockAgentRole",
    foundationModel="anthropic.claude-3-5-haiku-20241022-v1:0",
    instruction=(
        "你是续约风险评估专家。接收客户画像 JSON,"
        "综合行业衰退风险、消费下滑幅度、合同到期时间,"
        "输出续约概率(0-1)与风险等级(低/中/高)。"
    ),
    description="评估客户续约风险",
)

# ── 2. 创建编排流程 ──

# AgentCore 支持将多个 Agent 组成一条执行链
# 先查画像,再将画像结果传入风险评估
orchestration = client.create_orchestration(
    orchestrationName=f"renewal-assessment-{uuid.uuid4().hex[:8]}",
    orchestrationResourceRoleArn="arn:aws:iam::123456789012:role/BedrockAgentCoreRole",
    steps=[
        {
            "agentId": profile_agent["agent"]["agentId"],
            "stepName": "fetch-profile",
            "inputMapping": {
                # 将用户原始请求中的 customerId 映射到该步骤输入
                "customerId": "$.request.customerId"
            },
        },
        {
            "agentId": risk_agent["agent"]["agentId"],
            "stepName": "assess-risk",
            "inputMapping": {
                # 将上一步输出的画像 JSON 整体传入
                "profileData": "$.steps.fetch-profile.output"
            },
        },
    ],
    # 如果画像查询失败,直接返回"数据不足,无法评估"
    fallbackResponse={"message": "画像数据不足,无法完成风险评估"},
)

print("编排流程已创建:")
print(json.dumps(orchestration, indent=2, default=str))

调用编排流程时,用户只需提交一个请求:

# ── 3. 执行编排 ──

result = client.invoke_orchestration(
    orchestrationId=orchestration["orchestration"]["orchestrationId"],
    request={"customerId": "ACME-2024-0781"},
)

print("最终评估结果:")
print(json.dumps(result, indent=2, default=str))

返回结构大致如下(具体格式取决于 Agent 输出):

{
  "steps": {
    "fetch-profile": {
      "output": {
        "industry": "制造业",
        "monthlySpend": 42000,
        "trend": "下滑12%"
      }
    },
    "assess-risk": {
      "output": {
        "renewalProbability": 0.35,
        "riskLevel": "高",
        "reason": "制造业衰退叠加消费下滑,合同3个月内到期"
      }
    }
  }
}

注意:以上 API 调用结构基于 Bedrock AgentCore 公开文档的典型模式。具体字段名和参数可能随版本更新变化,部署前请对照最新 SDK 文档确认。agentResourceRoleArn 和 IAM 角色需要提前在你的 AWS 账户中创建。

从 20 个 Agent 到 1 个入口:落地考量

把 AgentCore 引入现有 Agent 体系,不是一键切换,有几个实际决策点:

哪些 Agent 先接入编排?
不建议一次性把 20 个 Agent 全部接入。先选 2-3 个高频组合——比如"客户画像 + 续约风险"或"报价计算 + 合同审查"——验证链式编排的稳定性和延迟,再逐步扩展。

编排层本身的延迟怎么控制?
每多一步 Agent 调用,就多一次模型推理。对实时性要求高的场景(比如销售通话中的即时辅助),可以设置编排层的最大步数和超时阈值,超过后直接返回已有结果,不等后续步骤。

Agent 之间的数据格式要对齐吗?
是的。链式编排依赖前一步输出能被后一步解析。最务实的做法是给每个 Agent 的 instruction 加一句"只输出结构化 JSON,字段包括 xxx",让下游 Agent 不需要再做格式猜测。

回退策略要提前定义
哪个 Agent 可能超时?哪个数据源可能不可用?在编排定义中为关键步骤配 fallbackResponse,比让整条链因单点故障中断要好得多。


AgentCore 解决的不是"Agent 能不能做某件事",而是"用户不用再自己决定找哪个 Agent 做这件事"。当专用 Agent 的数量从 3 个涨到 20 个,编排层的价值不是线性增长,而是从"锦上添花"变成"没有它就用不动"。如果你所在团队也在经历类似的 Agent 碎片化,可以先从两个最常串联的 Agent 开始,搭一条最小编排链,让代表只说一句话,系统自己跑完全程。


相关推荐