如何开发一个 Agent ?从 Prompt Engineering 到 Harness Engineering,一次讲透
概述
Harness Engineering 不是“把提示词写得更花”,而是为 AI Agent 设计一整套可运行、可约束、可验证、可恢复的执行环境。
当任务从“回答一个问题”升级为“持续完成一个真实任务”时,决定系统上限的不再只是模型本身,而是模型外面的这套 harness。
这篇文章主要讲什么
- Prompt Engineering 解决的是“怎么把话说清楚”。
- Context Engineering 解决的是“怎么把正确的信息在正确的时间送进去”。
- Harness Engineering 解决的是“模型开始连续执行后,怎么让它长期稳定地做对”。
这三者不是相互替代,而是逐层外扩的关系:
- Prompt Engineering 是对指令表达的工程化。
- Context Engineering 是对输入环境的工程化。
- Harness Engineering 是对整个运行系统的工程化。

为什么这个概念会出现
早期很多 AI 应用主要是单轮问答或短链路任务。那时最关键的问题是:
- 模型有没有理解你的意思?
- 你的提示词是不是足够清晰?
后来 Agent 开始进入真实环境:
- 要调用工具
- 要访问外部数据
- 要跨多步执行
- 要处理中间状态
- 要根据反馈持续修正
这时问题就变了。系统不再只是追求“一次回答得对不对”,而是要追求“整条执行链路能不能稳定跑通”。
也正是在这个背景下,工程重心逐渐从 prompt 扩展到 context,再进一步扩展到 harness。
第一阶段:Prompt Engineering
Prompt Engineering 的重点,是通过更好的指令表达,让模型更稳定地产生期望输出。
典型手段包括:
- 角色设定
- 输出格式约束
- 示例驱动
- 任务拆解
- 对成功标准的明确描述
它的边界也很清楚:
- 它擅长解决“表达问题”
- 它不直接解决“信息缺失问题”
- 它也不解决“长链路执行稳定性问题”
换句话说,提示词可以提升模型“单次推理”的表现,但很难单独支撑一个需要长时间运行的 Agent 系统。
第二阶段:Context Engineering
Context Engineering 把关注点从“怎么写提示词”,扩展到“推理时到底该给模型哪些 token”。
Anthropic 在 2025 年的文章里把它定义得很清楚:
上下文是有限资源,真正的问题不是“塞进去多少信息”,而是“如何维护最有用、最相关、最高信号密度的那部分信息”。
这意味着上下文工程不只是背景资料拼接,而是系统性管理:
- 系统提示
- 工具定义
- 外部检索结果
- 历史对话
- 当前任务状态
- 中间结论
- 长期知识与规则
典型实践包括:
RAG:先检索,再按需注入相关知识- 历史上下文压缩
- 运行时按需检索,而不是一开始塞满全部信息
Progressive Disclosure:渐进式披露,只在需要时暴露更细的规则与能力- 控制工具返回的粒度,避免上下文污染
Anthropic 特别强调了一个关键现象:context rot。
上下文越长,模型越容易丢重点、丢细节、误召回,注意力预算会越来越稀缺。因此,上下文优化不是“越多越好”,而是“越准越好”。
第三阶段:Harness Engineering
当模型开始连续行动,仅有 prompt 和 context 还不够。
因为即便信息给对了,模型依然可能:
- 选错工具
- 误解工具返回
- 在长链路里慢慢漂移
- 对自己的结果过度乐观
- 在失败后无法恢复
Harness Engineering 解决的正是这些问题。
更准确地说,它是在模型外部构建一层运行系统,让 Agent 能够:
- 在明确边界内工作
- 看见自己工作的结果
- 被持续检查
- 在失败后回到稳定状态
- 把好的经验沉淀成以后可复用的规则
Mitchell Hashimoto 在 2026 年 2 月的一篇文章里给出了一个非常贴近工程现实的说法:
每当 Agent 犯一个错误,就去工程化地补上一块结构,让它以后不再犯同类错误。这种持续把“偶发失误”变成“系统能力”的过程,就是 harness engineering 的核心味道。
一个成熟 Harness 的六层结构

1. 目标与信息边界
模型必须先知道:
- 自己是谁
- 当前任务是什么
- 成功标准是什么
- 哪些信息是关键,哪些信息不该看
这一层其实把 prompt 和 context 的基础能力都吸收进来了。
如果目标模糊、成功标准不清、信息边界混乱,后面所有层都会失真。
2. 工具系统与动作空间
模型要做事,必须有工具。
但真正重要的不是“工具数量多”,而是:
- 工具职责是否清晰
- 什么时候该调用,什么时候不该调用
- 返回结果是否可读、可压缩、可继续推理
Anthropic 在工具设计文章里强调过,很多失败并不是模型不会用工具,而是工具接口本身设计得不够清晰、不够抗误用。
3. 执行编排
Agent 不是单步机器,而是一个持续循环:
- 理解目标
- 判断当前信息够不够
- 不够就获取信息
- 生成下一步动作
- 校验结果
- 不满足要求就修正或重试
这部分对应的就是 orchestration。
没有执行编排,模型很容易“想到哪做到哪”,最后输出一个半成品。
4. 状态、记忆与交接
长任务一定有状态管理问题。系统至少要分清三类东西:
- 当前任务状态
- 会话中的中间产物
- 跨会话保留的长期记忆或偏好
如果这些内容混在一起,系统会越来越乱。
Anthropic 在长任务实践里进一步指出,仅靠压缩上下文有时还不够,必要时需要做 context reset,把任务交接给一个全新的 agent,并依赖交接文档继续推进。
5. 评估、观测与验收
很多系统不是“做不出来”,而是“做完以后不知道自己做得对不对”。
因此 Harness 里必须有独立的评估层:
- 输出验收
- 环境验证
- 自动测试
- 日志、指标、链路追踪
- 错误归因
一旦 Agent 能直接看到页面、日志、指标和真实运行效果,系统就从“语言生成器”变成了“能观察自己行为结果的执行体”。
6. 约束、校验与失败恢复
这是生产级系统最关键的一层。
真实环境里,失败不是例外,而是常态:
- API 超时
- 检索失败
- 文档格式异常
- 工具输出不稳定
- 模型判断失误
成熟的 harness 必须回答三件事:
- 哪些行为允许,哪些行为禁止
- 在关键节点如何做前置或后置校验
- 一旦失败,如何回退、重试、切换路径或人工接管
OpenAI 的实践:把“环境可读性”做成系统能力
OpenAI 在 2026 年 2 月的 Harness engineering: leveraging Codex in an agent-first world 里,披露了一个很典型的 agent-first 工程案例。
其中最关键的不是“模型更强了”,而是他们把环境变成了 Agent 能直接理解和验证的对象。
1. 把仓库知识变成系统事实源
他们明确反对“一个超大的 AGENTS.md 包打天下”。
原因很直接:
- 上下文是稀缺资源
- 巨型说明文档会挤压真正重要的任务信息
- 内容会快速腐化
- 也很难做机械化校验
所以他们把 AGENTS.md 变成目录,而不是百科全书;真正的知识存放在结构化的 docs/ 中,并通过文档索引、计划文档、架构文档、质量文档等方式组织起来。
这本质上就是一种工程化的 progressive disclosure。
2. 让 Agent 能看见 UI、日志和指标
OpenAI 的一个关键动作是提高 application legibility,也就是让应用本身对 Agent 可读。
他们做了几件非常典型的事:
- 每个 worktree 都能独立启动应用
- 把
Chrome DevTools Protocol接进 Agent 运行时 - 让 Agent 能处理 DOM snapshot、截图、导航
- 暴露日志、指标、trace 给 Agent 查询
结果是 Agent 不再只是“写代码然后自我感觉良好”,而是可以:
- 复现 bug
- 驱动页面
- 观察运行结果
- 查询日志和性能指标
- 修复后再次验证
这就形成了真正的反馈闭环。
3. 用架构约束和 lint,把“经验”变成系统规则
OpenAI 还强调了两类约束:
- 严格的分层架构和依赖边界
- 机械化的 taste invariants,例如日志规范、命名规范、文件大小限制、可靠性要求
重点不只是“报错”,而是这些约束会把修复信息一并反馈给 Agent,让它下一轮能按规则修正。
这就是 Harness 的精髓:把人的经验变成机器可执行的环境结构。
4. 把“AI slop”治理成持续垃圾回收
随着 Agent 产出速度提高,代码库会自然漂移。
OpenAI 早期甚至需要每周花 20% 时间清理所谓的 “AI slop”。
后来他们把这件事也自动化了:
- 把黄金原则写进仓库
- 让后台 Agent 定期扫描偏差
- 自动开修复 PR
这本质上是一种持续的熵管理。
Anthropic 的实践:长任务里最难的是“别跑偏”
Anthropic 的两篇文章分别从 context engineering 和 long-running harness 两个角度,补足了这个话题。
1. 上下文不是仓库,而是预算
Anthropic 对 Context Engineering 的表述非常值得借鉴:
- 上下文是有限资源
- 不是所有相关信息都应该一次性塞进去
- 最重要的是维护“当前最有用的一小部分高信号 token”
因此他们更强调:
- 运行时按需加载
- 轻量引用而不是重型复制
- 最小可用工具集合
- 紧凑而高信号的系统提示
2. 长任务会出现 context anxiety
在长时间运行的任务里,Anthropic 观察到一个很实际的问题:
上下文越接近上限,模型越容易焦躁、收尾草率、忽略细节。文章把这种现象称为 context anxiety。
很多系统会先尝试做 context compaction,也就是压缩历史上下文。
但 Anthropic 指出,压缩不一定足够,因为它未必能真正消除模型的“负担感”。
所以在某些任务里,更有效的方法是做 context reset:直接换一个新的 agent,通过交接产物继续往下做。
3. 自评通常不可靠,生产和验收要分离
Anthropic 还强调了另一个关键现象:self-evaluation bias。
让模型自己干活,再让它自己给自己打分,往往会过度乐观。
这在没有标准答案、需要主观判断的任务里尤其明显,例如设计质量、交互体验、产品完成度。
他们的应对方式非常工程化:
- 生成者负责产出
- 评估者独立验收
- 评估者直接进入真实环境操作,而不是只看静态产物
在文中案例里,评估 Agent 拿到了 Playwright MCP,可以自己打开页面、操作页面、截图观察,再输出具体批评意见,反馈给生成 Agent 继续迭代。
这使得系统形成了一个真正有效的回路:生成、检查、修复、再检查。
Prompt、Context、Harness 到底是什么关系

可以把三者理解成三个嵌套层次:
Prompt Engineering:如何表达任务Context Engineering:如何组织输入信息Harness Engineering:如何设计整个执行系统
所以 Harness 不是 Prompt 的新瓶装旧酒,也不只是 Context 换了个名字。
它关注的是更大的系统边界:
- 工具
- 文档
- 工作流
- 状态
- 评估
- 观测
- 约束
- 恢复
- 长期治理
当任务只是一次性问答时,prompt 往往就够用。
当任务依赖外部知识和动态信息时,context 变成关键。
当任务变成多步、长链路、可执行、可失败、需验收的真实工作时,harness 几乎不可避免。
工程实践上的真正启发
如果你正在做 Agent,这篇内容最有价值的启发不是“记住一个新名词”,而是换一套排障思路:
- 当 Agent 表现不好时,不要只问“模型够不够强”
- 不要只问“提示词还能不能再调”
- 更应该问“环境里缺了什么结构性能力”
更具体一点,可以按下面的顺序排查:
- 目标是不是足够清楚,成功标准是不是可验证
- 模型是否拿到了当前步骤真正需要的信息
- 工具接口是否清晰,返回是否可读可压缩
- 是否有明确的执行循环,而不是一次性乱跑
- 是否把状态、中间结果、长期记忆分开管理
- 是否有独立评估与真实环境验证
- 是否有失败恢复、约束和治理机制
如果这些层没有补齐,换模型通常只能带来局部改善;
如果这些层搭好了,同一个模型的可用性往往会出现非常明显的跃升。
最后的判断
AI 工程的重心,正在从“让模型看起来更聪明”,转向“让模型在真实世界里稳定工作”。
短任务时代,Prompt Engineering 是主角;
复杂任务时代,Context Engineering 开始成为核心;
而在 Agent 真正进入生产环境之后,Harness Engineering 正在成为决定系统能不能落地的关键能力。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)