简介:模型决定能力上限,Harness决定能力能否兑现。本文从“模型之外皆Harness”这一视角切入,系统梳理Harness Engineering的定义与边界,剖析其与提示词工程、上下文工程的层级关系,并逐项拆解模型的四条能力短板与对应的补位机制,帮助开发者掌握构建生产级智能体系统的工程要点。
“你不是模型,那你就是 Harness。”
这句话初听有些武断,但拆开来看,它其实精确地划出了一条系统边界:在智能体(Agent)系统里,除了模型本身,其余的一切都属于 Harness——系统提示词、工具调用框架、文件系统、沙箱环境、编排逻辑、钩子与中间件、反馈回路、约束机制。
为什么这条边界如此重要?因为模型只是能力的来源,而能力不等于产出。一个本质上是“文本进、文本出”的函数,无论参数规模多大、推理多强,都无法自己维持状态、无法真正行动、无法感知外部世界的实时变化,更无法判断自己做得对不对。只有当 Harness 把状态、工具、反馈和约束串成一条完整链路,模型才能从“会答题的头脑”进化为“能干活的 Agent”。
业界在解剖 Agent 系统结构时,有一种被广泛认可的切分方法:先明确模型负责什么,再推演系统需要补齐什么,用这条线把整个系统一分为二。线内是模型,线外的全部工程,就是 Harness Engineering。
理解 Harness 最直观的方式,是回到计算机体系结构里那个经典类比:
CPU 再强,操作系统拉胯也白搭。给一台机器装上最新款的高性能芯片,如果系统频繁崩溃、调度混乱、驱动缺失,实际体验反而不如老芯片配一套稳定成熟的操作系统。模型与 Harness 的关系正是如此。
这个类比还可以继续往下推:
| 操作系统的职责 | Harness 的对应职责 |
|---|---|
| 进程调度与生命周期管理 | 任务编排与多步执行的状态推进 |
| 系统调用接口 | 工具调用框架 |
| 文件系统与内存管理 | 上下文管理与记忆系统 |
| 权限模型与进程隔离 | 执行沙箱与权限约束 |
| 异常处理与看门狗 | 错误检测、重试、回滚与故障恢复 |
操作系统的价值,不在于替 CPU“算得更快”,而在于让算力可以被安全、稳定、可组合地使用。Harness 的价值同理:它不提升模型的智能密度,而是让模型的智能能够被可靠地兑现。
围绕大模型的工程实践,通常可以概括为三个层次。需要强调的是,三者不是并列关系,而是嵌套关系——外层包着内层,且每一层解决的是完全不同的问题。
| 层次 | 核心问题 | 关注点 | 典型手段 |
|---|---|---|---|
| Prompt Engineering | 表达:怎么把指令写好 | 塑造局部概率空间,让模型听懂意图 | 系统提示词设计、少样本示例、思维链引导 |
| Context Engineering | 信息:给 Agent 看什么 | 在合适时机拿到正确且必要的事实信息 | 上下文管理、检索增强生成(RAG)、记忆注入、Token 预算优化 |
| Harness Engineering | 执行:整个系统怎么持续运转 | 长链路任务中的持续正确、偏差纠正、故障恢复 | 文件系统、沙箱、约束执行、熵管理、反馈回路 |
三者的重要性随任务形态动态变化:
这也解释了一个现象:真正把 Agent 推向生产环境的一线团队,重心几乎都压在 Harness 上。
理解 Harness 最好的方式,不是罗列它包含什么,而是反过来问:模型做不到什么?无论模型看起来多能干,它的本质始终是一个函数——文本(或图像、音频)进,文本出。这个本质决定了四条硬边界,每一条边界都对应 Harness 的一类补位机制。
模型自身不保存任何东西,上一次调用结束,一切归零。所谓“多轮对话能力”,其实是 Harness 在每次请求前,把历史记录重新组织后拼进上下文再喂给模型。工程上至少要处理三件事:
模型可以“写出”一段完美的代码,但它自己无法运行。执行能力必须由 Harness 提供:命令行环境、代码执行器、文件读写能力,以及包裹这一切的沙箱。关键工程点包括:
模型的参数是训练完成那一刻的快照。新发布的库版本、刚变更的接口规范、今天的行业动态、企业内部的私有文档——它一概不知。Harness 需要为它搭建信息通道:
这是最容易被忽视、也最致命的一条。模型生成的结果,模型自己无法可靠判断对错——它会自信地犯错,并且如果没有外部校正,错误会在后续步骤里被不断放大。Harness 必须构建独立于模型的验证闭环:
验证闭环的意义在于把“生成”与“验收”解耦:系统的正确性不依赖模型的自评,而依赖独立的、可设计的验证机制。
| 模型的硬边界 | Harness 的补位机制 | 核心组件 |
|---|---|---|
| 无状态,记不住历史 | 维护并注入对话历史 | 记忆系统 |
| 无行动力,不能执行 | 提供命令行与代码执行环境 | 沙箱与执行环境 |
| 无实时感知 | 搜索与标准化工具接入 | 外部知识获取 |
| 无法自证正确 | 独立验证与纠偏 | 验证闭环 |
把上述组件拼装起来,一个 Agent 系统的核心循环大致长这样(示意代码,非真实接口):
# Agent 主循环骨架(示意)while not task.finished:observation = env.collect_state() # 状态采集:文件、日志、环境context = ctx.build(history, observation) # 上下文工程:筛选、压缩、注入action = model.decide(context) # 模型:单步决策result = sandbox.run(action) # 沙箱执行:隔离、限时、限额feedback = verifier.check(result) # 验证闭环:测试、断言、校验if not feedback.ok:env.rollback_or_replan(feedback) # 纠偏:回滚、重试、修正计划history.append(action, result, feedback) # 状态推进
这个循环里有几个值得展开的工程细节:
如果要在真实业务中实践 Harness Engineering,建议从三个动作入手:
回到最初的问题:Harness Engineering 的本质是什么?
它本质上是一门把“不可靠的单次文本生成”工程化为“可靠的持续行为”的系统学科。模型提供能力密度,Harness 决定这些能力能否在真实世界中被安全、稳定、可验证地兑现。
一句话总结:模型决定系统的上限,Harness 决定系统的下限。而在生产环境中,决定生死的,往往是下限。