Skip to content

第 39 章 Chapter Outline:Harness 测试策略与 Benchmark

写作契约

本章要完成的学习目标

读者完成本章后应能:

  1. 将 Harness 的验证拆成组件/契约、边界/集成、完整任务、离线 Benchmark 和线上观察五层,并说明每层能证明什么、不能证明什么。
  2. 为一个评估套件(Eval Suite)写出任务范围、输入与环境版本、试次策略、评分器、必过项、停止条件和未覆盖范围。
  3. 用基准卡(Benchmark Card)限制分数的适用范围,识别构念失配、分布错配、评分器漂移、集合污染与单一平均分掩盖失败等风险。
  4. 用回归测试矩阵(Regression Test Matrix)比较同条件的基线与候选版本,并在不可比较、硬性门失败或证据不足时保守停止。
  5. 为虚构最小 Harness 设计受控成功、工具失败、权限拒绝和上下文缺失四类任务;能指出真实模型、工具、权限、网络、生产流量和发布决定仍未发生。

读者、前置与明确边界

  • 读者: 已能阅读测试用例、结构化记录与基础统计汇总,需要把一次性演示升级为可持续回归证据的工程、测试、AI 和技术管理读者。
  • 前置: 第 10 章的 Workflow/状态边界,第 11/12 章的工具结果、环境与权限,第 15 章的观察记录,第 17 章的 Evaluation Spec、评分器和质量门,第 31 章的 API/UI 分层测试,第 38 章的评估/批准责任断点。
  • 本章负责: 组织五层测试策略,定义 Eval Suite、Benchmark Card 与 Regression Test Matrix,解释离线/线上反馈关系和 Benchmark 结论边界。
  • 本章不负责: 真实模型或 Agent 运行、外部工具、文件、网络、账户、凭证、生产流量、用户数据、在线实验、成本预算、安全审计、身份/权限实现、发布、回滚或 A/B 判断。第 40、41、42 章分别承担资源、安全和版本发布责任。

来源与本书模型的分层

使用位置可归因材料本章允许的有限陈述本书原创内容
第 1、4、5、6、9 节CH39-REF-01 / REF-061Anthropic 文章在其语境中定义 task、trial、grader、transcript、outcome、evaluation harness、agent harness,并区分 capability eval 与 regression eval。五层测试模型、四类教学场景、必过项、试次记录、回归矩阵字段与路由。
第 5、8 节CH39-REF-02 / 待分配OpenAI 动态指南建议任务特定、接近真实分布、持续评估、记录开发数据,并以人工反馈校准自动评分。线上信号候选化、隐私/责任审查入口、离线套件准入和刷新条件。
第 4、7、8、9 节CH39-REF-03 / REF-062NIST AI RMF Core 在风险管理语境中讨论部署前与运行期测试、量化/质化/混合测量、Benchmark、监测、记录、不确定性和适用条件。Harness Test Record、硬性门、不可比较状态、发布前证据包与本章字段设计。
第 7 节CH39-REF-04 / 待分配Raji 等的论文讨论把少数 Benchmark 当作广泛通用进步替代指标时的构念效度问题。Benchmark Card、用途声明、外推边界、适用期限与污染风险检查。
第 6、7 节CH39-REF-05 / 待分配HELM 论文以场景/指标分类、多指标评估、代表不足项和公开原始输入输出提高语言模型评估透明度。“场景 × 证据维度”矩阵、硬性门与诊断指标分离,以及本章的任务分组。

正文必须明确写出“来源文章/框架/论文在其语境中指出”或“本书工程模型/虚构教学输入”。不得将这些来源改写为行业标准、固定测试比例、统计阈值、平台 API、Benchmark 排名、模型能力、产品安全或部署许可。

章节叙事与逐节蓝图

1. 一次绿色演示为何不能成为发布证据

  • 要回答的问题: 一个最小 Harness 在单次成功输入上返回正确结果后,还缺少哪些证据,为什么不能直接声明“系统已验证”?
  • 场景输入: 虚构 Harness 收到一个完整上下文和成功工具结果,并在一次教学记录中输出目标状态;同时没有工具失败、权限拒绝、上下文缺失、重复试次或版本对比证据。
  • 来源边界: CH39-REF-01 只用于说明 Agent 评估需要关联 task、trial、transcript、outcome 与 Harness/模型组合;不引用客户效果、性能数字或公开 Benchmark 分数。
  • 本书模型: 建立“声明—所需证据—已有证据—缺口—允许结论”五列表,把单次 success 限定为一条试次记录。引出五层测试模型,并标明 one_green_trial ≠ reliable_harness
  • 计划工件: 一张 Harness Test Record 草表,字段包含任务、Harness/模型/工具/环境版本、输入范围、轨迹指针、结果观察、评分器与未覆盖项;该表是后续 Eval Suite 的输入,不是运行日志。
  • 验证与未运行边界: 读者应能从单次记录中列出至少四类缺口,而不是推测系统能力。本阶段不创建记录生成器,不运行模型、工具、测试、Benchmark 或生产环境。
  • 过渡: 先把确定性逻辑从完整 Agent 运行中分离,才能以较低成本定位第一类缺陷。

2. 组件与契约层:先验证能被确定性判定的逻辑

  • 要回答的问题: 哪些 Harness 行为可以不调用模型和外部工具就被精确测试,哪些结果不能由这一层推出?
  • 来源边界: CH39-REF-01 对代码型评分器的讨论只作为可重复、可调试检查的工程背景;“组件/契约层”及其范围划分是本书模型。
  • 本书模型: 把指令装配、输入校验、工具路由、状态迁移、错误分类、评分规则和发布路由中的纯逻辑列为候选对象。每项都用输入契约、公开输出、失败类别和禁止副作用描述。
  • 计划案例: 四类教学任务先只检查其静态契约:成功场景是否具备完整上下文;工具失败是否有可分类错误;权限拒绝是否保持 denied;上下文缺失是否停止而非补猜。
  • 计划工件: “组件—输入—断言—不能证明”矩阵。示例中不得断言私有函数调用、模型推理过程或真实权限状态。
  • 验证与未运行边界: 后续测试只能证明注入对象符合本书契约;不能证明适配器、模型、工具、网络、权限系统或生产数据可用。Outline 阶段不创建代码或测试。
  • 过渡: 组件逻辑通过后,还需检查数据跨越工具和环境边界时是否保持契约与可观察错误。

3. 边界与集成层:替身要暴露失败,不要伪造生产成功

  • 要回答的问题: 如何用受控替身或隔离环境验证工具、权限和状态边界,同时避免把替身通过写成真实依赖已验证?
  • 来源边界: 本节主要是本书工程扩展,承接第 11、12、31 章;CH39-REF-01 只用于说明评估 Harness 会提供工具、环境并记录步骤,不规定本章的适配器或替身设计。
  • 本书模型: 边界契约至少记录请求、关联标识、适配器版本、受控响应、效果状态、错误类型、超时/拒绝出口和清理责任。替身必须能够返回成功、明确失败、效果未知和权限拒绝,而不只实现快乐路径。
  • 计划案例: 工具失败任务注入结构化错误信封;权限拒绝任务注入策略拒绝;上下文缺失任务在调用前停止。受控成功仅返回教学结果,不读写真实目标。
  • 计划工件: Integration Boundary Matrix,逐项写出使用真实依赖、受控替身或不适用,并记录替身与真实接口之间尚未验证的差异。
  • 验证与未运行边界: 后续集成测试应断言公开结果、效果状态和停止路径,不以“调用了 mock”作为业务成功。当前不启动沙箱、容器、浏览器、API、数据库、文件或网络。
  • 过渡: 组件和边界测试能定位局部错误,但用户任务是否完成仍需要在完整任务层关联轨迹与结果状态。

4. 完整任务层:轨迹合理与结果正确必须分别核验

  • 要回答的问题: 端到端任务应观察哪些对象,为什么最终文本、轨迹或结果状态中的任何一个都不能单独代表任务成功?
  • 来源边界: CH39-REF-01 的 transcript/outcome 区分用于说明轨迹与最终环境状态是不同证据;CH39-REF-03 只提供测试条件接近部署语境、记录工具/指标/局限和不确定性的风险管理背景。
  • 本书模型: 完整任务记录关联任务版本、环境摘要、允许/禁止效果、轨迹证据、结果观察、多个评分器、硬性门和未知项。正文用 reported_success ≠ observed_outcomeclean_trace ≠ correct_outcome 两条断点说明双向误判。
  • 计划案例: 四类任务分别定义完整任务出口:成功需满足结果契约;工具失败需保持失败可见且不误报成功;权限拒绝需证明动作未进入候选执行;上下文缺失需输出补证/停止而非推测。
  • 计划工件: End-to-End Task Card,包含成功、失败和不可判定三类结果,不把超时或缺证据自动记为失败已确认。
  • 验证与未运行边界: 后续纯内存示例只评估注入卡片是否完整,不产生真实 transcript/outcome。真实端到端运行需另行建立环境契约、权限和清理流程,本章不实施。
  • 过渡: 单个任务卡解决一次任务的判定;要比较多个变更,还需把任务组织成稳定、可版本化的 Eval Suite。

5. Eval Suite:固定集合不是文件清单,而是版本化测试契约

  • 要回答的问题: 怎样把分散用例组织成可重复运行的套件,并让能力探索、回归保护与安全必过项互不混淆?
  • 来源边界: CH39-REF-01 只提供 evaluation suite、多个 trial 以及 capability/regression eval 的文章内定义;CH39-REF-02 只提供任务特定、接近真实分布和持续评估的动态指南背景。
  • 本书模型: Eval Suite 最小字段为套件版本、目标用途、任务/场景版本、目标分布、环境契约、试次策略、评分器版本、必过项、聚合规则、停止条件、未覆盖项和负责人。能力任务可以保留探索性难例;回归任务保护已确认行为;两者不共享同一个模糊“总分及格线”。
  • 计划案例: 四类任务构成最小套件,每类至少声明正常输入、边界输入、禁止效果和缺证据出口。成功任务不能替代拒绝/失败任务,权限任务不能被其他任务平均抵消。
  • 计划工件: Eval Suite Template 与场景覆盖表;正文展示字段和一份虚构填表示例,不提供真实数据、样本量或分数。
  • 验证与未运行边界: 读者应能检查套件是否缺类别、缺环境版本、缺硬性门或把能力项误标为回归项。当前不创建数据集、测试文件、运行器、评分服务或真实套件结果。
  • 过渡: 套件明确了测什么;下一节处理同一任务多次运行和多个评分器如何汇总,而不隐藏不确定性。

6. 试次、评分器与多维结果:总体分数不能覆盖硬性失败

  • 要回答的问题: 面对非确定性输出,怎样保存试次差异、组合评分器并报告不确定性,而不捏造统一统计阈值?
  • 来源边界: CH39-REF-01 允许说明多个 trial 和代码/模型/人工评分器的取舍;CH39-REF-05 允许说明场景与多指标评估能暴露准确率以外的权衡。两者都不提供本章固定次数、权重或可靠性保证。
  • 本书模型: 结果按任务成功、过程约束、安全/权限边界、鲁棒性和资源信号分栏。确定性契约和禁止效果可作为硬性门;模型评分、人工判断与资源指标保留方法、版本和不确定性。任何聚合值旁边必须展示硬性失败、样本范围和缺失项。
  • 计划案例: 某候选在成功任务上通过,却在权限拒绝任务中产生越界候选;无论总体平均分如何,路由均为 regression_detectedblocked。另一候选只有一条试次,输出 needs_trials,不推断稳定性。
  • 计划工件: Trial Record、Grader Record 与“场景 × 证据维度”矩阵;字段保留评分器类型、输入证据、版本、结果和限制。
  • 验证与未运行边界: 后续示例只能根据注入记录识别缺试次、硬性失败或评分器不完整;不计算置信区间、显著性、排行榜或线上成功率。若正文需要统计方法,须先补一手来源。
  • 过渡: 多维结果仍只对当前任务集有效;Benchmark Card 用于限制这些结果被外推到不相干语境。

7. Benchmark Card:先说明测量构念,再解释分数

  • 要回答的问题: 为什么公开或内部 Benchmark 的高分不能自动代表 Harness 在真实任务中可靠,如何记录它能支持的最小结论?
  • 来源边界: CH39-REF-04 只支持对“广泛通用进步替代指标”的构念效度风险讨论;CH39-REF-05 只支持多场景、多指标、代表不足项与透明度背景;CH39-REF-03 提供适用条件、局限和不确定性记录的风险管理语境。
  • 本书模型: Benchmark Card 记录目标用途、目标用户/场景、被测构念、任务与数据来源、场景分布、环境、指标/评分器、已知缺口、污染/过拟合风险、适用期限、可比条件和复核责任。
  • 计划案例: 为四类任务的内部教学 Benchmark 写卡片:它只评估注入的最小 Harness 计划是否覆盖结果与保守停止,不代表任何当前模型、产品、生产环境或组织安全水平。
  • 计划反例: 展示三种错误解释:把格式分数外推为事实正确,把固定集高分外推为线上成功,把总分上涨解释为权限更安全;逐项指出缺失构念与证据。
  • 验证与未运行边界: 读者应能从卡片判断一个结论是否超出任务、数据、环境或指标范围。当前不下载公开 Benchmark、不运行模型、不复现论文数值,也不创建排行榜。
  • 过渡: 卡片限定离线结论,但真实使用会出现新输入和新失败;下一节说明线上信号如何成为候选,而非未经审查的真值。

8. 离线 Benchmark 与线上观察:反馈回流前先过数据与责任门

  • 要回答的问题: 线上失败、反馈和分布变化怎样改善离线套件,为什么不能直接把日志或点赞当成标准答案?
  • 来源边界: CH39-REF-02 允许说明持续评估、从日志发现案例和人工校准的高层建议;CH39-REF-03 允许说明运行期监测、反馈、适用语境和持续风险测量的风险管理背景。它们不授权收集用户数据或规定本章的准入流程。
  • 本书模型: 线上观察先形成候选卡,字段包括来源类别、授权/隐私状态、去标识化状态、任务分布、失败症状、可复现性、影响、证据缺口和负责人。只有经过范围、隐私、代表性与重复项审查后,才进入 Eval Suite 的候选队列。
  • 计划案例: 虚构线上信号显示“上下文不足时用户重复提问”。该信号只能提出新的上下文缺失候选任务;没有真实输入、授权和复现证据时,不能写成用户需求、模型缺陷或成功标准。
  • 计划图示关系: 离线层向候选发布门提供受限证据;线上观察向任务候选审查回流;图中不画“线上反馈 → 自动改 Prompt/Skill/模型”的直达箭头。
  • 验证与未运行边界: 本章只设计数据与责任门,不读取日志、个人数据、生产指标、账户、实验平台或监控系统,也不执行在线评估。
  • 过渡: 新任务进入套件后,发布候选必须与同条件基线比较;下一节用回归矩阵阻止版本和环境漂移造成伪改善。

9. Regression Test Matrix:只有同条件证据才能支持改进或回归

  • 要回答的问题: 如何比较 Harness、模型、工具或评分规则变更,并在条件不一致时拒绝给出“更好”结论?
  • 来源边界: CH39-REF-01 允许说明 regression eval 保护既有行为、capability eval 探索能力边界;CH39-REF-03 允许说明记录测试条件、工具、指标、局限与不确定性。比较字段和路由是本书模型。
  • 本书模型: Regression Test Matrix 按 Harness、模型、工具、任务集、环境、评分器和数据版本对齐基线与候选,记录每类场景结果、硬性门、波动、未覆盖项和刷新条件。任何关键版本缺失或条件不一致时输出 not_comparable
  • 计划案例: 候选版本修复工具失败分类,却改变了权限拒绝路由;矩阵同时标记局部改善与硬性回归,不能用净增分数放行。若评分器版本改变,则要求重建基线或补充桥接评估。
  • 计划工件: Regression Test Matrix 与发布前 Evidence Package 摘要;摘要只路由为 ready_for_reviewneeds_evidencenot_comparableregression_detectedblocked,不执行发布、批准或回滚。
  • 验证与未运行边界: 后续纯内存示例检查矩阵完整性与保守路由,不运行真实候选、CI、A/B 测试或版本回滚。第 42 章才讨论发布实验和回退机制。
  • 过渡: 最后一节把五层、三类工件和四类任务收成可实现但无副作用的示例计划与图示验收点。

10. 最小示例、图示、反模式与渐进增强

  • 要回答的问题: 如何把本章方法落成一个可验证的教学闭环,同时避免提前模拟真实 Benchmark、线上评估或发布系统?
  • 计划示例: Example Implementation 阶段再创建 Example Plan,并决定 assessHarnessEvaluationPlan(input) 的最终文件与测试入口。函数只读取注入的套件版本、四类场景、环境摘要、试次/评分器记录、硬性门、基线和候选矩阵,返回 ready_for_benchmarkneeds_scenariosneeds_trialsnot_comparableregression_detectedneeds_reviewblocked
  • 计划测试: 覆盖四类场景齐全的准备路径、缺权限拒绝场景、单试次声称稳定、硬性门被平均分掩盖、版本不可比较、评分器缺版本、局部改善伴随回归,以及线上观察未经审查直接入套件。测试只断言公开返回对象。
  • 计划图示: 后续 Mermaid 源暂定 diagrams/mermaid/chapter-39-harness-test-benchmark-loop.mmd,表达五层测试主链和“线上观察 → 候选任务审查 → 离线套件”的反馈链。图中明确 单层通过 ≠ 系统通过离线通过 ≠ 线上有效总体分数 ≠ 硬性门通过
  • 图示验收: Diagram Review 阶段才创建/导出/查看图示,并核对正文 Mermaid 块、.mmd、SVG/PNG、替代说明和箭头语义。Outline 阶段不声称图已存在或可渲染。
  • 常见错误: 只测快乐路径;用 mock 调用次数代替结果;把模型自评当真值;让平均分覆盖权限失败;基线/候选条件不同仍比较;公开 Benchmark 高分外推为产品可靠;线上日志未经隐私审查直接入集。
  • 渐进增强: 从四类纯内存场景开始;有真实适配器后增加隔离集成层;有受控端到端环境后增加结果观察;数据授权与责任明确后才建立线上候选回流;需要成本、安全或发布判断时分别进入第 40、41、42 章。
  • 验证与未运行边界: 本阶段不创建 Example Plan、函数、测试、图源、导出图、npm 入口或运行结果。任何后续“通过”只证明书稿与注入教学对象,不代表真实 Harness、模型、工具、生产流量或业务效果。

章节收束设计

计划总结

总结应回收三个判断:测试层级解决“证据从哪里来”,Eval Suite 与 Benchmark Card 解决“哪些任务和结论可比较”,Regression Test Matrix 解决“变更能否进入复核”。任何单层通过、单次试次或总体分数都不能越过硬性门、未覆盖项和责任边界。结尾连接第 40 章:资源信号在本章只是诊断字段,成本、延迟与 token 的预算和优化不得由第 39 章的质量分数替代。

计划练习

  1. 为一个只读研究 Harness 将六个候选检查分别放入组件、边界、完整任务或离线 Benchmark 层,并说明错误分层的后果。
  2. 为四类教学任务补一张 Eval Suite 表,标出哪一项是硬性门、哪一项只是诊断指标。
  3. 审查一张只给总分、不提供任务版本和失败分组的 Benchmark 报告,列出不能成立的三项结论。
  4. 比较两份评分器版本不同的候选结果,说明为什么应输出 not_comparable,以及需要补什么证据。
  5. 为一条虚构线上投诉设计候选准入卡,区分症状、可复现任务、隐私状态和尚不能主张的根因。

计划参考资料呈现

  • 正文引用 CH39-REF-01/REF-061 时只使用 Agent 评估结构、试次/评分器和能力/回归区分。
  • CH39-REF-02、CH39-REF-04、CH39-REF-05 必须等待主线程分配正式编号,并在 First Draft 写作当天重读或核对原始论文版本。
  • CH39-REF-03/REF-062 只用于风险测量、测试/监测、记录、适用条件与不确定性的框架背景。
  • 不写入任何来源中的当前产品操作步骤、模型选择、示例数字、排行榜、性能结论或客户案例。

Outline 验收清单

  • [x] 学习目标、前置知识、章节责任与相邻章节边界明确。
  • [x] 每节均写明读者问题、来源范围、本书模型、计划案例/工件、验证与未运行边界。
  • [x] 五层测试、Eval Suite、Benchmark Card、Regression Test Matrix 和四类教学任务均有逐节位置。
  • [x] 动态来源与待分配全局引用已标记,未把来源术语写成跨产品标准。
  • [x] 只建立写作蓝图,未创建正文、示例、图示、测试、运行器或结果。

从同一套 Markdown 书稿生成。