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
generate() 或 react(),样本没有 output,Scorer 只能得到空答案;先看日志里的消息序列。json_dataset() 默认找 input/target,自定义列名要显式映射;字段对不上时分数会恒为 0。openai/gpt-4o-mini);只写模型名可能解析到错误提供方或直接报错。--max-connections 默认 10,直连 API 时过高会触发 429;限流应降低并发并区分“调用失败”和“答错”。model_graded_qa() 不指定裁判模型时会用被评测模型自评,成本和偏差都会放大;传独立且更强的 model=。--epochs 后指标按 reducer 汇总,不能只看单轮分数;确认 --epochs-reducer 与业务口径一致。.eval 升级后先转换再重跑基线。mockllm/model 判断模型质量?generate() 或带工具的 react();Scorer 把答案与目标或裁判结果比较并产出分数。eval(task(), model="mockllm/model"),断言 log.status 和样本数,用 pytest -q 执行;真实质量评测再用真实模型并保存、对比 .eval 日志。mockllm/model 返回预设的固定内容,只验证任务装配、Scorer 和日志链路是否正常,不调用真实模型,因此不能反映模型回答质量。