最近 “Harness Engineering” 这个词越来越常见。但看了很多文章之后,我有个很强烈的感觉:不少内容其实是在堆概念。读的时候觉得很新,读完之后却很难落到实践里。
很多讨论说了半天,最后还是没有回答一个最朴素的问题:
当 Agent 表现不好时,我到底应该改什么?
结合这段时间自己的实践,我越来越倾向于这样理解:
如果目标只是让模型在一轮对话里回答得更像样,Prompt Engineering 依然非常重要。 但如果目标变成让一个 Agent 持续工作几十分钟,完成一个真实任务,只优化 prompt 往往不够。
因为很多失败并不是模型“不够聪明”,而是它根本不知道:
- 用户的任务是什么意思
- 自己能看到哪些信息
- 自己能使用哪些工具
- 什么信息我应该记下来
它缺的不是再多一句提示,而是一个更完整的运行环境。
所以如果要理解 Prompt Engineering、Context Engineering 和 Harness Engineering,我更愿意把它们看成同一套 AI 工程系统里的三个层次,而不是三个互相替代的新名词:
- Prompt 决定你怎样发出任务
- Context 决定模型在关键时刻能看到什么
- Harness 决定模型在什么运行机制里完成任务
从知识问答到工作流,工程重心会一层层向外移动。
Prompt Engineering:先把任务说清楚
大多数人第一次接触 LLM,都是从 prompt 开始的。在简单问答里,模型更像一个知识接口。
但一旦问题变成开放任务,比如“给我一份北京旅游攻略”,结果就常常不够满意。原因不是模型完全不会答,而是你的要求还不够具体。
同样一句话:
给我一份北京旅游攻略。
和:
给我一份北京旅游攻略。4月份去,5天4夜,三个人,预算5000,其中住宿2000,餐饮2000,娱乐1000。
后者显然更容易得到可用结果。
这就是 Prompt Engineering 的核心目标:
让模型更准确地理解我的意图,并按我期望的方式回答。
因此才会有各种经典技巧,比如:
- 设定身份、背景和行为方式
- 提供 one-shot / few-shot 示例
- 要求分步骤思考(XoT)
它解决的是一个非常明确的问题:
表达问题。
你需要让模型清晰地知道你的需求,而不是猜你需求。
但它的边界也同样明确。Prompt 不能凭空补充私域知识,不能自动知道外部世界刚发生了什么,也不能天然解决跨轮记忆、权限控制、执行环境和错误恢复。
Context Engineering:关键不在“多给信息”,而在“给对信息”
一旦任务从问答变成执行,问题的重心就变了。
这时候我们关心的已经不只是:
“怎么提问”
而是:
应该给模型看到什么,来让其做出下一步决策?
这里的上下文,是会进入模型视野、影响下一步判断的信息,本质上都属于上下文的一部分,比如:
- 任务描述
- 工具描述
- 记忆(中期/长期)
- 历史对话信息
Context Engineering 真正关注的不是:
“尽量多塞信息”
而是:
怎么在正确的时候,把正确的信息送到模型眼前。
这件事说起来简单,做起来很难。
任务一复杂,信息就同时面临两个风险:
- 缺失:模型看不到关键约束,容易做错
- 混乱:无关信息太多,模型抓不住重点
因此上下文工程的关键,从来不是“上下文越大越好”,而是信息选择、信息组织和信息时机。
但只把上下文补齐,为什么 Agent 还是不稳?
因为上下文解决的是:
模型能看见什么。
它并不直接解决这些问题:
- 工具调用失败了怎么办?
- 生成的代码如何验证?
- 什么时候该停下来询问,而不是一直乱做?
一旦问题来到这里,你面对的就不再只是“信息注入”,而是整个运行系统。
这时候,Harness Engineering 才真正变得重要。
Harness Engineering:给模型一个真正能工作的环境
如果说 Prompt 是任务说明,Context 是执行任务时能看到的信息,那么 Harness 更像是 Agent 所处的工作环境。
它不仅包括开发和运行所需的基础设施,也包括规则、权限,以及测试、日志、文档等支撑系统。
正是在这样的环境里,Agent 才能明确目标与边界,在合适的权限和反馈机制下持续执行、验证和迭代,而不是只靠一次次猜测推进任务。
Prompt、Context、Harness,不是谁替代谁,而是三层协作
因此,我更愿意把 Prompt Engineering、Context Engineering 和 Harness Engineering 理解为同一个系统中的三个层次,而不是彼此替代的新概念:
- Prompt Engineering:定义任务
- Context Engineering:提供信息
- Harness Engineering:组织执行
三者共同决定了 Agent 能否稳定完成真实任务:
Prompt 决定任务是否被说清楚,Context 决定模型在关键时刻能看到什么,Harness 决定它是否处在一个足以持续工作的工程闭环中。