inspect-ai

UK AISI 的 LLM 评测框架,用 Task、Solver、Scorer 组织可复现的离线评测。

补充说明

Inspect AI 把一次评测拆成 Task(数据集)、Solver(生成答案)和 Scorer(判分)。generate() 让模型直接回答,react() 让 Agent 调用工具;includes()、match() 适合确定性答案,model_graded_qa() 用裁判模型打分。每次运行写出 .eval 日志,便于对比模型、提示词和代码版本。

它适合离线回归、Agent 能力评估和带沙箱的执行型任务,不是生产追踪工具。生产观测用 LangSmith/Langfuse;Ragas、DeepEval 更偏 RAG 指标和单元测试;lm-eval 更偏学术 benchmark。Inspect 的优势是把任务执行、工具沙箱、日志查看和 CI 集成放在同一套抽象里。

版本注意:模型提供方前缀、日志格式和 CLI 选项会随版本变化,旧教程的写法不一定兼容;升级后先用 inspect log convert 迁移日志,具体以当前版本文档为准。

常用示例

安装并配置模型提供方:

pip install -U inspect-ai
export OPENAI_API_KEY="sk-..."

定义最小任务;JSONL 数据集默认读取 input 和 target 字段:

cat > task.py <<'PY'
from inspect_ai import Task, task
from inspect_ai.dataset import json_dataset
from inspect_ai.scorer import includes
from inspect_ai.solver import generate
@task
def qa():
    return Task(dataset=json_dataset("qa.jsonl"), solver=generate(), scorer=includes())
PY

运行任务并控制样本数、轮数和日志目录;--sample-id 可只重跑失败样本:

inspect eval task.py --model openai/gpt-4o-mini --limit 20 --log-dir ./logs
inspect eval task.py --model openai/gpt-4o-mini --sample-id 44,63 --epochs 2

在 Python 中运行单个任务并读取结果:

python - <<'PY'
from inspect_ai import eval
from task import qa
log = eval(qa(), model="openai/gpt-4o-mini", log_dir="logs")[0]
print(log.status, log.results)
PY

启动本地查看器浏览样本、评分和工具调用轨迹:

inspect view --log-dir ./logs --port 7575

用 CLI 列出和导出日志,不必写 Python:

inspect log list --json --log-dir ./logs
inspect log dump file:///abs/path/logs/run.eval

接入 pytest/CI 时用 mockllm/model 验证评测管线本身,不要把它的输出当质量结论:

cat > test_eval.py <<'PY'
from inspect_ai import eval
from task import qa
def test_pipeline():
    log = eval(qa(), model="mockllm/model", log_dir="test-logs")[0]
    assert log.status == "success" and len(log.samples or []) == 1
PY
pytest -q test_eval.py

易错点与排错

相关命令

读完自测

  1. Task、Solver、Scorer 各自负责什么?
  2. 怎样把 Inspect 评测接进 pytest/CI?
  3. 为什么不能用 mockllm/model 判断模型质量?
答案
  1. Task 提供数据集和运行配置;Solver 生成答案,例如 generate() 或带工具的 react();Scorer 把答案与目标或裁判结果比较并产出分数。
  2. 在测试文件里调用 eval(task(), model="mockllm/model"),断言 log.status 和样本数,用 pytest -q 执行;真实质量评测再用真实模型并保存、对比 .eval 日志。
  3. mockllm/model 返回预设的固定内容,只验证任务装配、Scorer 和日志链路是否正常,不调用真实模型,因此不能反映模型回答质量。