locomo-eval-kit:基于 Python 的记忆系统评测工具包项目

locomo测试脚本

分支2Tags0

LoCoMo Eval Kit

LoCoMo 记忆系统评测工具包。包含三种规模的评测脚本,支持 OV 直入和 OpenClaw 会话两种导入模式。

详细测试说明见 TESTING.mdoG-Memory + OpenClaw 联调说明见 OGMEMORY_OPENCLAW_TESTING.md

目录结构

locomo-eval-kit/
├── README.md               ← 本文件
├── scripts/
│   ├── run_eval_case0.sh   ← 标准 case0 评测(locomo10.json sample 0)
│   ├── run_eval_small.sh   ← small 全量评测(locomo10_small.json)
│   ├── run_eval_full.sh    ← 完整评测(locomo10.json 全部 10 samples)
│   ├── eval.py             ← 核心:会话注入 + QA 评测
│   ├── import_to_ov.py     ← 核心:OV 直接导入
│   ├── judge.py            ← 核心:LLM 评分
│   ├── stat_judge_result.py← 核心:结果统计
│   ├── report.py           ← 核心:错误分析报告生成
│   └── config.toml.example ← run_benchmark.py 用的配置模板(参考)
├── data/
│   ├── locomo10.json       ← 完整数据集(2.8MB,10 samples)
│   └── locomo10_small.json ← 精简数据集(27KB)
├── tools/
│   └── clean_openclaw.py   ← 清理 OpenClaw sessions 工具
└── result/                 ← 评测结果输出目录

数据集对照

脚本 数据文件 规模 预估时间
run_eval_case0.sh locomo10.json --sample 0 1 sample / ~35 QA ~5-7 分钟
run_eval_small.sh locomo10_small.json(全部 samples) 多 samples / 精简 ~10-15 分钟
run_eval_full.sh locomo10.json(全部 10 samples) 10 samples / ~350 QA ~40-60 分钟

前置依赖

Python 环境

pip install requests openai python-dotenv
pip install openviking   # OV 直入模式需要

服务

服务 用途 默认地址
OpenClaw Gateway QA 评测 + OpenClaw 会话导入 http://127.0.0.1:19789
OpenViking HTTP OV 直入导入 http://127.0.0.1:2934

环境变量

# Gateway Token(也可通过 --gateway-token 参数传入)
export OPENCLAW_GATEWAY_TOKEN="your_token_here"

# Judge 模型 API Key(judge.py 从环境变量读取)
export ARK_API_KEY="your_ark_api_key"
# 或
export OPENAI_API_KEY="your_api_key"

快速开始

cd scripts
chmod +x run_eval_*.sh

# 1. 标准 case0(推荐首次测试用这个)
./run_eval_case0.sh --import-mode ov --gateway-token YOUR_TOKEN

# 2. small 全量
./run_eval_small.sh --import-mode ov --gateway-token YOUR_TOKEN

# 3. 完整 10 samples
./run_eval_full.sh --import-mode ov --gateway-token YOUR_TOKEN

导入模式说明

每个脚本都通过 --import-mode 指定导入方式:

模式 说明 适用场景
ov OV 直接导入(import_to_ov.py 测 recall/记忆质量,跳过 agent 循环
claw OpenClaw 会话导入(eval.py ingest 测完整 agent 流程(注入→compact→commit→archive)
both OV + OpenClaw 并行导入 对比两种路径的记忆差异
skip 跳过导入,直接 QA 已有数据,只想重跑 QA/Judge

全部可选参数

参数 说明 默认值
--import-mode MODE 必填。ov / claw / both / skip
--run-id NAME 运行标识(结果目录名后缀) 时间戳
--force-ingest 强制重新导入(忽略已完成记录)
--qa-parallel N QA 并发数 case0=5, small=10, full=15
--judge-parallel N Judge 评分并发数 case0=10, small=10, full=20
--gateway-url URL OpenClaw Gateway 地址 http://127.0.0.1:19789
--gateway-token TOKEN Gateway 认证 Token 环境变量 OPENCLAW_GATEWAY_TOKEN
--ov-url URL OpenViking 服务地址 http://127.0.0.1:2934
--skip-judge 跳过 Judge 评分
--skip-stat 跳过统计
--sample N (仅 full)只跑指定 sample 全部

评测流程

Step 1: 导入(OV 直入 / OpenClaw 会话 / 两者并行)
  ↓
Step 2: QA 评测(eval.py qa → qa_results.csv)
  ↓
Step 3: Judge 评分(judge.py → 更新 csv 中 result/reasoning 列)
  ↓
Step 4: 统计(stat_judge_result.py → summary.txt)
  ↓
Step 5: 错误分析报告(report.py → error_analysis.md + findings.json)

结果目录

每次运行会在 result/ 下创建独立目录:

result/case0_20260420_153000/
├── qa_results.csv        ← QA 回答 + Judge 评分结果
├── import_success.csv    ← 导入成功记录(OV 模式)
├── import_ov.log         ← OV 导入日志
├── import_claw.log       ← OpenClaw 导入日志(claw/both 模式)
├── qa.log                ← QA 运行日志
├── judge.log             ← Judge 评分日志
├── stat.log              ← 统计输出日志
├── summary.txt           ← 最终准确率统计
└── report/               ← 错误分析报告(report.py 生成)
    ├── locomo_error_analysis.md   ← 分析报告
    └── locomo_findings.json       ← 结构化错误数据

清理工具

# 清理 OpenClaw sessions(重新导入前使用)
python tools/clean_openclaw.py

自定义端口

如果部署环境的端口不同于默认值:

./run_eval_case0.sh \
    --import-mode ov \
    --gateway-url http://127.0.0.1:18789 \
    --ov-url http://127.0.0.1:1933 \
    --gateway-token YOUR_TOKEN

错误分析报告(report.py)

评测完成后,可用 report.py 对错误样本进行深度分析,生成失败模式标注(A–G)和分析报告。

前置条件

  • qa_results.csv 中 Judge 已完成(resultreasoning 列已填充)
  • LLM 模式需要 API Key(同 judge.py,使用 ARK_API_KEYOPENAI_API_KEY

基本用法

# LLM 增强模式(推荐,生成完整 13 节分析报告)
python scripts/report.py \
  --input result/small_xxx/qa_results.csv \
  --api-key "$ARK_API_KEY"

# 纯计算模式(不需要 API Key,输出统计结果和基础报告)
python scripts/report.py \
  --input result/small_xxx/qa_results.csv \
  --no-llm

全部参数

参数 说明 默认值
--input 必填,qa_results.csv 路径
--output-dir 输出目录 与 input 同目录
--api-key LLM API Key ARK_API_KEY / OPENAI_API_KEY 环境变量
--base-url LLM API 地址 https://ark.cn-beijing.volces.com/api/coding/v3
--model LLM 模型名 doubao-seed-2.0-code
--no-llm 跳过 LLM,仅输出计算统计 关闭
--lang 报告语言:zh / en zh(中文)

输出产物

文件 说明
locomo_error_analysis.md 分析报告(LLM 模式含 13 节完整分析;纯计算模式含 8 节基础统计)
locomo_findings.json 结构化数据,含每条错误的 Pattern 标注、信号值、归因,可跨运行 diff 对比

失败模式(A–G)

模式 名称 信号
A 过度拒绝 预测含拒绝短语 + overlap < 0.3
B 时间偏移 类别为 Temporal 的错误
C 过度泛化 预测用泛化词替代具体实体
D 幻觉/错误事实 无拒绝短语 + overlap < 0.3 + 模型表达自信
E 近命中但否认 含拒绝短语 + overlap ≥ 0.3
F 计数/时长偏差 数量类问题中数值不匹配
G 推理回避 推理类问题 + 拒绝回答

与评测流程集成

# 评测后自动生成报告
./run_eval_small.sh --import-mode claw --gateway-token YOUR_TOKEN
LATEST=$(ls -td result/small_*/ | head -1)
python report.py --input "${LATEST}qa_results.csv" --api-key "$ARK_API_KEY"

渲染 PDF

pandoc locomo_error_analysis.md -o locomo_error_analysis.pdf \
  --pdf-engine=xelatex \
  -V CJKmainfont="Noto Sans CJK SC" \
  -V geometry:margin=20mm -V papersize=a4

常见问题

Q: OV 导入后 QA 结果异常? A: 确保导入完成后 OV 有足够时间处理(脚本已内置等待时间)。如果仍有问题,重启 OV 再试。

Q: Judge 评分报 API Key 错误? A: 设置 ARK_API_KEY 环境变量,或在 ~/.openviking_benchmark_env 文件中配置。

Q: 如何只重跑 Judge 不重跑 QA? A: 直接调用 python scripts/judge.py --input result/xxx/qa_results.csv

Q: report.py 报 No errors found? A: 确认 qa_results.csvresult 列已由 judge.py 填充(CORRECT/WRONG)。如果 Judge 未运行,所有记录都被视为未评分。

Q: 没有 API Key 能用 report.py 吗? A: 可以,加 --no-llm 即可输出纯计算的分析结果(Pattern 标注、交叉矩阵、统计表等),只是不含 LLM 生成的定性分析和辩证自查。