连续任务与会话

将观测、动作和执行反馈连接起来,构建连续运行的机器人任务。

一次推理返回一段动作。要让机器人持续完成任务,你的程序需要反复获取观测、请求动作,并报告实际执行情况。会话将这些轮次关联在一起,记录任务进度,也方便查询每次请求和执行反馈。

使用 本地控制台 时,RoboAPI 会管理这个循环。自行编写控制程序时,先完成 第一次 API 调用,再按下列流程加入会话。

创建会话 → 当前观测 → 模型动作 → 执行与回执 → 下一轮观测 → … → 关闭会话

以下路径都相对接入配置中的 Base URL,使用 Authorization: Bearer <API_KEY>。会话应始终使用同一服务地址与模型 ID;从该服务的 /models 列表选择 MODEL_ID。接入配置与请求格式见 云端 API。

1. 创建会话

发送 POST /sessions,指定任务使用的模型:

{"model":"MODEL_ID"}

响应示例:

{
  "id":"session_1",
  "model":"MODEL_ID",
  "status":"open",
  "next_turn":1,
  "last_request_id":null,
  "history":[],
  "messages":[]
}

保存 id 和 next_turn。后续请求用这两个值关联会话和轮次。

2. 请求当前轮次的动作

向 POST /chat/completions 提交当前图像、状态和指令,并在 metadata 中传入会话 ID 与轮次:

{
  "model":"MODEL_ID",
  "metadata":{"session_id":"session_1","turn":"1"},
  "messages":[{"role":"user","content":[
    {"type":"text","text":"{\"instruction\":\"Pick up the block\",\"state\":[-0.13,-0.46,0.49,0,1,0,0,1]}"},
    {"type":"image_url","image_url":{"url":"data:image/png;base64,<PNG_BYTES>"}}
  ]}]
}

turn 在请求中是字符串。用真实相机图片替换 <PNG_BYTES>,用机器人当前观测替换示例状态。状态与动作的含义见 观测与动作。

响应中的 execute_actions 工具调用包含动作块。保存完整的 choices[0].message、响应头 X-Request-ID 和 metadata.next_turn。下一轮需要原始 assistant 消息及其工具调用 ID,而不只是解析后的动作数组。

3. 报告执行结果并继续

你的控制程序负责校验和执行动作。每个动作块之后,生成与实际执行情况一致的工具回执:

{
  "role":"tool",
  "tool_call_id":"call_0123456789abcdef0123456789abcdef",
  "content":"{\"executed_steps\":1,\"status\":\"completed\"}"
}

这个示例表示只包含一步的动作块已全部派发,且该步执行周期已经结束。实际回执中的 tool_call_id 必须取自模型响应;executed_steps 填实际派发的步数。

字段如何填写
executed_steps本次动作块实际派发的步数;未派发任何动作时为 0。
status: completed整块动作已派发,且每步的执行周期均已结束。
status: interrupted整块执行完成前停止,包括尚未派发第一步的情况。

执行回执记录控制程序做了什么,不代表机器人已物理到位,也不代表任务目标已经完成。

继续推理时,将 metadata.turn 更新为上一轮返回的 next_turn,并按顺序提交三条消息:

  1. 上一轮原始的 assistant 消息。
  2. 与该工具调用对应的 tool 执行回执。
  3. 新采集的 user 观测,包含当前图像、状态和任务指令。

每次等待当前请求结束,再开始下一轮。不要根据上次预测的动作推算新的 state;应重新读取机器人状态。

4. 查询会话与轮次

保存会话 ID、轮次和 request ID,可以分别查看任务上下文、模型返回的动作和请求处理情况。

请求返回内容与用途
GET /sessions/{session_id}status、next_turn、last_request_id、history 和 messages,用于查看会话进度及已记录的消息和回执。
GET /sessions/{session_id}/turns/{turn}该轮的 request_id、status 和 response;response 包含推理响应,可查阅模型当时返回的动作。
GET /requests/{request_id}请求的 status、code、开始与结束时间、timings 和 inference_usage,用于查询处理结果与推理耗时。

例如,查询第 1 轮:

curl "$PLATFORM_BASE_URL/sessions/$SESSION_ID/turns/1" \
  -H "Authorization: Bearer $PLATFORM_API_KEY"

PLATFORM_BASE_URL、PLATFORM_API_KEY 使用接入时的配置,SESSION_ID 使用创建会话返回的 id。查询结果中的 succeeded 表示推理请求成功,不能据此判断机器人任务完成。查询到历史动作后也不应自动再次执行。

5. 结束任务并关闭会话

结束任务时,先停止本地动作派发,再向 POST /sessions/{session_id}/close 提交原因和最后尚未报告的消息。

若最后一轮回执已经提交:

{"reason":"stopped","messages":[]}

若仍有尚未报告的动作块,messages 应依次包含该轮原始 assistant 消息及对应的 tool 回执。例如,没有执行任何一步就停止时,回执为 {"executed_steps":0,"status":"interrupted"}。

响应返回会话对象,status 为 closed。可以再通过 GET /sessions/{session_id} 查看关闭状态和最后的执行记录。停止机器人不应依赖关闭请求是否成功。

本地任务、运行与云端会话

使用 RoboAPI 时,这三个概念分别对应不同记录:

概念生命周期
本地任务 task保存指令、累计运行时间、视频和反馈,可包含多次运行。
一次运行 run从启动到停止或出错;暂停后恢复仍属于同一次运行。
云端会话 session关联本次运行的推理轮次与回执;每次启动运行都会创建新的会话。

停止后重新启动相同指令,且未选择新任务时,默认继续当前本地任务,但会创建新的运行与云端会话。需要单独保存为新任务时,使用控制台的新任务入口,或通过本地 HTTP API 在启动请求中设置 new_task: true。MCP 的 robot_start_policy 不提供这个参数。

运行中从网页再次发送指令,即使文字相同,也会先停止,再创建新任务、运行和云端会话。HTTP/MCP 的活动指令更新则在下一轮推理生效:指令变更会切换本地任务记录,当前运行与云端会话继续。

RoboAPI 本地运行时要求

自行接入 RoboAPI 0.4.5 本地运行时时,模型服务还需要满足下列协议。运行时会校验响应,字段缺失或不匹配时以 invalid_response 结束运行。

初始化向导和控制台通过 GET /models 获取可用模型,使用所选条目的实际 ID。控制台中先 连接、选择模型,再 保存;获取列表本身不保存凭据或创建会话。连接配置与操作见安装指南。

响应、坐标与执行约定

会话与响应

  • 会话 id 为 1–128 个 ASCII 字母、数字、下划线或连字符。创建会话的 next_turn 是大于等于 1 的整数,省略时从 1 开始;响应必须包含 messages 数组。
  • 成功推理的 X-Request-ID 为 32 个小写十六进制字符。第一条 choice 的 finish_reason 为 tool_calls,消息的 role 为 assistant、content 为 null,恰有一个 type: function 的 execute_actions 调用。工具 ID 为 call_ 加该 request ID;arguments 是包含 output 的 JSON 字符串。
  • 推理响应的 metadata.session_id、turn 与请求匹配,next_turn 递增一;轮次在这些 metadata 字段中使用字符串。
  • 关闭响应中的会话 id 必须与请求一致,并包含 messages 数组。

坐标与动作

当前状态和每行动作都使用 [x, y, z, qx, qy, qz, qw, gripper]:

分量本地运行时约定
x, y, z模型坐标中的法兰中心绝对位置,单位米。
qx, qy, qz, qwxyzw 顺序的非零、归一化四元数。
gripper归一化开度:0 关闭,1 张开。

output 是非空 (T, 8) 数组,T 由响应决定。每行是绝对目标,以 30 Hz 派发。所有数值必须有限;夹爪值超出 [0,1] 超过 0.01 时拒绝,容差范围内截到边界。

启用软工作空间时,运行程序会将目标位置限制在配置边界内;默认边界为 Home 位置各轴 ±0.60 m,姿态保持不变。executed_steps 仍记录实际派发步数,包含经过边界裁剪的目标。因此,completed 不表示机器人执行了模型原始的越界位置。下一轮使用重新采集的真实状态。边界设置见本地控制台。

腕部 RGB 图片编码为 PNG data URL,默认从 1280×720 等比缩放为 640×360,不裁切、旋转、镜像或去畸变。坐标标定 提供机器人与模型坐标之间的映射。

运行控制

同一次运行只有一个在途推理请求。HTTP/MCP 暂停和恢复记录为 user JSON 事件 {"event":"pause"} 与 {"event":"resume"}。推理失败会结束运行,本地客户端不自动重试或重放动作;处理方法见 本地错误参考。

本页内容