Agent Engineering 课程阅读
首页/课程七 · 智能体前沿/Eval Harness:让每个机制的收益有数字

在 GitHub 查看原文

本页目录

Lesson 09 — Eval Harness:让每个机制的收益有数字

本课目标:建立回归式评估基线——机制开关矩阵(全关/全开/单开)× 任务变体集 × 轨迹评估 = 机制收益表。把"加了记忆更好"从感觉变成表格里的数字。

学完你能回答:「你怎么知道你加的那些机制(记忆/反思/代码)真的有用?」——有回归评估,机制开关矩阵,收益全部量化。


0. 起点:L08 评估体系,但没有自动化

L08 建了 TrajectoryEvaluator(评一条轨迹)。但手动评估一条一条太慢——要对比"开记忆 vs 关记忆"得跑两组、评估两组、手动算差值。

本课建 harness:自动化这个对比。给它一组任务 + 一组开关配置,它自动跑所有组合、评估、产出收益表。


1. Agent 评估的特殊坑

坑1:非确定性

同一个 prompt,Agent 两次跑可能走不同路径(LLM 温度 > 0、搜索结果变化)。

应对:重复跑取分布,不看单次。本课简化为单次 + 标注(mock 模式下)。生产应跑 N 次取均值±标准差。

坑2:评估集设计

不是随便几个任务就行——任务要能区分"有机制 vs 无机制"

能区分的任务(好):
  "MCP 各年份工具数量对比" → 开了 code 才能算,关了只能口算 → 区分度高

不能区分的任务(差):
  "MCP 是什么" → 有没有记忆都能答 → 区分度低

task_set.json 设计原则:每个任务标注 tests_mechanism,确保覆盖各机制的可区分场景。

坑3:成本控制

评估也烧 token(每个任务跑一次 = 几次 LLM 调用 × N 个任务 × M 个配置)。

应对: - 无 API 时用 mock 路径出流程演示(不烧钱,但数字不真实) - 真实评估用 fast 模型 judge(便宜)、抽样(不全跑) - 本课的 mock 模式零成本验证流程,--real 模式才烧钱


2. 开关矩阵

┌─────────────── 开关矩阵 ───────────────┐
│                                        │
│   配置          memory  skills  code   │
│   ────────────  ──────  ──────  ─────  │
│   全关(基线)    ❌      ❌      ❌    │
│   全开(v2)      ✅      ✅      ✅    │
│   仅记忆          ✅      ❌      ❌    │
│   仅代码          ❌      ❌      ✅    │
│                                        │
└────────────────────────────────────────┘
         × 8 个任务变体
         = 32 次运行
         → TrajectoryEvaluator 评估
         → 机制收益表

单机制开关的价值

不只是"全关 vs 全开"——单开某个机制能看这个机制单独的边际收益: - 全关 → 仅记忆:记忆的边际收益 - 仅记忆 → 全开:加上 skills+code 的边际收益 - 全关 → 仅代码:代码的边际收益


3. 任务变体集

task_set.json(8 个任务),每个标注: - tests_mechanism:测什么机制 - requires_memory/code/conflict:需要哪些机制才能做好

ID 主题 测的机制
T01 MCP 协议核心设计 memory(第2次记得)
T02 各年份工具数量对比 code(走代码计算)
T03 MCP vs function calling skills(对比表)
T04 SDK 支持的语言 memory(第2次记得)
T05 是否基于 gRPC conflict(冲突修正)
T06 场景统计 code(分类统计)
T07 演进路线图 memory+reflection(增量追踪)
T08 增长率趋势 code+memory(综合)

4. 流派对比

问题:怎么自动化评估 Agent 机制收益?

流派 做法 取舍
① 手动跑手动评 跑一次看一次 ✅ 灵活;🚫 不可重复、主观
② 端到端集成测试 CI 里跑完整流程 ✅ 自动;🚫 只知道通过/失败,不知道指标差异
③ 开关矩阵 harness(本课选它) 配置矩阵 × 任务集 × 评估器 ✅ 可量化、可重复、隔离单机制;🚫 搭建成本

选 ③ 的理由:这正是"回归测试"在 Agent 领域的对应——传统软件回归测试是"改了代码别弄坏功能",Agent 回归评估是"加了机制别弄坏质量+能看到收益"。开关矩阵让每个机制的边际收益隔离可见。


5. 落地清单

改了哪些文件

文件 改动 说明
eval_agent/task_set.json 新增 8 个任务变体(覆盖各机制可区分场景)
eval_agent/run_harness.py 新增 开关矩阵 × 任务集 × TrajectoryEvaluator → REPORT.md
eval_agent/REPORT.md 生成 机制收益表(mock 演示数字,诚实标注)

如何验证

cd portfolio-projects/research-assistant

# 1. mock 模式跑 harness(零成本,演示流程)
python eval_agent/run_harness.py
# 预期:生成 REPORT.md,含全关/全开/单机制对比表

# 2. 看报告
cat eval_agent/REPORT.md
# 预期:机制收益表 + 关键发现 + 数字来源标注

# 3. 真实模式(需 API key,烧 token)
python eval_agent/run_harness.py --real
# 预期:真实数字替代 mock 演示数字

演示

cd frontier-lessons/09_eval_harness
PYTHONIOENCODING=utf-8 ../../.venv/Scripts/python.exe code.py

6. 本课在两条主线上的位置

  • 评估主线:本课是评估主线的收官——L08 建评估器,L09 建自动化 harness。至此,"加了机制有没有用"从 L00 的"感觉"变成了 L09 的"表格里的数字"。这是整个评估主线的闭环。
  • 上下文工程主线:评估结果反过来指导上下文工程改进——如果 harness 显示"记忆召回率低",说明 recall 的匹配策略要优化;如果"代码执行率低",说明路由判断要调。评估是上下文工程的反馈环。

🎯 面试话术

「我给智能体建了回归评估:8 个任务变体、机制开关矩阵(全关/全开/单开)、用 L08 的 TrajectoryEvaluator 评轨迹指标。跑出来一张机制收益表——记忆召回从 0% 到 100%、代码执行从无到有。"加了记忆更好"在我这不是感觉,是表格里的数字。而且我诚实标注了 mock 演示和实测的区别——没跑过的不编数字。」