AI Harness 深度解析:从概念到工程实践

AI Infrastructure 续篇

上一篇《从一次 tenantId 联调 bug,看我们该怎么给 AI 项目补齐 harness》里,我记录了一个真实项目中的 harness 搭建过程。

那次经历让我意识到:

AI 工程化的竞争力,不是”谁的模型更像天才”,而是”谁先把自己的真实环境整理成一个不会误导 agent 的工作台”。

但「补齐 harness」这件事,说起来容易,做起来却有很多模糊地带——

  • Harness 到底包括哪些具体的东西?
  • 什么场景下应该优先补哪部分?
  • 业界那些号称”零手写代码”的项目,他们的 harness 是怎么设计的?

这篇不聊具体 bug 了,我想从概念、分类、工程实践三个层面,把 Harness 这件事系统地理清楚。

如果你也在搞 AI Coding,正在困惑”除了写 prompt 还应该做什么”,这篇应该能帮到你。

[^1]: Harness engineering: leveraging Codex in an agent-first world - OpenAI, 2026-02-11


什么是 Harness?

Harness = 用来控制、驱动、约束、评估一个系统行为的外部执行框架

换句话说:

  • ❌ 不是业务逻辑
  • ✅ 是”包在系统外面的一层控制系统”

类比理解

类比 含义
马具(Horse Harness) 控制马的方向和行为
安全带 限制人的自由,保证安全
Test Harness 控制程序执行并验证结果

核心本质:让一个”有能力但不可控”的系统变得可控。[^2]

[^2]: Test harness - Wikipedia


传统软件中的 Harness(你其实一直在用)

在 AI 火爆之前,Harness 这个概念已经在软件工程中存在几十年了。你可能每天都在用,只是没意识到。

1. Test Harness(测试框架)——最经典

这是 Harness 一词在软件工程中最常见的用法。

1
2
3
4
5
6
7
8
9
被测系统(SUT) ←→ Test Harness

┌───────┴───────┐
│ - 输入构造 │
│ - Mock/Stub │
│ - 执行控制 │
│ - 输出验证 │
│ - 日志收集 │
└───────────────┘

实际例子

  • JUnit / TestNG 测试框架
  • 集成测试时启动的嵌入式数据库(H2)
  • 模拟外部 API 的 WireMock / MockServer

2. Benchmark Harness(基准测试框架)

Java 开发者最熟悉的 JMH(Java Microbenchmark Harness)就是典型代表。[^3]

[^3]: JMH - OpenJDK

1
2
3
4
5
6
7
8
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.MILLISECONDS)
public class MyBenchmark {
@Benchmark
public void testMethod() {
// 被测代码
}
}

Harness 的作用

  • 预热 JVM,消除 JIT 编译影响
  • 多轮运行,统计置信区间
  • 控制 GC 时机,减少干扰
  • 输出标准化的性能报告

3. Integration Harness(集成测试框架)

日常开发中常用的:

1
2
3
4
5
6
7
8
9
10
11
12
# docker-compose.test.yml
version: '3'
services:
app:
build: .
depends_on:
- postgres
- redis
postgres:
image: postgres:15
redis:
image: redis:7

这就是一种 Harness——构造一个可控的系统环境

其他例子

  • 流量回放工具(GoReplay、TCPReplay)
  • 混沌工程工具(Chaos Monkey)
  • 负载测试工具(JMeter、k6)

4. 安全 Harness

  • 沙箱(Sandbox):限制程序能访问的资源
  • Seccomp:Linux 系统调用过滤
  • 浏览器沙箱:Chrome 的多进程架构

这些都是 Harness 的变体:给”有能力但不可控”的系统加上约束

说明:上文采取的是”广义 harness”用法,用来帮助理解”外层控制框架”这一共同本质;在不同子领域里,具体术语并不完全相同(如 sandbox/seccomp 更常见的分类是 security isolation,test harness 是软件工程的固定用法,而 agentic coding 语境下的 harness 更接近 orchestration + context + tools + validation + feedback loops)。


2025 年底到 2026 年初:长时自主 Agent 的工程实践升温

到 2025 年底到 2026 年初,行业里关于长时自主 agent 的工程实践明显升温,多个团队开始公开分享长时任务、多 agent 协作、可读环境与 harness 设计经验。

从”人类驱动”到”长时自主”

之前的 AI 工具(包括 ChatGPT、Copilot)大多是人类驱动的——你需要不断提示下一步动作。

但 2026 年的新趋势是长时自主智能体(long-running autonomous agents)

  • OpenClaw:通过内存上下文 + 触发器 + Cron 任务,实现持续自主运行
  • Cursor:报告了一个”构建浏览器”的长时自主编码实验,官方写法是 over 1 million lines of code;他们同时还展示了其他长期并发 agent 项目
  • Anthropic:用并行 Claude agents 构建了一个 Rust 写的 C compiler,重点不是”炫技”,而是总结如何为长时自主 agent team 设计 harness

这些项目的共同点是:AI 不再等待人类指令,而是自主规划和执行长时任务

新问题出现了

当 AI 可以连续运行数小时甚至数天时,Prompt Engineering 和 Context Engineering 都不够了:

  • 如何确保跨会话的上下文连贯?
  • 如何让下一个”接手”的 Agent 快速理解当前项目状态?
  • 如何验证 Agent 的产出是否正确(而不是让它自己说”完成了”)?
  • 如何设计工具和环境,让模型表现最佳?

这就是 Harness Engineering 要解决的问题。


为什么 AI 时代 Harness 突然重要?

因为 LLM = 非确定性系统(Non-deterministic system)

传统软件 vs AI 系统

维度 传统软件 AI 系统
行为决定 代码决定 Prompt + Model + Context
确定性 确定性 概率性
断言方式 assertEquals(expected, actual) 自然语言输出(无限空间)
可预测性 同一输入永远同一输出 同一 Prompt 可能不同结果

同一个 Prompt:

  • 第一次正确
  • 第二次错误
  • 第三次又正确

这就是 AI 开发的日常。


从 Prompt Engineering 到 Harness Engineering

阶段一:Prompt Engineering(2023-2024)

关注点是”我怎么写 prompt 更聪明”。

1
给定角色 + 分步骤 + 加示例 → 期望输出

阶段二:Context Engineering(2025)

Andrej Karpathy 在 2025 年的推文中强调:**”context engineering > prompt engineering”**。[^4]

关注点是”模型在推理时能看到什么完整上下文”。

1
RAG + MCP + Memory + 外部工具 → 丰富上下文

[^4]: Andrej Karpathy on X - 2025

阶段三:Harness Engineering(2026-)

当 AI 智能体开始执行长时自主任务(long-running autonomous tasks),Context Engineering 也不够用了。

Harness Engineering 的核心关注点

  1. 跨会话设计 —— 任务可能持续数小时、数天,需要中断和恢复
  2. 多智能体协作 —— 不同 Agent 如何接力完成任务
  3. 上下文检索 —— 每个新会话如何快速获取相关上下文
  4. 工具设计 —— 选择什么样的工具让模型表现最佳
  5. 验证机制 —— Agent 会过早声明”完成”,需要独立验证

智能体的常见问题

  • 忽略团队规范
  • 生成违反架构依赖方向的代码
  • 在并行执行时相互冲突
  • 通过”熵增”逐渐降低代码质量
  • 过早声明任务完成(而实际上有 bug)

这些问题不是”模型应该看到什么”,而是:

“系统应该阻止什么、测量什么、修复什么、验证什么”

2026 年 2 月,HashiCorp 联合创始人 Mitchell Hashimoto 在博客中明确使用了 “harness engineering” 这一说法,并赋予了它清晰的工程含义:”I don’t know if there is a broad industry-accepted term for this yet, but I’ve grown to calling this ‘harness engineering.’” [^5]

[^5]: Mitchell Hashimoto - My AI Adoption Journey - 2026-02


AI Harness 的核心定义

AI Harness = 用于系统性验证、评估、对比、约束 LLM 行为的工程基础设施

架构组成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
┌──────────────────────┐
│ Test Dataset │ ← 测试数据集(Prompt + Context)
│ (Prompt + Context) │
└─────────┬────────────┘

┌──────────────────────┐
│ Harness │ ← 执行框架
│ │
│ - 调用模型 │
│ - 控制参数 │
│ - 重试策略 │
│ - 日志记录 │
└─────────┬────────────┘

┌──────────────────────┐
│ Evaluator │ ← 评估器(规则 / LLM评估)
│ (规则 / LLM评估) │
└─────────┬────────────┘

┌──────────────────────┐
│ Metrics │ ← 指标(准确率 / 稳定性 / 延迟)
│ (accuracy / score) │
└──────────────────────┘

真实案例:没有 Harness vs 有 Harness

场景:客户对话意图识别

输入:客户说”这个太贵了”
期望输出:{"intent": "价格异议"}

❌ 没有 Harness

  • 手动调 Prompt
  • 靠感觉判断效果
  • 不可复现

👉 玄学开发

✅ 有 Harness

Step 1:构建测试集

1
2
3
4
5
6
7
8
9
10
11
12
[
{
"id": "case_001",
"input": "客户说:这个太贵了",
"expected": {"intent": "价格异议"}
},
{
"id": "case_002",
"input": "能便宜点吗",
"expected": {"intent": "价格异议"}
}
]

Step 2:执行 Harness

  • 调用 LLM
  • 控制 temperature
  • 多次运行取平均

Step 3:评估

1
2
3
4
5
6
7
8
9
10
11
# 规则评估
assert actual.intent == expected.intent

# 或用 LLM 评估(LLM-as-a-Judge)
judge_prompt = f"""
评估以下输出是否正确:
输入:{input}
期望:{expected}
实际:{actual}
返回:正确/错误 + 原因
"""

Step 4:输出指标

1
2
3
accuracy = 87%
stability = 方差 < 5%
avg_latency = 450ms

👉 本质:把 AI 从”感觉好不好”变成”指标好不好”[^6]

[^6]: LLM Testing Framework Guide - Leanware, 2025-11-13


OpenAI 的实验数据

OpenAI 在 2025 年 8 月-2026 年 1 月进行了一项实验:[^1]

指标 数据
团队规模 3 → 7 人
手写代码 0 行
生成代码 约 100 万行
Pull Request 约 1500 个
平均 PR/天 3.5 个/工程师
速度估算 比手动开发快约 10 倍

关键点:初期生产力很低,因为环境、工具、抽象和 repo 内部结构尚未充分为 agent 优化。随着 Harness 逐步完善,性能才大幅提升。

工程师的角色变成了”让智能体有用”——设计系统、架构和约束条件。


Harness 改变结果的惊人案例

案例 1:Hashline(Can Boluk, 2026)

安全研究员 Can Boluk 发布了一个实验,只改变智能体的编辑格式:[^5]

1
2
3
4
5
6
7
8
9
# 传统格式
function hello() {
return "world";
}

# Hashline 格式(每行加 2-3 字符哈希)
1:a3|function hello() {
2:f1| return "world";
3:0e|}

智能体可以通过哈希引用行(如”替换 2:f1”),而不需要精确重现字符串。

结果

  • Grok Code Fast 1 的基准测试分数从 6.7% → 68.3%
  • 平均输出 token 减少约 20%
  • 模型权重没变,只有 Harness 变了

案例 2:LangChain(Terminal Bench 2.0)

固定使用 gpt-5.2-codex 模型,只改进 Harness:[^5]

  • 分数从 52.8% → 66.5%(+13.7 分)
  • 排行榜排名从约 30 名 → 约 5 名

主要改进是添加了一个自动分析失败模式的工具。

结论:在换模型之前,先检查 Harness。它往往提供最高的 ROI。


AI Harness 的核心组件

基于 OpenAI、Anthropic、Vercel 等公司的实践,一个完整的 AI Harness 应该包含:[^7][^8]

[^7]: How to Evaluate LLMs on Your Own Data - AI Engineer Lab, 2026-03-13
[^8]: LLM Evaluation Framework - Zep AI, 2025-03-01
[^11]: Anthropic - Building a C compiler with a team of parallel Claudes
[^12]: Vercel - We removed 80% of our agent’s tools

0. 可读环境(Legible Environment)—— 长时任务的基础

对于长时运行的智能体,最重要但最容易被忽视的是环境可读性

当一个新的 Agent 会话”接手”任务时,它需要在几分钟内理解:

  • 项目当前状态是什么?
  • 已经完成了什么?
  • 下一步要做什么?

最佳实践

文件 用途
features.json 功能清单和完成状态
progress.md 当前进度和阻塞项
AGENTS.md 项目架构和开发规范
init.sh 环境初始化脚本
Git 提交历史 变更记录和决策轨迹

关键原则

每个会话应该能快速”读懂”项目,而不是靠猜测或试错。

Vercel 和 Anthropic 的实践表明:结构化的进度跟踪文件比复杂的记忆系统更有效。[^11]

1. Test Case 管理

1
2
3
4
5
6
7
8
9
10
{
"id": "case_001",
"input": "...",
"expected": {...},
"metadata": {
"category": "价格异议",
"difficulty": "medium",
"source": "production_log"
}
}

2. 执行器(Executor)

  • 支持多模型(GPT / Claude / DeepSeek / Qwen)
  • 支持多 Prompt 版本
  • 控制温度、重试策略

3. Evaluator(评估器)

评估方式 适用场景
规则匹配 JSON 结构验证、正则匹配
LLM-as-a-Judge 主观质量、语义相似度
人工评审 复杂场景、边界 case
混合评估 先用规则过滤,再用 LLM 评估

4. Metrics(指标)

  • accuracy:意图识别准确率
  • faithfulness:事实一致性(防幻觉)
  • stability:多次运行方差
  • latency:响应延迟
  • cost:单次调用成本
  • format_reliability:结构化输出成功率

5. E2E 验证(端到端测试)—— 防止”假完成”

关键洞察:Agent 有强烈的倾向过早声明任务”完成”。这一观察来自多个团队的自主 agent 实验总结。

单元测试不够,因为 Agent 可能:

  • 代码通过了测试,但功能不工作
  • 实现了功能,但引入了回归 bug
  • 完成了任务,但破坏了其他模块

解决方案:提供端到端验证工具

场景 验证工具
Web 应用 Puppeteer、Playwright
API 服务 自动化集成测试
数据处理 输出数据校验
代码生成 编译 + 运行测试

反馈循环

1
Agent 声明完成 → E2E 测试 → 失败 → 反馈给 Agent → 修复 → 重新验证

这比人工检查快得多,也更可靠。

6. 工具设计:通用优于专用

Vercel 的实践经验:[^12]

  • 原来:大量 specialized tools
  • 改进后:删掉大部分工具,只保留非常少的基础工具,核心是一个 execute arbitrary bash commands 的 file system agent,再加 ExecuteSQL

结果(在 5 个代表性查询上):

  • 成功率:从 80% → 100%
  • 速度:从 274.8s → 77.4s,快 3.5 倍

原因

  • 模型对通用原生工具(如 bash)的理解更深刻
  • 减少工具选择的开销
  • 批处理减少往返次数

设计原则

让模型直接面对 legible file system + 少量通用工具,而不是复杂的专用工具链。

7. CI/CD 集成

1
2
3
git push →
自动跑 harness →
指标下降 → 阻断发布

[^9]: DeepEval - LLM Evaluation Framework


可用的 Harness 工具生态

开源框架

工具 特点 链接
OpenAI Evals 官方评估框架 github.com/openai/evals
DeepEval Pytest 风格,14+ 内置指标 github.com/confident-ai/deepeval
Promptfoo Prompt 测试和模型对比 github.com/promptfoo/promptfoo
HELM Stanford 的 holistic 评估 crfm.stanford.edu/helm
LangSmith LangChain 生态的观测和评估 smith.langchain.com
Ragas RAG 管道评估标准 github.com/explodinggradients/ragas

商业平台

平台 特点
Galileo 企业级,内置 guardrails 和实时监控
Arize Phoenix 开源可观测性 + 幻觉检测
Weights & Biases 实验跟踪 + LLM 评估

工程落地建议

起步三要素

  1. 写上下文文件

    创建 CLAUDE.mdAGENTS.md,包含:

    • 项目结构
    • 构建命令
    • 编码规范

    每次智能体犯错,就添加一条防止再犯的规则。[^5]

  2. 选择性地连接 MCP

    如果智能体经常引用某个外部系统,就通过 MCP 连接它。典型例子包括 Issue Tracker、Wiki、监控系统。

    但只连接必要的,否则 token 会被浪费。

  3. 从简单评估开始

    • 收集 50 个真实生产 Prompt
    • 在 3-5 个模型上运行
    • 人工评分,对比差异
    • 逐步自动化

常见陷阱

陷阱 解决方式
只用合成数据 必须包含真实生产案例
测试样本太少 至少 30-50 个例子
忽略延迟和成本 把速度和价格纳入评估
过早过度自动化 早期保留人工评审
只关注模型能力 测试完整系统,不只是模型输出

核心总结

Harness 的本质:让不可控系统变成可度量、可优化、可上线的工程系统

AI 开发的核心资产正在转移:

过去 现在
代码 数据集
逻辑 Prompt
单测 Harness

如果用传统软件工程类比,Harness Engineering 有点像 JUnit、CI/CD、测试基建、脚手架、约束机制和运行环境设计的组合体——它覆盖的不只是”评测和 CI”,还包括 agent legibility、repo as system of record、AGENTS.md、自动化反馈循环、工具约束、任务接力、E2E verification、并行协作结构。

你写的 Prompt、RAG 流程、Agent 逻辑——这些都需要被评估、被约束、被持续监控。


参考资源

官方/论文

工程实践

深度解读

官方工程博客

视频


最后

我们正处在一个转折点。

Prompt Engineering 只是开始,Context Engineering 是中间阶段,而 Harness Engineering 是 AI 应用走向生产就绪的必经之路。

如果你正在开发 AI 应用,不妨从今天开始:

  1. 收集 50 个真实的测试用例
  2. 建立一个简单的评估脚本
  3. 在每次 Prompt 变更时跑一遍

这就是 Harness 的起点。