构建智能物理AI:通过Strands Agents、Bedrock AgentCore、Claude 4.5、NVIDIA GR00T与Hugging Face LeRobot实现从边缘到云端协同

本文探讨了如何利用AWS的Strands Agents、Bedrock AgentCore、Claude 4.5、NVIDIA GR00T及Hugging Face LeRobot等开源技术,构建能够在物理世界感知、推理和行动的智能AI代理系统。文章深入介绍了边缘-云混合架构、视觉-语言-动作模型的实时控制、多机器人协调及通过AgentCore实现跨设备集体学习的技术实现路径,为构建下一代物理智能系统提供了实用指南。

构建智能物理AI:通过Strands Agents、Bedrock AgentCore、Claude 4.5、NVIDIA GR00T与Hugging Face LeRobot实现从边缘到云端协同

AI代理系统正迅速从数字世界扩展到物理世界,AI代理在现实环境中感知、推理和行动。随着AI系统越来越多地通过机器人、自动驾驶汽车和智能基础设施与物理世界互动,一个根本性问题出现了:我们如何构建既能利用海量云计算进行复杂推理,又能为物理传感和执行维持毫秒级响应能力的代理? 今年,AWS的代理式AI发生了变革。我们于2025年5月推出了Strands Agents,为代理开发带来了简单的开发者体验和模型驱动方法。7月,我们发布了具有多代理编排功能的1.0版本,并推出了Amazon Bedrock AgentCore,以加速AI代理大规模投入生产。在2025年的re:Invent大会上,我们通过TypeScript SDK、评估、语音代理的双向流媒体以及用于在边界内引导代理的转向功能扩展了Strands。今天,我们探讨这些能力如何扩展到边缘和物理AI领域,在那里代理不仅仅是处理信息,而是在物理世界中与我们协同工作。

演示的完整代码可在以下位置找到: Strands + NVIDIA GR00T + SO-101 Strands + Boston Dynamics Spot

在这些演示中,物理AI代理通过一个统一的Strands Agents接口控制两个截然不同的机器人,该接口将AI代理连接到物理传感器和硬件。一个3D打印的SO-101机械臂利用NVIDIA GR00T视觉-语言-动作模型处理操控任务——“拿起水果放入篮子”会使它识别苹果、抓取并完成任务。一个Boston Dynamics Spot四足机器人负责移动和全身控制——“检查你的传感器”会让Spot推断传感器在其底部,然后自动坐下并侧翻以便接近。这两个演示都在NVIDIA Jetson边缘硬件上运行,展示了复杂的AI能力如何在嵌入式系统上直接执行。

边缘-云连续体

物理AI应用揭示了一种影响我们如何构建智能系统的张力。考虑一个接球的机械臂。看到球和调整夹爪位置之间的时刻必须在毫秒内发生。即使是最快的连接,到云服务的网络延迟也使其无法实现。推理必须在边缘、在设备本身上进行,以满足物理现实所要求的近乎即时的响应时间。然而,同一个机器人系统也极大地受益于云能力。规划多步骤装配任务、与其他机器人协调,或从数千个类似机器人的集体经验中学习,都需要只有云才能提供的计算规模。像Anthropic的Claude Sonnet 4.5这样的模型带来了变革机器人理解和执行复杂任务方式的推理能力,但它们体积太大,无法在边缘硬件上运行。这反映了Daniel Kahneman的系统1和系统2思维——边缘提供快速、本能的反应,而云则支持深思熟虑的推理、长时域规划和持续学习。最有能力的物理AI系统两者并用,无缝协同工作。

云支持在边缘不可行的额外能力。AgentCore Memory可以维持跨越数小时或数天的空间和时间上下文,不仅记住发生了什么,还记住发生在何处及何时。学习成果可以跨整个机器人队伍收集和应用,而不是局限于单个设备——当一个机器人发现更好的方法时,该知识通过共享内存对所有机器人可用。跨整个机器人队伍的分布式可观测性提供了理解大规模部署时AI代理和机器人正在做什么的能力,提供任何单个设备都无法产生的洞察。Amazon SageMaker支持海量并行模拟和模型训练,使组织能够将现实世界和模拟部署中的学习成果应用于改进模型,从而使整个机器人队伍受益。

这种混合架构支持全新的智能系统类别。人形机器人使用基于云的推理来规划多步骤任务,同时使用基于边缘的视觉-语言-动作模型执行精确的物理运动。云代理可能规划“准备早餐”,将其分解为步骤并记住你的饮食偏好,而边缘VLA模型则处理在毫秒级控制下抓取草莓而不压碎它。自动驾驶汽车利用云智能进行路线优化和交通预测,同时在边缘维持实时障碍物规避。车辆不能等待云响应来避开行人,但它受益于云对整个城市交通模式的分析。

逐步深入的代码之旅

构建边缘和物理AI系统并不需要一开始就面对边缘-云编排的全部复杂性。前进的道路是逐步迭代,从简单开始,随着需求增长而增加复杂性。

从边缘开始

首先,我们将在边缘设备上安装带有Ollama的Strands Agents Python SDK并拉取Qwen3-VL模型。安装Ollama,然后运行以下命令:

1
2
ollama pull qwen3-vl:2b
pip install 'strands-agents[ollama]'

一个简单的起点是在边缘设备上本地运行模型。通过Strands的Ollama提供程序,你可以直接在边缘硬件上运行像Qwen3-VL这样的开源模型。Strands还支持llama.cpp用于量化模型的高性能推理,以及MLX用于在Apple Silicon上运行模型:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
from strands import Agent
from strands.models.ollama import OllamaModel

edge_model = OllamaModel(
    host="http://localhost:11434",
    model_id="qwen3-vl:2b"
)

agent = Agent(
    model=edge_model,
    system_prompt="You are a helpful assistant running on edge hardware."
)
result = agent("Hello!")

物理AI通常需要理解物理世界,而不仅仅是处理文本。通过摄像头输入添加视觉理解很简单——处理文本的同一代理现在可以处理图像,使其能够看到其物理环境:

1
2
3
4
5
6
7
8
9
def get_camera_frame() -> bytes:
    # 返回当前摄像头帧的示例函数
    with open("camera_frame.jpg", "rb") as f:
        return f.read()

result = agent([
    {"text": "What objects do you see?"},
    {"image": {"source": {"bytes": get_camera_frame()}}}
])

除了视觉,代理还可以访问其他传感器以了解其状态。通过将传感器读数包装为工具,代理可以在需要时动态调用它们以做出明智的决策。读取电池电量有助于代理决定是继续任务还是返回充电:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
@tool
def get_battery_level() -> str:
    """Get current battery level percentage and remaining duration."""
    # 返回电池指标的示例函数
    percentage = robot.get_battery_percentage()
    duration = robot.get_battery_duration_minutes()
    return f"Battery level: {percentage}%, approximately {duration} minutes remaining"

agent = Agent(
    model=edge_model,
    tools=[get_battery_level],
    system_prompt="You are a robot assistant. Use available tools to answer questions."
)
result = agent("How long until you need to recharge?")

在物理世界中行动

物理AI系统遵循一个连续的循环:感知环境、推理要做什么、行动以改变世界实现目标。我们已经通过摄像头和传感器涵盖了感知。现在让我们探索代理如何将决策转化为物理行动。

在物理世界中行动意味着控制硬件——旋转机器人关节的电机、打开和关闭的夹爪、驱动移动平台的轮子。一个机械臂可能有六个关节,每个由一个可以旋转到特定角度的电机控制。要拾取一个物体,机器人必须同时协调所有六个关节,从其当前位置移动到够到物体,调整夹爪角度,闭合夹爪,然后提起。这种协调通过向电机发送目标关节位置来实现,然后电机移动机器人的物理结构。我们可以通过两种方式处理:使用直接输出机器人动作的视觉-语言-动作模型,或使用传统的机器人SDK,由AI提供高级命令。

像NVIDIA GR00T这样的视觉-语言-动作模型将视觉感知、语言理解和动作预测结合在一个模型中。它们将摄像头图像、机器人关节位置和语言指令作为输入,并直接输出新的目标关节位置。

考虑指令“捡起与你颜色相同的水果放入篮子中。”VLA模型的视觉-语言主干首先推理指令及其在摄像头图像中看到的内容——识别哪个物体是苹果,哪个是篮子。通过包含机器人的当前状态(其关节位置),模型生成一系列新的关节位置,这些位置将使机器人移动到苹果处,闭合夹爪抓住它,移动到篮子处,然后释放。模型将此作为动作块执行——机器人在持续观察场景的同时执行的小段关节运动序列。如果有人在任务中途移动了苹果,VLA模型会在下一个摄像头帧中看到这一点,并生成修正的关节运动以到达苹果的新位置。

Hugging Face的LeRobot提供了使机器人硬件工作变得可访问的数据和硬件接口。你可以使用遥操作或模拟记录演示,在数据上训练模型,并将其部署回机器人。通过将像LeRobot这样的硬件抽象与像NVIDIA GR00T这样的VLA模型结合,我们创建了在物理世界中感知、推理和行动的边缘AI应用:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
@tool
def execute_manipulation(instruction: str) -> str:
    """Execute a manipulation task using your robotics hardware."""
    # 运行VLA模型推理并驱动机器人的示例函数
    while not task_complete:
        observation = robot.get_observation() # 摄像头 + 关节位置
        action = vla.get_action(observation, instruction) # 来自VLA模型的推理
        robot.apply_action(action) # 执行关节运动
    return f"Completed: {instruction}"

robot_agent = Agent(
    model=edge_model,
    tools=[execute_manipulation],
    system_prompt="You control a robotic arm. Use the manipulation tool to complete physical tasks."
)

result = robot_agent("place the apple in the basket.")

这创建了一种自然的职责分工——Strands处理高级任务分解,而GR00T则处理具有实时自我校正功能的毫秒级感知运动控制。

为了使构建者更容易,我们发布了一个实验性的机器人类,它提供了一个简单的接口,用于将硬件与像NVIDIA GR00T这样的VLA模型连接起来:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
from strands import Agent
from strands_robots import Robot

# 创建带摄像头的机器人
robot = Robot(
    tool_name="my_arm",
    robot="so101_follower",
    cameras={
        "front": {"type": "opencv", "index_or_path": "/dev/video0", "fps": 30},
        "wrist": {"type": "opencv", "index_or_path": "/dev/video2", "fps": 30}
    },
    port="/dev/ttyACM0",
    data_config="so100_dualcam"
)

# 创建带有机器人工具的代理
agent = Agent(tools=[robot])

agent("place the apple in the basket")

当机器人制造商提供了强大的运动基元,并且你希望利用他们经过测试的控制系统时,基于SDK的控制效果很好。对于Boston Dynamics Spot,我们将SDK命令包装为Strands工具:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
from bosdyn.client.robot_command import RobotCommandBuilder, blocking_command, blocking_stand, blocking_sit

@tool
def stand() -> str:
    """Command the robot to stand up."""
    blocking_stand(command_client, timeout_sec=10)
    return "Robot is now standing"

@tool
def sit() -> str:
    """Command the robot to sit down."""
    blocking_sit(command_client, timeout_sec=10)
    return "Robot is now sitting"

@tool
def battery_change_pose(direction: str = "right") -> str:
    """Position robot for battery access by rolling onto its side."""
    cmd = RobotCommandBuilder.battery_change_pose_command(
        dir_hint=1 if direction == "right" else 2
    )
    blocking_command(command_client, cmd, timeout_sec=20)
    return f"Robot positioned for battery access"

spot_agent = Agent(
    model=edge_model,
    tools=[stand, sit, battery_change_pose],
    system_prompt="You control a Boston Dynamics Spot robot."
)

result = spot_agent("I need to inspect your sensors")

当被问到“我需要检查你的传感器”时,代理推断传感器在机器人底部,然后命令Spot执行坐下和电池更换姿势。SDK处理了将机器人安全侧翻所需的复杂平衡和电机控制。

连接边缘和云

边缘代理在需要时可以将复杂推理委托给云。VLA模型为物理动作提供了毫秒级控制,但当系统遇到需要更深层推理的情况——例如规划多步骤任务或基于历史模式做出决策时——它可以使用代理即工具模式咨询更强大的基于云的代理:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from strands import Agent, tool
from strands.models import BedrockModel
from strands.models.ollama import OllamaModel

# 具有强大推理能力的云代理
cloud_agent = Agent(
    model=BedrockModel(model_id="global.anthropic.claude-sonnet-4-5-20250929-v1:0"),
    system_prompt="Plan tasks step-by-step for edge robots."
)

# 将云代理暴露为工具,以便可以使用代理即工具模式委托给它
@tool
def plan_task(task: str) -> str:
    """Delegate complex planning to cloud-based reasoning."""
    return str(cloud_agent(task))

# 具有本地模型的边缘代理
edge_agent = Agent(
    model=OllamaModel(
        host="http://localhost:11434",
        model_id="qwen3-vl:2b"
    ),
    tools=[plan_task],
    system_prompt="Complete tasks. Consult cloud for complex planning."
)

result = edge_agent("Fetch me a drink")

相反的模式同样强大。一个基于云的编排器可以协调多个边缘设备,每个设备处理自己的实时控制,而云代理则管理整体工作流:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
@tool
def control_robot_arm(command: str) -> str:
    """Control robotic arm for manipulation tasks."""
    # 调用远程机械臂代理的示例函数
    return str(robot_arm_agent(command))

@tool
def control_mobile_robot(command: str) -> str:
    """Control mobile robot for navigation and transport."""
    # 调用远程移动代理的示例函数
    return str(mobile_robot_agent(command))

warehouse_orchestrator = Agent(
    model=BedrockModel(model_id="global.anthropic.claude-sonnet-4-5-20250929-v1:0"),
    tools=[control_robot_arm, control_mobile_robot],
    system_prompt="You coordinate multiple robots in a warehouse environment."
)

result = warehouse_orchestrator(
    "Coordinate inventory check: scan shelves, retrieve items, and sort"
)

在仓库中,这可能意味着协调机械臂、移动机器人和检查无人机来完成复杂的库存任务。每个设备保持自己的边缘智能以应对即时响应,但它们在云编排下协同工作。

跨机器人队伍学习和改进

虽然我们已经看到云代理如何编排多个边缘设备,但物理AI系统在能够从集体经验中学习并通过观察和反馈持续改进时会变得更加强大。

考虑一个拥有数十个移动机器人的仓库。当多个机器人遇到相同问题时,会出现任何单个机器人都无法检测到的模式。AgentCore Memory实现了这种集体智能——每个机器人在操作时都将观察结果存储到共享内存中:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
from bedrock_agentcore.memory import MemoryClient

memory_client = MemoryClient(region_name="us-east-1")

# 机器人在导航问题后存储观察结果
memory_client.create_event(
    memory_id=FLEET_MEMORY_ID,
    actor_id=robot_id,
    session_id=f"robot-{robot_id}",
    messages=[
        ("Navigation failure in north corridor - low confidence in visual localization. "
         "Location: north_corridor, light_level: high_contrast", "ASSISTANT")
    ]
)

一个车队协调员可以查询这个共享内存,发现北走廊87%的导航失败发生在下午2-4点之间,当时下午透过天窗的阳光会混淆视觉系统。这种洞察导致立即的操作变更,并为模型改进提供了信息。

AgentCore可观测性通过一个完整的反馈循环为持续改进提供了基础:推理 → 模拟/行动 → 观察 → 评估 → 优化。CloudWatch中的GenAI可观测性仪表板捕获来自边缘设备的端到端跟踪,揭示了代理执行路径、内存检索操作以及整个系统的延迟细分。这种可观测性数据成为强化学习的训练信号——成功的行为得到加强,而失败则指导修正。

Amazon SageMaker支持海量并行模拟和训练以应用这些学习成果。像NVIDIA Isaac Sim和MuJoCo这样的物理模拟器提供了逼真的物理环境,机器人在部署前可以安全地练习数百万个场景。数字模拟器,包括基于LLM的用户模拟器,生成多样化的交互模式,帮助代理处理边缘情况。循环重复:部署到真实机器人,观察行为,大规模模拟改进,训练更新模型,并部署回机器人队伍。每次迭代都使整个机器人队伍更具能力。有关在AWS上使用Isaac GR00T微调设置可扩展机器人学习管道的详细演练,请参阅我们关于在AWS Batch上开始机器人学习的实体AI博客文章系列。

构建明天的智能系统

使这一刻有趣的是我们在几个领域看到的融合。强大的多模态推理模型可以理解和规划物理任务,边缘硬件使VLA模型能够以物理系统所需的低延迟在本地运行,而开源机器人硬件正在使物理AI开发对更广泛的构建者社区变得可访问。VLA模型已经出现,使机器人能够在动态环境中感知和行动,并具有毫秒级控制,而持续学习循环——代理通过模拟和真实物理部署改进——已经变得可以在云上大规模实用。

我们在AWS的目标之一是使AI代理开发变得可访问。这项工作将这个目标扩展到物理世界。正如David Silver和Richard S. Sutton在《Welcome to the Era of Experience》中描述的那样,AI代理越来越多地从其环境经验中学习——通过模型训练、调优、长期记忆和上下文优化来改进。随着这些系统发展出对物理世界进行更深层次推理的能力,它们可以开始采取行动前模拟未来的世界状态,预测其决策的后果,并作为更大系统的一部分进行可靠协调。

我们期待看到你们在未来几个月在这个快速发展的领域中构建出什么。

立即开始: Strands Agents Amazon Bedrock AgentCore Amazon SageMaker NVIDIA Isaac GR00T Hugging Face LeRobot SO-101机械臂 Boston Dynamics Spot 实验性Strands机器人类

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计