Harness Definition
一句话:Agent = Model + Harness。你不是模型,那你就是 Harness。
这句话是不是感觉听起来有点绝对,我第一次看到也是这种感觉。不过,其实这样简单的一句话反而抓住了关键。
Harness 就是模型之外的一切——系统提示词、工具调用、文件系统、沙箱环境、编排逻辑、钩子中间件、反馈回路、约束机制。模型本身只是能力的来源,只有通过 Harness 把状态、工具、反馈和约束串起来,它才真正变成一个 Agent。
LangChain 的 Vivek Trivedi 在《The Anatomy of an Agent Harness》里把这个定义讲得很清楚:先搞清楚模型负责什么,剩下的系统要补什么,用这条线把整个系统切开。
通俗理解: 模型是 CPU,Harness 是操作系统。CPU 再强,OS 拉胯也白搭。你买了最新款 M5 芯片,装了个崩溃不断的系统,体验还不如老芯片配稳定的 OS。
Harness 和 Prompt/Context Engineering 的关系
| 层级 | 解决的核心问题 | 关注点 | 典型工作 |
|---|---|---|---|
| Prompt Engineering | 表达——怎么写好指令 | 塑造局部概率空间,让模型听懂意图 | 系统提示词设计、Few-shot 示例、思维链引导 |
| Context Engineering | 信息——给 Agent 看什么 | 确保模型在合适的时机拿到正确且必要的事实信息 | 上下文管理、RAG、记忆注入、Token 优化 |
| Harness Engineering | 执行——整个系统怎么防崩、怎么量化、怎么持续运转 | 长链路任务中的持续正确、偏差纠正、故障恢复 | 文件系统、沙箱、约束执行、熵管理、反馈回路 |
简单任务里,提示词最重要——你把话说清楚就行;依赖外部知识的任务里,上下文很关键——你得把正确的信息喂进去;但在长链路、可执行、低容错的真实商业场景里,Harness 才是决定成败的东西。
Harness 组件
理解 Harness 的最好方式,不是直接看它包含什么,而是看模型做不到什么。不管大模型看起来多能干,本质就是一个文本(或图像、音频)进、文本出的函数。
模型做不到的,就是 Harness 要补的:
| 模型做不到 | Harness 怎么补 | 核心组件 |
|---|---|---|
| 记住多轮对话历史 | 维护对话历史,每次请求时拼进上下文 | 记忆系统 |
| 执行代码、跑命令 | 提供 Bash + 代码执行环境 | 通用执行环境 |
| 获取实时信息(新库版本、API 变化) | Web Search、MCP 工具 | 外部知识获取 |
| 操作文件和环境 | 文件系统抽象 + Git 版本控制 | 文件系统 |
| 知道自己做对了没有 | 沙箱环境 + 测试工具 + 浏览器自动化 | 验证闭环 |
| 在长任务中保持连贯 | 上下文压缩、记忆文件、进度追踪 | 上下文管理 |
通俗理解: 把这些“模型做不了但你希望 Agent 能做到”的事情一个个补上,就得到了 Harness 的核心组件。LangChain 有一位大佬把这件事拆解为五个子系统:文件系统(持久化)、Bash 执行(通用工具)、沙箱环境(安全隔离)、记忆机制(跨会话积累)、上下文压缩(对抗衰减)。
为什么需要 Harness?
Agent典型失败模式
- 试图一步到位(One-shotting)。 Agent 倾向于一次做完所有事情,结果在实现进行到一半时上下文窗口就耗尽了。下一个会话启动时看到的是半成品、没有文档的代码,只能花大量时间猜测之前发生了什么并试图恢复工作状态。
- 过早宣布胜利。 在项目后期,当部分功能已经完成后,Agent 会环顾四周,看到已有进展就直接宣布任务完成——即使还有大量功能未实现。
- 过早标记功能完成。 在没有明确提示的情况下,Agent 写完代码就标记为“完成”,却没有做端到端测试。单元测试或 curl 命令通过了不代表功能真正可用。
- 环境启动困难。 每次新会话启动时,Agent 需要花费大量 token 弄清楚如何运行应用、如何启动开发服务器,而不是把时间花在实际开发上。
上下文窗口利用率
上下文填得越满,LLM输出质量越差。
给 Agent 塞一堆 MCP 工具、冗长文档和累积的对话历史,不会让它更聪明——反而会让它变笨。
面试要点
基础概念
| 问题 | 核心回答 |
|---|---|
| Harness 是什么? | 模型之外的一切——系统提示词、工具调用、文件系统、沙箱、编排逻辑、约束机制。Agent = Model + Harness。 |
| Harness 和 Prompt Engineering、Context Engineering 的关系? | 嵌套关系:Prompt ⊂ Context ⊂ Harness。三者分别解决表达、信息、执行三个层面的问题。 |
| 为什么瓶颈不在模型而在 Harness? | Can.ac 实验证明同一模型只换工具调用格式,分数从 6.7% 跳到 68.3%。基础设施质量决定了模型能力的实际发挥。 |
架构设计
| 问题 | 核心回答 |
|---|---|
| Harness 六层架构是什么? | L1 信息边界 → L2 工具系统 → L3 执行编排 → L4 记忆与状态 → L5 评估与观测 → L6 约束校验与恢复。从“定义边界”到“兜底恢复”的完整闭环。 |
| 上下文管理有什么经验法则? | 利用率控制在 40% 以内。超过后 Agent 质量明显下降(幻觉增多、兜圈子)。策略是压缩或交接,不是继续塞信息。 |
| 单 Agent 还是多 Agent? | 规模决定。小项目单 Agent 够用(Hashimoto 模式),大项目几乎必然需要专业化分工(Carlini 用 16 个并行 Agent)。 |
实战方案
| 问题 | 核心回答 |
|---|---|
| OpenAI 的 Harness 实践核心是什么? | 五大方法论:地图式文档(渐进式披露)、机械化约束(自定义 Linter)、可观测性接入、熵管理(定期垃圾回收)、仓库即事实源。 |
| Anthropic 如何解决上下文焦虑? | Context resets 策略:不压缩,而是启动一个全新“干净”的 Agent,通过结构化交接文档恢复状态。类似重启进程解决内存泄漏。 |
| 从零搭 Harness 先做什么? | P0:创建 AGENTS.md + 自定义 Linter + 团队知识仓库化。投入产出比最高。 |