Judge API
给开发者:发一个 run,$0.60 拿回判分结论和系数表里的一行。
进来一个 run,出去一个结论
角色 C · Judge API一次 $0.60 的调用里发生的事
- 输入
- 一个 run bundle:3 路视频 + 关节/力矩流 + 11 项归因元数据
- 输出
- attempt / success / failure_class / 两个置信度,以及公共表里的一行
- 成本 · 标价
- $0.181 · $0.60 → 毛利 69.8% i
- 规模
- OpenAPI 3.1 · 25 个端点 · 4 个 webhook 事件 · 58 个完整定义的 schema
七步,没有一步要人在场
七步 · 一眼看完
一次 $0.60 调用的成本构成 示意
七步里没有一步需要 operator 在场。格子的产能锁在人身上,判分器的产能锁在 GPU 上,所以它应该定得很便宜。i
七步细节 目标值
- 1收单 · 校验校 bundle 哈希 + 11 项归因字段完整性。缺一项直接拒收。 i~40 ms
- 2抽帧接触事件附近密采 i~1.2 s
- 3三模型集成判分三个 VLM 各自独立给结论。attempt 与 success 分两次问,永不合并。$0.13 · ~6 s
- 4表决 + 两个置信度多数表决,
attempt_confidence与success_confidence分列 i~10 ms - 5写三本账
judgments记判分器,operator_labels记人,runs只记发生了什么。两者不一致 → 进校准集。~25 ms - 6归并公共表匿名行进
coefficients。n < 40 的格子不出数,显示insufficient异步 - 7计量按次计费,并记录该 key 的
rights_grantedi$0.60
每一次分歧都让判分器更准
↺ 回流:"递归"真正的位置
第 5 步攒下的分歧集 → 训练
每跑一次,变准的是仪器,不是机器人。
第 5 步攒下的分歧集 → 训练
rc-judge-v2 → 可以对全部历史 run 重判。i每跑一次,变准的是仪器,不是机器人。
一次调用,两个分开的答案 示意
请求体
# 归因字段必填 —— 缺一项就拒收 POST /v1/judgments Authorization: Bearer rck_live_… Idempotency-Key: 8f2a41-01 { "bundle_uri": "gs://rc-runs/8f2a41/", "policy": { "vendor":"example-lab", "name":"policy-a", "version":"6.0.2", "checkpoint":"sha256:9f3c…" }, "body": { "arm":"xArm7", "hand":"WujiHand2", "dof":20, "mount_h_mm":740, "calibrated_at":"2026-09-16" }, "task": { "id":"tabletop.pick_place.mug_022", "tier":"A" }, "env": { "lighting_k":4200, "clutter":3, "friction_mu":0.42 }, "seed": "0x5F3A9C21", "reset": { "type":"manual", "seconds":42, "operator_min":2.4 }, "judge": "rc-judge-v1" }
200 OK
{
"judgment_id": "jd_5c19",
"attempt": true, // 语言层属性 —— 永远单独返回
"success": false, // 身体层属性 —— 永远单独返回
"failure_class": "grasp.slip",
"counts_against_policy": true, // 查分类法得到,不是硬编码名单
"attempt_confidence": 0.91,
"success_confidence": 0.86,
"charged_to": { "rcsn": null, "cell_id": "cell-sf-03" },
"judge_version": "rc-judge-v1",
"table_row_id": "cf_4471"
}
三条靠结构守住的线
没有 POST /v1/attestations
背书在 API 里只读,签发在线下:这个端点根本不存在。i
B 档抗差分攻击:k = 5
每格至少 5 道题,不返回 task_id;查询太窄时服务端自动放宽而不是拒绝。i
排除规则查分类法,不查名单
54 类里有 20 类不计策略分,而且会随晋升变多。i
另外两条
B 档隔离要做到连接级,不是查询级。如果隔离依赖于「查询时不要 SELECT 那几列」,一个 ORM 里的 SELECT * 就能漏掉一道 B 档题。正确做法是 Judge API 用一个在那四个内容列上完全没有权限的数据库角色连接,让它想漏也漏不出来。
未分类不等于豁免。一次失败如果 failure_class 为空,照样计入策略分。否则「不打标签」就成了免费的分母缩水:谁都可以靠拒绝归因把自己的成功率做上去。