更新时间:2026-07-17 GMT+08:00
分享

智能体调试

智能体调试说明

  • 智能体调试时,模型服务需处于运行中状态,机器人需在线。
  • 同一本体,支持切换不同的模型服务进行技能调试,方便您选择效果更优的模型服务。
  • 部分模型仅支持运行固定的模型技能,不支持泛化技能;其他模型可运行泛化技能,您可根据需要输入需要运行的Prompt,验证模型的泛化性。

部署模型服务

  1. 在左侧导航选择“运行管理 > 模型部署”,进入模型部署页面。
  2. 单击“部署模型服务”,进入部署模型服务页面。
  3. 输入基础信息,选择部署SO101可使用的模型,并选择资源配置。
  4. 完成后单击“立即部署”,在模型部署页面可以单击,实时刷新模型部署进展,并等待模型服务部署完成

调试模型技能

  1. 在左侧导航选择“运行管理 > 机器人”,进入机器人页面。
  2. 在机器人列表,选择在线机器人,单击对应的“智能体调试”,进入“智能体调试”页面。
  3. 单击“选择模型技能”,选择处于运行中的模型服务、模型技能,单击“确定”。
  4. 在智能体调试页面,输入机器人运行Prompt或者保持默认技能,单击,开始技能调试。

    模型推理的默认步数为60 steps。

    如果已经达到最大推理的步数,但实际任务并未完成,您可重新发送Prompt,会重新运行任务。

    参数配置中适当调大技能最大推理步数。该参数调整后仅对该机器人和当前选择的模型服务生效。您还可以在模型的r2c.json中修改,该修改对后续部署的推理服务生效。

切换模型服务

在智能体界面底部,可单击模型服务名称,切换其他模型服务来验证模型技能。您可在调试记录中查看两个模型的运行结果。

运行泛化性技能

在选择模型服务和模型技能时,如模型技能中有泛化技能选项,表示该模型支持自定义prompt运行泛化技能。

选择泛化技能后,在输入框中可自定义输入Prompt,验证模型的泛化性。

配置r2c.json文件

预置模型、空间资产中类型为感知模型和规划模型均不适用于r2c.json配置,可以直接跳过相关部分。

本章节用于描述r2c.json配置文件的结构和含义。该配置文件定义了机器人观测数据到模型输入、以及模型输出到机器人动作之间的映射关系。您可以根据需要调整r2c.json配置文件,具体请参见r2c.json文件配置说明

方法一:从模型部署页面中配置

r2c.json仅允许部署模型时上传,部署模型后仅可查看。如果需要更改该配置,请重新部署。

  1. 在运行管理-模型部署中,可直接上传r2c.json配置。

    图1 模型部署页面

  2. 上传后,可直接预览已上传的文件。

    图2 上传成功页面

  3. 单击部署,即配置成功。如果显示r2c.json不正确,请确保上传的文件内容满足json格式,且符合配置结构要求。

    图3 部署成功页面

方法二:从模型资产所在的OBS中配置

配置文件位于模型资产所在的OBS目录下。

r2c.json仅在部署模型服务时会获取。如果通过OBS更新了r2c.json,已经部署的推理服务不会更新,重新启动也不会更新。因此请在部署模型服务之前,更新OBS中的r2c.json。

  1. 在模型资产-模型详情中,复制需要部署的模型服务对应版本的obs路径。

    图4 复制模型资产所在的obs路径

  2. 登录obs平台,找到对应的桶,并进入到obs路径。

    图5 进入obs存储模型路径

  3. 单击上传对象,上传r2c.json文件。

    图6 上传文件

方法三:从数据所在的OBS中配置

配置文件位于数据资产所在的OBS中目录下。

r2c.json仅在训练模型终态(训练成功、手动终止、运行失败、任务失败)时获取。如果后续通过OBS更新了r2c.json,已经训练好的模型资产不会更新。因此请在训练模型结束之前,更新数据资产对应的OBS中的r2c.json。

如果数据集不存在r2c.json,而训练的源模型存在,则会在训练模型终态时将源模型的r2c.json复制到训练产物中。

  1. 在数据资产-数据详情中,复制需要部署的模型服务对应版本的obs路径。

    图7 数据资产详情页面

  2. 登录obs平台,找到对应的桶,并进入到obs路径。

    图8 进入obs存储模型路径

  3. 单击上传对象,上传r2c.json文件。

    图9 上传文件

r2c.json文件配置说明

r2c.json配置结构概览

{
    "model_feature_mapping": { 
        "input_features": { ... },
        "output_features": { ... }
    },
    "stop_condition": { ... }
}

表1 顶层字段说明

字段

类型

必填

说明

model_feature_mapping

object

模型特征映射配置对象。

该对象包含两个子对象input_featuresoutput_features,分别定义模型输入和输出的映射规则,请参见表2

stop_condition

object

模型运行停止条件配置,如果没有设置,则默认为{"max_iter_num": 100,"max_run_time": 10},可通过前端修改推理服务的运行停止条件,请参见停止条件(stop_condition)

表2 模型特征映射(model_feature_mapping)

model_feature_mapping的子对象

说明

input_features

输入特征,该对象定义如何将机器人的观测数据映射到模型的输入格式,具体请参见输入特征(input_features)

output_features

输出特征,该对象定义如何将模型输出的数据映射到机器人的动作指令,具体请参见输出特征(output_features)

r2c.json配置文件示例

{
    "model_feature_mapping": {
        "input_features": {
            "observation.state": {
                "shape": [6],
                "values": [
                    "observation.joint_states.position@{joint_1}",
                    "observation.joint_states.position@{joint_2}",
                    "observation.joint_states.position@{joint_3}",
                    "observation.joint_states.position@{joint_4}",
                    "observation.joint_states.position@{joint_5}",
                    "observation.joint_states.position@{joint_6}"
                ]
            },
            "observation.images.front": {
                "value": "observations.images.color.front"
            },
            "observation.images.wrist": {
                "value": "observations.images.color.wrist"
            },
            "task":{
                "type": "PROMPT"  
            }
        },
        "output_features": {
            "action.state": {
                "chunk_size": 100,
                "shape": [6],
                "value": [
                    "observation.joint_states.position@{joint_1}",
                    "observation.joint_states.position@{joint_2}",
                    "observation.joint_states.position@{joint_3}",
                    "observation.joint_states.position@{joint_4}",
                    "observation.joint_states.position@{joint_5}",
                    "observation.joint_states.position@{joint_6}"
                ]
            }
        }
    },
    "stop_condition": { 
        "max_iter_num": 60,
        "max_run_time": 5
    }
}

输入特征(input_features)

input_features定义如何将机器人的观测数据映射到模型的输入格式,系统支持三种类型的输入特征,如表3所示。

表3 输入特征类型

特征类型

特征类型分类标准

说明

状态数组 (STATE)

配置中包含values字段(必填)。

从joint_states、end_effector_states、end_effector_poses提取数值组成状态向量。

状态数组类型的详细信息请参见状态数组类型 (STATE)

视觉图像 (VISUAL)

配置中有value字段且value路径格式符合以下规则之一。

  • 4段格式:observation(s).image(s).{color|depth}.{image_name}。
  • 2段格式:{color|depth}.{image_name}。

从observations.images.color.*或observations.images.depth.*提取图像数据。

视觉图像类型的详细信息请参见视觉图像类型 (VISUAL)

任务提示 (PROMPT)

需满足以下任一条件。

  • 配置中type字段值为PROMPT。
  • dtype为string且value以task开头。
  • dtype为string且value路径的第一段以observation开头,第二段以task开头。

从observation.task获取任务描述文本。

任务提示类型的详细请参见任务提示类型 (PROMPT)

  • 状态数组类型 (STATE)

    状态数组特征用于从观测数据中提取多个值组成状态向量。

    状态数组的shape和values数量必须与实际机器人配置一致。

    "observation.state": {
        "shape": [7],
        "dtype": "float32",
        "values": [
            "observation.joint_states.position@{joint_1}",
            "observation.joint_states.position@{joint_2}",
            "observation.joint_states.position@{joint_3}",
            "observation.joint_states.position@{joint_4}",
            "observation.joint_states.position@{joint_5}",
            "observation.joint_states.position@{joint_6}",
            "observation.joint_states.position@{gripper_1}"
        ]
    }
    表4 状态数组类型参数说明

    字段

    说明

    shape

    [N]

    状态数组包含N个元素(关节数 + 夹爪数)。

    该字段必须存在且是一维数组(如[7],不能是[2,3])。

    dtype

    float32

    使用32位浮点数表示。

    该字段必须是整数或浮点类型,不能是字符串。

    values

    数组

    按顺序提取所有关节位置和夹爪位置,顺序取决于模型推理状态数组的具体含义(请参见表5)。

    该字段不能为空。

    表5 数据来源类型

    数据源

    路径格式

    说明

    joint_states

    observation.joint_states.position@{joint_name}

    关节位置

    end_effector_state

    observation.end_effector_states.position@{ee_name}

    末端运行器/夹爪位置

    end_effector_poses

    observation.end_effector_poses.pose@{ee_name}

    末端运行器7D位姿(tx, ty, tz, qx, qy, qz, qw),返回完整7维

    end_effector_poses[index]

    observation.end_effector_poses.pose@{ee_name}[0]

    提取7D位姿的第index维(0-6)

    数据源路径解析规则

    • 使用@{name}从names数组中查找对应的索引。
    • 支持[index]语法从数组中提取特定元素。
    • 支持组合格式:field@{name}[index]。
    • 路径必须以observation.开头。
    • end_effector_poses支持使用[index]提取7D位姿的特定维度(0-6,对应tx, ty, tz, qx, qy, qz, qw)。

    数据源路径的占位符替换

    • 路径配置中的{joint_1}、{joint_2}、{gripper_1}等占位符会在运行时查找关节/夹爪名称所对应的索引的取值。
    • 具体的占位符名称(如joint_1、gripper_1)来自R2C协议中定义的observation_features.joint_states.names和observation_features.end_effector_states.names。
    • 不同机器人的关节/夹爪名称可能不同,配置时需确保占位符与实际机器人配置匹配。
  • 视觉图像类型 (VISUAL)

    视觉特征用于从观测数据中提取图像数据(PNG格式)。

    图像的键名(如top、wrist)取决于R2C协议中定义的图像配置,不同机器人可能使用不同的相机名称。

    图像的具体名称(如top、wrist、front)需与R2C协议中的observation_features.images定义保持一致。

    "observation.images.top": {
        "dtype": "uint8",
        "value": "observations.images.color.top"
    }
    表6 视觉图像类型参数说明

    字段

    说明

    dtype

    uint8

    无符号8位整数(0-255)。

    value

    observations.images.color.top

    R2C协议中的图像数据路径,请参见表7

    表7 支持的图像路径格式

    格式

    示例

    说明

    完整路径(4段)

    observations.images.color.top

    完整观测数据路径。

    4段格式路径:observations.images.{color|depth}.{image_name}
    • 第1段必须以observation开头。
    • 第2段必须以images开头。
    • 第3段必须是color或depth。
    • 第4段为图像名称。

    短格式(2段)

    color.top

    仅包含类型、图像名称。

    2段格式路径:{color|depth}.{image_name}。
    • 第1段必须是color或depth。
    • 第2段为图像名称。

    深度图

    depth.top

    深度图像。

    其中,路径的图像类型(第3段或第1段)必须是color或depth,支持的图像类型

    • color.*:彩色图像(RGB)。
    • depth.*:深度图像。
  • 任务提示类型 PROMPT

    任务提示特征用于将任务描述传递给模型。

    • 系统只允许存在一个PROMPT类型特征。
    • 配置文件只定义任务描述的来源路径(即从哪里获取任务),而不是静态的任务描述文本。任务描述必须从外部传入(前端)。如果为空,会报错“Task prompt not found in both skill config and observation data”,运行失败。
    "task": {
        "dtype": "string",
        "value": "observation.task"
    }

    或:

    "task":{
        "type": "PROMPT"  
    }
    表8 任务提示类型参数说明

    字段

    说明

    dtype

    string

    字符串类型。

    value

    observation.task

    从观测数据中提取任务描述(该字段仅记录为任务提示词,并未使用r2c中的task字段)。

    type

    PROMPT

    表示该字段对应模型的任务描述字段(会从前端传入)。

输出特征(output_features)

output_features目前仅允许存在一个item(item的键与模型保持一致即可)。

动作输出 (action)的shape和values数量必须与实际机器人配置一致,具体关节和夹爪名称来自R2C协议。

"action": {
    "chunk_size": 100,
    "shape": [7],
    "values": [
        "actions.joint_states.position@{joint_1}",
        "actions.joint_states.position@{joint_2}",
        "actions.joint_states.position@{joint_3}",
        "actions.joint_states.position@{joint_4}",
        "actions.joint_states.position@{joint_5}",
        "actions.joint_states.position@{joint_6}",
        "actions.joint_states.position@{gripper_1}"
    ]
}
表9 动作输出参数

字段

说明

chunk_size

100

模型一次性输出100个时间步的动作。

shape

[N]

每个时间步包含N个值(关节数 + 夹爪数)。

values

数组

动作值映射到机器人关节/夹爪的路径列表,顺序取决于r2c.json。

输出数据形状

实际输出形状为 [chunk_size, shape],即chunk_size个时间步,每个时间步N个值(N = 关节数 + 夹爪数)。

动作映射关系

动作值按顺序映射到r2c.json中定义的关节和夹爪,其中:

  • 关节名称来自action_features.joint_states.names。
  • 夹爪名称来自action_features.end_effector_poses。
  • 夹爪名称来自action_features.end_effector_states.names。

停止条件(stop_condition)

该字段定义模型运行在何时停止的条件,避免无限循环或超时运行。

"stop_condition": {
    "max_iter_num": 60,
    "max_run_time": 5
}
表10 停止条件参数

字段

类型

说明

max_iter_num

integer

60

最大推理调用次数。

max_run_time

integer

5

最大运行时间(分钟)。

停止逻辑

  • 参数max_iter_num和max_run_time的停止条件是“或”关系,即任一条件满足时都会停止运行。
  • 最多运行60次推理调用或最多运行5分钟。

相关文档