随着大模型从"聊天工具"走向"自主 Agent",工程重点也发生了明显迁移:
Prompt → Context → Harness = 从"说什么"到"给什么信息",再到"构建整个运行环境"
这篇文章将系统讲清三者的区别、出现背景,以及为什么 Harness Engineering 成为新的关键。
一、Prompt Engineering:最早的"控制手段"
1. 本质是什么?
Prompt Engineering 是:
通过设计输入指令(prompt)来引导模型行为
它的核心是:
-
指令设计(Instruction)
-
示例(Few-shot)
-
输出格式约束
LLM 本质上是"按输入生成输出",所以 prompt 就像"程序"。
2. 为什么会出现?
因为:
-
LLM 是黑盒,不能轻易改参数
-
prompt 是最低成本控制方式(无需训练)
👉 所以早期阶段:
"不会写 prompt = 不会用 AI"
3. 局限性
Prompt Engineering 的问题在于:
-
❌ 只适用于单轮任务
-
❌ 不解决状态管理(memory)
-
❌ 不解决多步推理
-
❌ 强依赖"试错 + 调参"
👉 当 AI 从 ChatGPT 进化为 Agent 后,问题爆发了。
二、Context Engineering:从"说什么"到"给什么"
1. 核心定义
Context Engineering 是:
设计模型"看到的全部信息"
一句经典总结:
Prompt 是"问什么",Context 是"给它什么材料去回答"
2. 为什么出现?
因为系统变复杂了:
| 阶段 | 特点 |
|---|---|
| Chatbot | 单轮 |
| Agent | 多步 + 长期运行 |
👉 问题变成:
-
上下文太多(token 限制)
-
信息质量不稳定
-
memory / RAG / tool 混乱
"大多数 agent 的失败,本质是 context 失败"
3. Context Engineering 做什么?
核心任务:构建"上下文窗口"
包括:
四大组成(典型结构)
-
Instruction(系统提示)
-
Memory(历史)
-
RAG(检索知识)
-
Tools(工具输出)
👉 本质是:
让模型在每一步都看到"刚刚好"的信息
4. 典型方法(来自 LangChain & 实践)
-
Summarization(压缩历史)
-
Middleware(拦截 & 修改上下文)
-
动态裁剪 context
-
状态结构化(JSON state)
5. 局限性
即使 context 做好了,仍然会出现:
-
❌ Agent 不会自检(直接输出错误)
-
❌ 陷入循环(doom loop)
-
❌ 不理解环境(文件、工具)
-
❌ 不知道任务标准
👉 这就是下一阶段的起点。
三、Harness Engineering:让 Agent 真正"能工作"
1. 核心定义
Harness Engineering 是:
围绕模型构建完整运行系统(约束 + context + feedback)
可以理解为:
Model + Harness = Agent
2. 为什么出现?
现实问题:
👉 同一个模型:
-
在 A 项目表现很好
-
在 B 项目表现很差
原因不是 prompt,而是:
环境(environment)不同
本质问题:
-
Agent 不知道:
-
环境结构
-
任务标准
-
什么时候结束
-
-
没有:
-
验证机制
-
反馈循环
-
约束系统
-
👉 Prompt + Context 已经不够了
3. Harness Engineering 解决什么问题?
✅ 1. 可靠性问题(最核心)
LLM:
-
会"自信地错"
-
不会自动检查
👉 Harness 通过:
-
测试(tests)
-
校验(verification)
-
checklist
让 agent 强制自检
✅ 2. Doom Loop(死循环)
Agent 会:
-
一直重复错误策略
-
修改同一文件 10+ 次
👉 解决方案:
-
Loop Detection Middleware
-
强制"重新思考"
✅ 3. 环境感知能力
Agent 不知道:
-
有哪些文件
-
有哪些工具
👉 Harness 注入:
-
目录结构
-
工具信息
-
运行环境
✅ 4. 无人监督问题(Autonomy)
Agent 要做到:
-
自己做
-
自己检查
-
自己修
👉 Harness 提供:
- write → test → fix 循环
4. Harness 的核心组件
总结为四大块:
1️⃣ Context(继承自 Context Engineering)
- 输入什么信息
2️⃣ Constraints(约束)
- 规则 / 格式 / 边界
3️⃣ Feedback Loops(反馈循环)
- 测试 → 修复
4️⃣ Tools & Memory(工具 + 状态)
5. 关键方法总结(最重要)
结合 LangChain 博客,核心方法有:
⭐ 方法1:强制验证(Verification Loop)
-
PreCompletionChecklistMiddleware
-
输出前必须检查任务要求
👉 解决:
"看起来对,其实错"
⭐ 方法2:环境注入(Environment Injection)
-
文件结构
-
工具能力
-
执行约束
👉 解决:
agent "瞎猜环境"
⭐ 方法3:测试驱动(Test-driven Agents)
-
先定义测试
-
再生成代码
-
自动运行验证
👉 类似:
TDD(测试驱动开发)
⭐ 方法4:Loop Detection(防死循环)
-
检测重复操作
-
提醒策略错误
⭐ 方法5:时间预算(Time Budgeting)
-
提醒 agent 收敛
-
防止无限执行
四、三者关系总结(核心对比)
| 层级 | 关注点 | 解决问题 |
|---|---|---|
| Prompt Engineering | 如何说 | 单轮输出质量 |
| Context Engineering | 给什么信息 | 多步任务稳定性 |
| Harness Engineering | 整个系统怎么运作 | 可靠性 & 自动化 |
👉 一句话总结:
-
Prompt:语言层
-
Context:信息层
-
Harness:系统层
五、核心洞察(最重要)
1. Agent 的本质不是模型,而是系统
"真正决定效果的,是模型周围的环境"
2. Prompt 的时代已经过去(部分)
Prompt 仍然重要,但:
-
不再是核心瓶颈
-
已成为 Context 的一部分
3. Harness = AI时代的软件工程
它本质在做的是:
-
把 AI 从"概率系统"
-
变成"工程系统"
六、总结一句话
Prompt 让模型听话,Context 让模型有信息,Harness 让模型真正能完成任务。
参考资料
https://openai.com/index/harness-engineering/
https://blog.langchain.com/improving-deep-agents-with-harness-engineering/
https://aicoding.csdn.net/69c11b2854b52172bc63b5a3.html
https://madplay.github.io/en/post/harness-engineering?utm_source=chatgpt.com