什么是 Harness —— 从测试框架到 AI Agent 基础设施
- 作者:Bougie
- 创建于:2026-05-12

# 前言
"Harness" 这个词在软件工程领域出现的频率越来越高。从传统的 Test Harness 到现代的 Agent Harness、Harness Engineering,这个概念在不断演进。特别是在 AI Agent 快速发展的今天,理解 Harness 的本质变得尤为重要。
# 什么是 Harness?
Harness 的字面意思是「马具」或「驾驭」,它象征着对强大力量的控制和引导。在软件工程中,Harness 指的是围绕一个核心系统,构建的输入控制、输出约束、行为测试、反馈循环的工程框架。
# 核心定义
Harness 是一种系统级基础设施,本质是集计划、执行与学习于一体的工程化闭环体系,用于为被测对象提供可控、可观测且可重复的测试环境。
# Harness 的三种形态
# 1. Test Harness(测试驾驭)
最经典的形态。把被测系统放入「测试套」中,提供受控输入,捕获并验证输出。
import unittest
class TestHarness(unittest.TestCase):
def setUp(self):
# 准备测试环境
self.mock_db = MockDatabase()
self.harness = TestHarness(self.mock_db)
def test_user_login(self):
# 驱动执行
result = self.harness.execute(
action='login',
payload={'username': 'test', 'password': '123'}
)
# 断言验证
self.assertEqual(result.status, 'success')
self.assertIsNotNone(result.token)
# 2. Prompt Harness(提示词驾驭)
专为 LLM 设计,通过系统提示、Few-shot 示例、格式约束将模型输出「驾驭」在可控范围内。
const promptHarness = {
systemPrompt: `你是一个专业的技术写作助手。
- 只回答技术相关问题
- 使用 Markdown 格式
- 不知道就说不知道`,
constraints: {
maxLength: 500,
format: 'markdown',
allowedTopics: ['programming', 'ai', 'engineering']
},
fewShots: [
{ input: '什么是闭包?', output: '闭包是...' },
{ input: '解释一下 Promise', output: 'Promise 是...' }
]
}
# 3. Agent Harness(智能体驾驭)
在 AI Agent 框架中,通过工具定义、Planning 约束、Memory 管理来控制 Agent 的行为路径。
# Harness 的三层闭环
# Harness 的核心能力
| 能力 | 描述 | 示例 |
|---|---|---|
| 环境封装 | 隔离依赖,提供可控环境 | Mock 数据库、模拟 API |
| 输入驱动 | 按照测试用例发送输入 | 自动化执行测试步骤 |
| 输出验证 | 断言验证,检查结果 | 单元测试断言 |
| 可观测性 | 追踪执行过程和状态 | 日志、监控、追踪 |
# 实际应用示例
# 用 Harness 测试一个支付模块
class PaymentHarness:
def __init__(self):
self.mock_payment_gateway = MockPaymentGateway()
self.mock_database = MockDatabase()
self.results = []
def execute_payment(self, order_id: str, amount: float):
"""驱动支付执行"""
# 1. 准备环境
order = self.mock_database.get_order(order_id)
# 2. 模拟外部依赖
self.mock_payment_gateway.set_response(
success=True,
transaction_id='TXN_12345'
)
# 3. 执行被测系统
result = process_payment(
order=order,
gateway=self.mock_payment_gateway
)
# 4. 收集结果
self.results.append(result)
return result
def verify(self):
"""验证执行结果"""
for r in self.results:
assert r.status == 'completed'
assert r.transaction_id is not None
# AI Agent 中的上下文 Harness
class AgentContextHarness {
constructor() {
this.contextStack = []
this.maxDepth = 5
}
loadContext(skill, relevantDocs) {
if (this.contextStack.length >= this.maxDepth) {
// 触发上下文溢出保护
this.evictOldest()
}
this.contextStack.push({
skill,
docs: relevantDocs,
timestamp: Date.now()
})
}
getCurrentContext() {
return this.contextStack[this.contextStack.length - 1]
}
}
# 为什么需要 Harness?
# 传统软件测试场景
在没有 Harness 的时代,测试面临诸多挑战:
- 依赖真实外部服务,成本高且不稳定
- 测试环境难以复现
- 结果验证困难,缺乏标准化框架
# AI Agent 时代的新挑战
Harness 解决了这些问题:
- 状态管理 — 通过 Context Harness 保持多轮对话状态
- 工具调用 — 通过 Tool Harness 标准化工具接口
- 行为可控 — 通过 Prompt Harness 约束输出格式
- 持续验证 — 通过 Evaluation Harness 确保质量不退化
# 总结
Harness 不仅仅是一个测试工具,它是现代软件工程的基础设施。从传统单元测试到 AI Agent 时代的人机协作,Harness 的概念在不断演进和扩展。
理解 Harness 的本质 —— 构建可控、可观测、可重复的工程化闭环 —— 将帮助我们更好地构建可靠的软件系统。
如果你对 Harness 有更多疑问或实践心得,欢迎留言讨论。