Skip to main content
每个序列都带有两类彼此独立的元数据:
  • 技术有效性。 这段录制是否可用?Avala 根据验收标准和质量目标报告它。参见下文的“技术有效性”一节。
  • 行为结果。 人或机器人做了什么?任务是否成功?Avala 将其存储为该序列的结果标签。
一个序列可以在技术上有效,同时展示一次失败。失败的序列往往最有用。两个维度保持分开,因此筛选干净数据时不会丢掉有用的失败,筛选成功序列时也不会掩盖损坏的传感器。

结果标签

每个序列最多有一个当前结果标签。每次写入都会记录一个新版本。较早的版本仍可在标签历史中读取。

示例

下面是一次带有滑落和恢复的人类示范的标签,即 GET .../sequences/<sequence-uid>/outcome/ 返回的内容:
这些值用于说明标签的结构。它们不描述真实的交付。

字段

所有时间戳都是距序列开始的秒数。 mistake_type、recovery_type 和 failure_stage 是自由文本。请使用计划的失败分类体系中的标记,以便序列能清晰地分组。

结果值

每个子任务可以带有取自同一列表的自身结果。

自主级别

子任务

每个子任务的形式为 {label, start_ts, end_ts, outcome}。 一个标签最多包含 256 个子任务。列表必须按 start_ts 排序。任意两个子任务要么互不相交,要么一个完全包含另一个,例如一个阶段及其步骤。首尾相接视为不相交。部分重叠会被拒绝。当两个子任务同时开始时,先列出外层的那个。

手部动作

hand_actions 包含两个独立的流:left 和 right。每一项描述一只手在一个时间范围内所做的事。
  • 在同一只手内,各项按 start_ts 排序,且不得重叠。一项在上一项结束时或之后开始。首尾相接没有问题。
  • 两只手之间可以自由重叠。
  • 每只手最多 3,600 项,即按每秒一个标签计算的一小时。
  • left 和 right 是仅有的两个键。两者都可以省略。省略的手存储为空列表。
  • 空的 object 或 verb 存储为 null。每个存储的项都包含全部六个字段。

序列时长

当 Avala 知道序列的时长时,每个子任务的 end_ts 和每个手部动作的 end_ts 都不得超过时长加 1 秒。多出的这一秒是为按每秒一个写入的标签留出的余量。当序列恰好有一个已提取且记录了长度的 MCAP 文件时,Avala 知道其时长。对于其他序列,会跳过此项检查。

评估成员资格

evaluation_membership 把序列放入一个划分: Avala 为每个评估组中的序列设置 held_out_eval。这些序列从不出现在训练发布版本中。参见评估。

泄漏组

泄漏组防止近似重复的数据同时落在训练集和评估集两侧。leakage_groups 接受以下键,每个键对应一个最多 255 个字符的组 ID: 其他任何键都会被拒绝。每个键都是可选的。 Avala 构建评估组时,确保评估组中的任何组值都不会出现在任何训练发布版本中。您可以用同样的方式划分自己的数据:按组留出,绝不按随机序列留出。Avala 的组 ID 是假名化的,因此您可以分组和划分,而无需知道涉及的人员或地点。

来源元数据

source_metadata 记录导入的标签来自哪里,例如 {"importer": "...", "run_id": "...", "task": "...", "log_path": "..."}。
  • 它是一个扁平对象,最多 20 个键。
  • 每个键为 1 到 64 个字符。
  • 每个值是最多 512 个字符的字符串、有限数值或布尔值。
  • 嵌套对象、列表和 null 值会被拒绝。

写入方式

  • 一次写入会整体替换当前标签,并记录一个新版本。您省略的任何可选字段都存储为未设置,不会从上一个版本复制。
  • 写入需要数据集的编辑权限。读取所需的权限与读取该序列相同,包括公开数据集。
  • 除非 source 为 model,否则 confidence 会被拒绝。
  • 读取没有标签的序列会返回 404。

技术有效性

技术有效性不属于结果标签。Avala 根据验收引擎和质量目标报告它,它没有自己的 JSON 模式。 验收标准。 采集活动中的每次采集都会得到一个机器判定:accept、quarantine 或 reject。判定依据以下标准: 每项标准报告 pass、fail、insufficient_evidence 或 skipped。未通过的标准会记录一个原因代码,例如 acceptance_frame_rate_drop 或 hands_not_visible。随后由审核员确认或推翻该判定。原因代码列在验收小时中。 使用 MCP 工具读取验收结果:get_result_acceptance 用于单次采集,get_campaign_acceptance_summary 用于一个采集活动。list_capture_submissions 包含每次采集的机器验收摘要。 质量目标。 项目可以为质量指标设定阈值,例如验收率、拒收率和问题率。当某个指标越过阈值时,Avala 会发出警报。使用 MCP 工具 list_quality_targets 读取它们。 不属于机器标准的计划检查,例如标定、同意和时间戳同步,会作为拒收原因在覆盖报告中报告。参见验收小时。

读取和写入结果标签

REST 端点位于 https://api.avala.ai/api/v1 之下: 数据集列表接受筛选条件 outcome、evaluation_membership、source 和 autonomy_level。每个条件接受一个值或逗号分隔的列表,序列匹配列表中的任意一个值即可。model_version 精确匹配一个版本。未知的筛选值返回 400。 序列列表 GET /datasets/{owner}/{slug}/sequences/ 以同样的形式接受 outcome 和 evaluation_membership,返回当前标签匹配的序列。

写入标签

TypeScript SDK 使用 camelCase 选项名,并发送 API 的 snake_case 字段。sourceMetadata 中的键按原样发送。在 CLI 中,--hand-actions-file 接受一个内容为 {"left": [...], "right": [...]} 的 JSON 文件,--leakage-group KEY=ID 可以重复使用。

读取标签

数据集列表每页最多返回 100 个标签。传入上一页的 cursor 即可继续读取。

通过 MCP 服务器读取标签

MCP 服务器读取结果标签,但不写入。
  • get_sequence_outcome 接受 owner、slug 和 sequenceUid,返回当前标签。
  • list_sequence_outcomes 接受 owner 和 slug,以及筛选条件 outcome、evaluationMembership、source、autonomyLevel 和 modelVersion,还有 limit 和 cursor。
两个工具默认返回简短形式。传入 detail: "full" 可包含子任务、手部动作、错误和恢复标记、泄漏组、来源元数据和标注者。连接方法参见与 AI 一起使用 Avala。

通过 LeRobot 导出结果标签

LeRobot 导出器可以把每个序列的当前结果标签写在数据集旁边。一个 Avala 序列成为一个 LeRobot episode。
标签写入 meta/avala_sequence_outcomes.jsonl:每行一个 JSON 对象,每个已保存的 LeRobot episode 对应一行。LeRobot 自身的 episode 表没有存放这些元数据的位置,因此它是一个单独的文件。每行包含以下键: 没有标签的序列会得到一行,其中只有 episode_index、avala_sequence_uid 和 "outcome": null。

失败与恢复通道

可恢复的失败作为独立的通道交付:即结果为 mistake_and_recovery 或 intervention 的序列。每个序列的子任务和手部动作标出失败和恢复发生的位置。 该通道在发布版本中作为单独的切片交付。您可以在其上训练、为其加权或将其排除。您也可以用 ?outcome=mistake_and_recovery,intervention 自行构建同样的集合。不安全的序列不属于该通道。