Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
131 changes: 115 additions & 16 deletions benchmark/locomo/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,12 @@ benchmark/locomo/
│ ├── data/ # 测试数据目录
│ └── result/ # 评测结果目录
└── openclaw/ # OpenClaw 评测脚本
├── eval.py # OpenClaw 评估脚本
├── import_to_ov.py # 导入数据到 OpenViking
├── eval.py # OpenClaw 评估脚本 (ingest/qa)
├── judge.py # LLM 裁判打分(适配 OpenClaw)
├── stat_judge_result.py # 统计评分结果和 token 使用
├── run_full_eval.sh # 一键运行完整评测流程
├── data/ # 测试数据目录
└── result/ # 评测结果目录
```

Expand Down Expand Up @@ -158,19 +161,28 @@ python stat_judge_result.py --input <评分结果文件>

```bash
cd benchmark/locomo/openclaw
bash run_full_eval.sh # 只导入 OpenViking
bash run_full_eval.sh # 只导入 OpenViking(跳过已导入的)
bash run_full_eval.sh --with-claw-import # 同时导入 OpenViking 和 OpenClaw(并行执行)
bash run_full_eval.sh --skip-import # 跳过导入步骤,直接运行 QA 评估
bash run_full_eval.sh --force-ingest # 强制重新导入所有数据
bash run_full_eval.sh --sample 0 # 只处理第 0 个 sample
```

**脚本参数说明:**

| 参数 | 说明 |
|------|------|
| `--skip-import` | 跳过导入步骤,直接运行 QA 评估 |
| `--with-claw-import` | 同时导入 OpenViking 和 OpenClaw(并行执行) |
| `--force-ingest` | 强制重新导入所有数据(忽略已导入记录) |
| `--sample <index>` | 只处理指定的 sample(0-based) |

**脚本执行流程:**
1. 导入数据到 OpenViking(可选同时导入 OpenClaw)
2. 等待 60 秒确保数据导入完成
3. 运行 QA 评估(`eval.py qa`,输出到 `result/qa_results.csv`)
4. 裁判打分(`judge.py`,并行度 40)
5. 统计结果(`stat_judge_result.py`)
5. 统计结果(`stat_judge_result.py`,同时统计 QA 和 Import 的 token 使用

**脚本内部配置参数:**

Expand All @@ -184,9 +196,50 @@ bash run_full_eval.sh --skip-import # 跳过导入步骤,直接运行 Q

### 分步使用说明

使用 `openclaw/eval.py` 进行 OpenClaw 评测,该脚本有两种模式:
OpenClaw 评测包含以下脚本:
- `import_to_ov.py`: 导入数据到 OpenViking
- `eval.py`: OpenClaw 评估脚本(ingest/qa 两种模式)
- `judge.py`: LLM 裁判打分
- `stat_judge_result.py`: 统计评分结果和 token 使用

---

#### import_to_ov.py - 导入对话数据到 OpenViking

```bash
python import_to_ov.py [选项]
```

### 模式 1: ingest - 导入对话数据到OpenClaw
**参数说明:**
- `--input`: 输入文件路径(JSON 或 TXT),默认 `../data/locomo10.json`
- `--sample`: 指定样本索引(0-based)
- `--sessions`: 指定会话范围,如 `1-4`
- `--question-index`: 根据 question 的 evidence 自动推断需要的 session
- `--force-ingest`: 强制重新导入
- `--no-user-agent-id`: 不传入 user_id 和 agent_id 给 OpenViking 客户端
- `--openviking-url`: OpenViking 服务地址,默认 `http://localhost:1933`
- `--success-csv`: 成功记录 CSV 路径,默认 `./result/import_success.csv`
- `--error-log`: 错误日志路径,默认 `./result/import_errors.log`

**示例:**
```bash
# 导入所有数据(跳过已导入的)
python import_to_ov.py

# 强制重新导入,不使用 user/agent id
python import_to_ov.py --force-ingest --no-user-agent-id

# 只导入第 0 个 sample
python import_to_ov.py --sample 0
```

---

#### eval.py - OpenClaw 评估脚本

该脚本有两种模式:

##### 模式 1: ingest - 导入对话数据到 OpenClaw

```bash
python eval.py ingest <输入文件> [选项]
Expand All @@ -195,37 +248,83 @@ python eval.py ingest <输入文件> [选项]
**参数说明:**
- `--sample`: 指定样本索引
- `--sessions`: 指定会话范围,如 `1-4`
- `--viking`: 使用 OpenViking 而非 OpenClaw 导入
- `--force-ingest`: 强制重新导入
- `--agent-id`: Agent ID,默认 `locomo-eval`
- `--token`: OpenClaw Gateway Token

**示例:**
```bash
# 导入第一个样本的 1-4 会话到 OpenClaw
python eval.py ingest locomo10.json --sample 0 --sessions 1-4

# 导入到 OpenViking
python eval.py ingest locomo10.json --sample 0 --viking
python eval.py ingest locomo10.json --sample 0 --sessions 1-4 --token <token>
```

### 模式 2: qa - 运行 QA 评估
- 该评测制定了指定了`X-OpenClaw-Session-Key`,确保每次openclaw使用相同的session_id。Token计算将统计`session.jsonl`文件中的所有assistant轮次的Token消耗。每道题目执行完后会清空session.jsonl文件。
- 该评测仅支持单线程运行,不支持并发。
- 需先执行一次,查看`.openclaw/agents/{your_agent_id}/sessions/`下的session文件ID,作为`--session-id`参数的值开始完整评测。
##### 模式 2: qa - 运行 QA 评估

- 该评测指定了 `X-OpenClaw-Session-Key`,确保每次 OpenClaw 使用相同的 session_id
- Token 计算统计 `session.jsonl` 文件中的所有 assistant 轮次的 Token 消耗
- 每道题目执行完后会归档 session 文件
- 支持并发运行(`--parallel` 参数)
- 问题会自动添加时间上下文(从最后一个 session 提取)

```bash
python eval.py qa <输入文件> [选项]
```

**参数说明:**
- `--output`: 输出文件路径
- `--output`: 输出文件路径(不含 .csv 后缀)
- `--sample`: 指定样本索引
- `--count`: 运行的 QA 问题数量
- `--user`: 用户 ID,默认 `eval-1`
- `--parallel`: 并发数,默认 10,最大 40
- `--token`: OpenClaw Gateway Token(或设置 `OPENCLAW_GATEWAY_TOKEN` 环境变量)

**示例:**
```bash
python eval.py qa locomo10.json --sample 0 --output qa_results.txt
# 运行所有 sample 的 QA 评估
python eval.py qa locomo10.json --token <token> --parallel 15

# 只运行第 0 个 sample
python eval.py qa locomo10.json --sample 0 --output qa_results_sample0
```

---

#### judge.py - LLM 裁判打分

```bash
python judge.py [选项]
```

**参数说明:**
- `--input`: QA 结果 CSV 文件路径
- `--parallel`: 并发请求数,默认 40

**示例:**
```bash
python judge.py --input ./result/qa_results.csv --parallel 40
```

---

#### stat_judge_result.py - 统计结果

同时统计 QA 结果和 OpenViking Import 的 token 使用:

```bash
python stat_judge_result.py [选项]
```

**参数说明:**
- `--input`: QA 结果 CSV 文件路径,默认 `./result/qa_results_sample0.csv`
- `--import-csv`: Import 成功 CSV 文件路径,默认 `./result/import_success.csv`

**输出统计包括:**
- QA 结果统计:正确率、token 使用(no-cache、cacheRead、output)
- OpenViking Import 统计:embedding_tokens、vlm_tokens、total_tokens

**示例:**
```bash
python stat_judge_result.py --input ./result/qa_results_sample0.csv --import-csv ./result/import_success.csv
```

---
Expand Down
Loading
Loading