具身评测自定义推理镜像接口说明
更新时间:2026-10-13
镜像启动后作为模型推理服务端运行:应满足以下条件,您可以下载 skill 通过本地 Agent 帮您调整镜像。
接入前提
- 端口由平台分配,用占位符
{port}/{address}(=0.0.0.0:<端口>)接收,监听0.0.0.0,HTTP 与 WebSocket 同端口。 - 就绪判据:
GET /config返回 200(平台探活依据,权重加载完才返)。
消息格式
所有消息经 msgpack 编码,统一信封(四字段均必填):
Python
1{"type": "...", "payload": dict, "seq": int, "timestamp": float}
seq 由客户端分配,服务端应答回显对应请求的 seq。
payload 里的数组和图像用约定字典表达,可嵌套,解码需递归:
Python
1{"__ndarray__": True, "data": b"...", "dtype": "<f4", "shape": [14]} # dtype 用 numpy dtype.str
2{"__image__": True, "format": "png", "data": b"...", "shape": [480,640,3]} # 服务端须能解 raw/jpeg/png
输入
JSON
1// HELLO 请求
2{"protocol_version": 1, "harness_version": "0.5.0", "benchmark": "robodojo"}
3
4// EPISODE_START:收到后重建会话、step 归零、重置所有 per-episode 状态
5{"task": {"name": "stack_blocks", "suite": "robodojo", "episode_idx": 0}, "mode": "live"}
6
7// OBSERVATION:唯一的高频帧
8{"images": {"cam_head": "<ndarray(480,640,3)uint8>", "...": "..."},
9 "task_description": "stack blocks",
10 "state": "<ndarray(14,)float32>"}
相机名各评测集不同,建议您能够通过参数化配置;state 是否下发取决于 HELLO 应答里的声明。
输出
JSON
1// HELLO 应答:protocol_version 恒为 1;observation_params 声明需要哪些观测;
2// action_spec/observation_spec 供交叉校验(只告警不阻断)
3{"protocol_version": 1, "model_server": "MyPolicyServer",
4 "observation_params": {"send_state": true},
5 "action_spec": {"actions": {"dims": 14, "format": "..."}},
6 "observation_spec": {"images": {"format": "rgb_hwc_uint8"}, "state": {"format": "joint_positions"}}}
7
8// ACTION
9{"actions": "<ndarray(action_dim,)float32>"}
10
11// ERROR:带内错误,不断连,服务端发完继续处理下一帧
12{"error": "observation_failed: ValueError: ..."}
ACTION 硬约束:① 回显对应 OBSERVATION 的 seq;② 必须单步动作(1-D (action_dim,));③ 动作分块是服务端内部行为,缓存后逐帧返回一行,不上线缆。
时序与超时
Plain Text
1HELLO 握手 → 每个 episode(EPISODE_START → N×(OBSERVATION → ACTION) → EPISODE_END) → 断开
HELLO 往返 30s,单帧 OBSERVATION → ACTION 30s(warmup 须在监听前做完,否则首帧超时)。
评价此篇文章
