> ## Documentation Index
> Fetch the complete documentation index at: https://avala.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# 失败数据接入

> 把运行记录和失败发送给 Avala，以及 Avala 如何把它们转化为失败分类体系和差距报告

循环从您的机器人实际做了什么开始。您发送运行记录，包括失败和干预。Avala 读取它们，找出规律，并告诉您缺少哪些数据。

## 格式

| 格式 | 如何到达 |
| - | - |
| MCAP | 机群录制上传，或 `avala import folder --data-type mcap` |
| ROS bag（`.bag`、`.db3`） | `avala import rosbag`，或转换为 MCAP 后作为机群录制上传 |
| LeRobot 数据集 | 通过 `avala import lerobot` 从 Hugging Face Hub 或本地目录导入 |
| 带日志的视频 | 视频通过 `avala import folder --data-type video` 上传。Avala 在计划中将日志与视频对齐。 |
| Inspect Robots 评估日志 | `avala import inspect-robots`。参见下文的“导入评估日志”一节。 |

MCAP 保留每个 topic，因此能提供最完整的信息。ROS bag 导入器转换摄像头 topic（`sensor_msgs/Image` 和 `sensor_msgs/CompressedImage`），并保留关节状态及其他数值或文本 topic。点云等二进制负载会被跳过。当您需要保留所有 topic 时，请发送 MCAP。

## 以机群录制形式发送运行记录

每次上传都进入一个已有的机群录制。计划开始时，Avala 为您已注册的设备预置录制。列出它们以找到录制 UID。

```python Python theme={null}
from avala import Client

client = Client()  # reads AVALA_API_KEY

page = client.fleet.recordings.list(device_id="<device-uid>", limit=20)
for recording in page:
    print(recording.uid, recording.status, recording.started_at)

# Upload a local directory of rollout files into one recording.
session = client.fleet.uploads.upload_recording(
    "<recording-uid>",
    "./rollouts/2026-09-29",
)
print(session.uid, session.status)
```

```bash CLI theme={null}
# Preview what will be uploaded
avala fleet recordings upload \
  --source ./rollouts/2026-09-29 \
  --recording <recording-uid> \
  --dry-run

# Upload and wait for server-side processing
avala fleet recordings upload \
  --source ./rollouts/2026-09-29 \
  --recording <recording-uid> \
  --wait
```

`upload_recording` 会续传同一来源中被中断的上传。调用完成表示处理已进入队列。检查 `client.fleet.recordings.get(uid).status`，直到其值为 `ready`。

## 把失败和干预标记为事件

机群事件为录制中的某个时刻加上标签。标记每次失败和每次干预，让 Avala 能快速找到它们。用 `type` 表示事件类别，用 `metadata` 保存您的技术栈记录的任何信息，例如模型版本和任务。

```python Python theme={null}
from avala import Client

client = Client()

event = client.fleet.events.create(
    recording="<recording-uid>",
    device="<device-uid>",
    type="anomaly",
    label="Plate slipped during placement",
    timestamp="2026-09-29T14:03:12Z",
    severity="warning",
    duration_ms=1800,
    tags=["failure", "regrasp"],
    metadata={"model_version": "your-policy@2026-09-20", "task": "load_dishwasher"},
)
print(event.uid)

# Many events at once
created = client.fleet.events.create_batch(
    events=[
        {
            "recording": "<recording-uid>",
            "device": "<device-uid>",
            "type": "state_change",
            "label": "Operator took over",
            "timestamp": "2026-09-29T14:03:15Z",
            "tags": ["intervention"],
        },
    ]
)
print(created)
```

```typescript TypeScript theme={null}
import Avala from "@avala-ai/sdk";

const avala = new Avala(); // reads AVALA_API_KEY

const event = await avala.fleet.events.create({
  recording: "<recording-uid>",
  device: "<device-uid>",
  type: "anomaly",
  label: "Plate slipped during placement",
  timestamp: "2026-09-29T14:03:12Z",
  severity: "warning",
  durationMs: 1800,
  tags: ["failure", "regrasp"],
  metadata: { model_version: "your-policy@2026-09-20", task: "load_dishwasher" },
});
console.log(event.uid);
```

```bash CLI theme={null}
avala fleet events create \
  --recording <recording-uid> \
  --device <device-uid> \
  --type anomaly \
  --label "Plate slipped during placement" \
  --timestamp 2026-09-29T14:03:12Z \
  --severity warning
```

事件 `type` 为 `error`、`warning`、`info`、`state_change`、`anomaly` 或 `custom` 之一。`severity` 为 `info`、`warning`、`error` 或 `critical` 之一。您也可以通过[录制规则](/docs/visualization/fleet/recording-rules.md)自动创建事件。

## 导入 ROS bag 和 LeRobot 数据集

当运行记录存放在机群之外时，将其作为数据集导入。请先安装对应格式的扩展。

```bash theme={null}
pip install "avala[rosbag]"
avala import rosbag ./rollout_0412.bag --name "Rollouts 0412" --slug rollouts-0412 --wait

pip install "avala[lerobot]"
avala import lerobot --repo-id your-hf-user/your-rollouts --name "Rollouts" --slug rollouts --wait
```

LeRobot 导入器的详细说明见[导出](/docs/zh/fleet-learning/exports.md)。

## 导入评估日志

如果您用开源评估工具 [Inspect Robots](https://github.com/robocurve/inspect-robots) 评估策略，可以导入它的 JSON 评估日志。每个试验（一个 epoch 中的一个场景）为一个序列打上[结果标签](/docs/zh/fleet-learning/sequence-metadata.md)。失败的试验成为您可以筛选、审阅并转化为采集工作的序列。

```bash theme={null}
pip install "avala[inspect]"

# Preview the trial-to-outcome mapping. Reads the log only.
avala import inspect-robots logs/load-dishwasher_1a2b3c4d.json --dataset your-org/dishwasher-eval --dry-run

# Label the sequences that already exist in the dataset, one per trial
avala import inspect-robots logs/load-dishwasher_1a2b3c4d.json --dataset your-org/dishwasher-eval

# Or create the dataset from each trial's recorded actions, plus camera frames if the run stored them
avala import inspect-robots logs/load-dishwasher_1a2b3c4d.json --dataset your-org/dishwasher-eval --create
```

| Inspect Robots 试验 | 结果 |
| - | - |
| 成功分数不低于 `--success-threshold`，评分分数不低于 `--expert-threshold` | `expert_success` |
| 成功分数不低于 `--success-threshold`，评分分数低于 `--expert-threshold` | `partial_success` |
| 成功分数低于 `--success-threshold` | `failure` |
| 试验出错或被取消 | `aborted` |
| 成功评分器没有给出值 | 不打标签 |

每个导入的标签都将 `source` 设为 `imported`，`evaluation_membership` 设为 `held_out_eval`，`autonomy_level` 设为 `autonomous`。`model_version` 为该次运行的策略。运行的任务成为一个覆盖整个试验的子任务。由人或模型写入的标签会被保留，除非您传入 `--overwrite`。完整的选项列表见 [CLI 参考](/docs/sdks/cli.md#inspect-robots-evaluation-logs)。

## 通过 MCP 服务器查看录制和事件

MCP 服务器读取机群数据。您可以向助手询问最近的失败，或直接调用以下工具：

* `fleet_list_recordings` 和 `fleet_get_recording` 用于录制
* `fleet_list_events`，可按 `recording`、`device`、`type` 或 `severity` 筛选
* `get_fleet_health` 用于获取整个机群的摘要

上传和事件创建通过 SDK 或 CLI 完成。参见[与 AI 一起使用 Avala](/docs/zh/getting-started/mcp.md)进行连接。

## Avala 如何处理运行记录

以下步骤是 Avala 在计划中提供的服务。它们没有可调用的 API。

1. **分段。** Avala 在状态变化处把每条运行记录拆分为序列和子任务。您的事件锚定失败发生的时刻。
2. **标注。** 每个序列获得其[序列元数据](/docs/zh/fleet-learning/sequence-metadata.md)的两个维度：技术有效性检查和结果标签。
3. **聚类。** Avala 按出了什么问题以及在什么条件下出问题对失败分组。聚类映射到为您的计划建立的带版本号的失败分类体系。新的聚类会扩展该分类体系。
4. **差距分析。** Avala 把失败聚类与您现有训练数据和评估组的覆盖进行比较。

## 差距报告

Avala 为每批运行记录交付一份差距报告。

| 部分 | 内容 |
| - | - |
| 范围 | 录制、时间范围、模型版本和分类体系版本。 |
| 失败分类体系 | 每种失败模式、其定义和示例序列。 |
| 分布 | 按模式、按模型版本和按覆盖单元统计的失败次数和比率。 |
| 缺失的覆盖 | 每种失败模式背后、您的训练数据缺少或过于稀薄的[覆盖单元](/docs/zh/fleet-learning/coverage.md)。 |
| 建议的实验 | 每个优先失败条件对应一个[能力实验](/docs/zh/fleet-learning/capability-experiments.md)草案，包含假设和目标单元。 |

您审阅差距报告并选择优先级。获批的实验成为下一份采集简报。
