真实Agent迭代案例,真正理解Harness工程
如果你不懂 Harness,面试 AI 产品经理的时候肯定会被刷掉了。
虽然面试官可能也不懂,但是你有没有说到点子上对方是可以听出来的。
可能你了解过 Harness 的概念,但如果有没有真正下手做过,回答时是能被看出来的。
不止 AI,很多其他领域也都是这样的:没有在真实场景下通过解决真实的问题掌握的技能,就一定会有浓浓的“纸上谈兵”感。
但 AI 行业这么新,真正落地了的 AI 产品本身就没多少,怎么才能没做过但也能回答出那种实操感呢?
今天用这篇超长的文章,教大家怎么“驾驭”一个新概念。
核心思路很简单:模拟场景 → 盘点场景问题 → 用技能解决问题
我们以 Harness 这个新词为例,通过模拟“我如何在设计写作 Agent 时应用 Harness 工程策略一步一步优化产品”这个流程,解决三个问题:
- 帮助还不了解 Harness 的 PM 掌握这个新概念
- 帮助了解了 Harness 但不知道咋用的 PM 掌握实战能力
- 演示如何在面试时回答出“实操感”
以下是把一个“裸奔”的写作 Agent,逐步通过一系列 Harness 策略“武装”成像 Claude Code 一样稳定的真·Agent 的过程。
其中关于当前阶段存在问题剖析、如何应用 Harness 策略的论述,就是你要在面试的时候讲出来的“实操感”。
从零到一:一个写作 Agent 的 Harness 工程迭代
模拟场景:开发一个「写作 Agent」——用户提供写作主题和风格参考文章,Agent 联网调研后在指定路径下输出文稿。
核心思路:以这个写作 Agent 为例,演示如何从一个「出厂配置」的基本 Agent 描述,逐层叠加 Harness 策略,最终形成一份可靠的开发规格。每一层都解决上一层暴露的问题,循序渐进。
第零章:需求背景
用户是谁?
一位内容创作者。他想写一篇关于某个主题的深度文章,手头有几篇风格参考文章,希望 AI 帮他完成「调研 → 构思 → 撰写 → 修改」的全流程,最终在指定文件夹里输出成品。
我们要造什么?
一个写作 Agent。它具备以下工具:
用户输入:写作主题 + 风格参考文章(文件路径)+ 输出路径。
Agent 在输出路径下生成最终文稿。
为什么要用这个场景演示?
写作任务有一个好特性:它天然是一条链路(调研 → 大纲 → 初稿 → 润色),步骤明确但不琐碎,适合展示 Agent 如何规划、如何执行、如何从错误中恢复。而且它不需要复杂的代码工具链,方便产品经理理解每一个 Harness 环节的意图。
v0.1:出厂配置 —— 最基础的 Agent 描述
「模型 + 循环 + 工具 = 一个能动的 Agent。就像新手机出厂设置,能打电话,但还没装 App。」
核心思路
一个 Agent 的最小构成只需要三样东西:
- 循环(Loop):接收需求 → 推理 → 调用工具 → 拿到结果 → 继续推理,直到模型认为任务完成。
- 工具(Tools):让模型能和真实世界交互——读写文件、搜索网页。
- 规划(Planning):让模型在动手前先想清楚「要分几步做」。
V0.1 描述
这是面向 Coding Agent 的提示词版本,毕竟现在产品经理的工作流程已经不再是 PRD → 原型图 → 开发协(si)作(bi)了。
这个描述能跑吗?
能。但大概率会遇到这些问题:
- • 🔴 Agent 搜了 20 条搜索结果,上下文直接撑爆,后边什么都干不了了。
- • 🔴 写到一半跑偏了,开始写跟主题无关的内容,但自己不知道。
- • 🔴 中途断了(比如工具调用报错),整个任务就废了,没有恢复机制。
- • 🔴 Agent 觉得自己写完了,其实才写了个开头就停了(或者反过来,写完了还不停)。
Agent 怎么知道「我做到哪一步了」?
它不知道。因为我们的产品描述里只定义了「Agent 需要做哪些事」,但没有定义「做到哪了算哪」。一个没有任务清单的 Agent,就像一个没有清单的装修队——干到哪算哪,重复干活、遗漏步骤是家常便饭。
v0.2:任务规划与状态管理 —— 让 Agent 知道自己在干嘛
没有计划的 Agent 走哪算哪。先列步骤再动手,完成率翻倍。
上一轮的问题
v0.1 的 Agent 有两个致命缺陷:
- 没有任务清单:模型不知道自己完成了什么、还剩什么。在长任务中,前面做的事会被后面的信息挤出注意力,导致重复干活或遗漏步骤。
- 没有「完成」的判断标准:模型凭感觉决定什么时候停。有时任务没完成就停了(「我觉得差不多了」),有时完成了还在那磨蹭。
Harness 策略
策略一:强制任务规划(TodoWrite)
在循环开始前,要求 Agent 先生成一份结构化的任务清单。这份清单会作为上下文的一部分,在每一轮循环中持续呈现给模型。
策略二:状态追踪与强制回顾
通过 Hooks(自动脚本),每轮循环结束时,自动把任务清单重新拼接到上下文末尾。利用「近因效应」——越靠后的内容对模型注意力影响越大——确保模型每轮都能看到「我做到哪了」。
策略三:熔断机制
设置最大循环轮次(如 50 轮)。同时,如果连续 3 轮模型没有更新任务状态,强制注入提示要求模型审视进度。
v0.2 描述
这样就好了吗?
好多了。Agent 现在有清单了,知道自己做到哪了,有「完成」的判断标准了。
但新问题来了:
- • 🟡 写作任务需要搜索大量资料,每条搜索结果几千字。搜 10 条,上下文就满了。Agent 读了参考文章(可能 5000 字)又搜了几轮资料后,上下文窗口已经撑到极限,后面写大纲、写初稿的空间不够了。
- • 🟡 Agent 搜资料时搜到了太多无关内容(比如搜「气候变化」结果出来一堆广告),这些垃圾信息占着上下文不走。
上下文窗口是有限的,怎么让 Agent 在有限空间里「无限」地工作?
v0.3:上下文管理 —— 在有限空间里「无限」工作
上下文窗口是 Agent 的工作台。台面就这么大,你得决定放什么、不放什么、什么该收起来。
上一轮的问题
上下文窗口(Context Window)就像一个工作台,空间有限。
一个 1000 行的文件约 4000 token,搜索结果可能上万 token。
写作 Agent 的完整工作流——搜资料 × 多轮 + 读参考文章 + 写大纲 + 写初稿 + 润色——轻松突破 100K token。
如果不做管理,要么上下文撑爆导致任务中断,要么旧信息被挤出导致模型「失忆」。
Harness 策略
策略一:首轮上下文精准组装
系统提示词不是「一股脑全塞进去」,而是分层组装:
策略二:消息历史滚动压缩
每轮工具调用的结果不会永远留在上下文中。当消息列表增长到一定程度,早期的工具调用结果会被「归档」——替换为一条摘要 + 指向原始文件的路径。模型如果需要回顾,可以主动读取文件。
这就像浏览器标签页:你看完一个网页就关掉它,释放内存;需要时从历史记录里重新打开。
策略三:Subagent 分流
搜索环节特别适合用 Subagent(子代理)。主 Agent 发出指令「帮我搜一下 XX 主题的最新进展」,Subagent 用自己的独立上下文去搜索、筛选,只把结论摘要返回给主 Agent。
好处:主 Agent 的上下文里不包含搜索结果的原始全文,只有一句话摘要。10 条搜索 × 每条 3000 字 = 30000 字的原始结果,压缩成 10 条 × 每条 50 字 = 500 字的摘要。
策略四:技能列表(Skills)按需加载
如果 Agent 有多种「写作技能」(如学术写作、公众号写作、商业文案),不需要在系统提示词里塞入全部技能的完整说明。只需放一个技能目录(名称 + 一句话描述),当模型判断需要某种技能时,再加载完整说明。
V0.3 描述
上下文管理好了,然后呢?
Agent 现在能在有限的上下文空间里把任务执行完了。但有一个新风险:
- • 🔴 Agent 在搜索资料时,执行了
bash命令curl下载了一个网页到本地,但写入路径时搞错了,把文件写到了输出路径之外的某个目录。 - • 或者更糟——它执行了
rm命令,删掉了不该删的东西。
Agent 有执行 shell 命令的能力,万一它做了危险操作怎么办?
v0.4:沙箱与权限管理 —— 给 Agent 画一个安全围栏
不是不信任模型,而是不能无条件信任。每一次工具执行都必须经过安检。
上一轮的问题
Agent 能执行bash命令,意味着它理论上可以做任何事:读写任意文件、执行任意程序、访问网络。
即使模型没有恶意,也可能因为推理错误导致破坏性操作——比如把write_file的路径参数拼错,写到了系统目录。
Harness 策略
策略一:工作空间沙箱
为 Agent 定义一个「工作空间」(即输出路径)。所有文件操作的路径都必须解析为绝对路径后,校验是否在工作空间内。
这就是「沙箱隔离」的本质:不是限制 Agent 的能力,而是限制它的活动范围。就像幼儿园的围栏——孩子可以在院子里随便跑,但跑不出去。
策略二:命令分层权限
不是所有命令都应该被同等对待:
策略三:路径逃逸防护
Agent 在多次目录跳转后,可能拼接出../../这样的路径意外逃出工作空间。每次执行文件操作前,必须将路径规范化(resolve),然后校验是否仍在工作空间内。
V0.4 描述
安全问题解决了,但还有个效率问题
Agent 现在安全了。但我们在 v0.3 版本里提到的「每轮都更新 plan.md」「每轮都检查路径」这些操作——谁来执行?
如果全靠模型主动调用工具去做,那就是在浪费模型的注意力。
模型应该把注意力集中在「写作」这件事上,而不是每轮都要想起来「我是不是该更新一下 plan.md」。
有些操作是机械性的、应该自动执行的,不需要模型操心。怎么实现?
v0.5:Hooks —— 不需要模型操心的自动化
能用程序做的,就别浪费模型的注意力。Hooks 是 Agent 的后台管家。
上一轮的问题
到目前为止,很多操作都依赖模型「主动记得去做」:
- • 更新任务清单
- • 检查路径是否安全
- • 拼接上下文信息
但模型不是人,它每轮都是一个全新的请求。它不记得「我上一轮是不是忘了更新 plan.md」。
如果靠提示词要求它做,它可能会忘;如果靠代码强制它做,它就永远不会忘。
Harness 策略
Hooks 是在 Agent 循环的关键节点自动执行的脚本,不需要模型参与:
常见的 Hooks 设计:
| Hook 类型 | 触发时机 | 做什么 |
|---|---|---|
| 路径校验 | 每次文件操作前 | 解析路径,校验是否在工作空间内 |
| 任务状态注入 | 每轮循环结束时 | 自动读取 plan.md,拼接到上下文末尾 |
| 进度监控 | 每轮循环结束时 | 检查是否连续多轮未更新 plan.md,是则警告 |
| 上下文压缩检查 | 每轮循环结束时 | 检查消息总长度,超过阈值则触发压缩 |
| 自动存档 | 每次 write_file 后 | 将文件变更记录写入 work_log.md |
V0.5 描述
Hooks 是不是万能的?
不是。Hooks 解决了「机械性操作自动化」的问题,但有些事不是自动化能解决的——比如用户偏好。
假设这个写作 Agent 是一个长期使用的个人助理。
用户用了三个月,每次都说「我想要简洁风格」「不要用太多比喻」「开头要直入主题」。每次新会话都要重复这些。
Agent 怎么记住「上一次」和「用户的习惯」?
v0.6:记忆管理 —— 让 Agent 越用越好
没有记忆的 Agent,每次对话都是初次见面。
上一轮的问题
当前的 Agent 每次启动都是「白纸一张」。它不记得:
- • 用户偏好的写作风格(简洁?华丽?学术?)
- • 之前写过什么主题(避免重复)
- • 用户纠正过哪些错误(「不要用这种开头方式」)
- • 之前任务的产出(方便复用或引用)
Harness 策略
策略一:自动记忆提取
每次任务结束后,通过一个自动 Hook 调用 LLM,从对话中提取值得记忆的信息:
这些记忆以结构化文本存储,在每次新会话的首轮上下文组装时自动注入。
策略二:跨会话检索
当用户说「上次我们写过一篇关于 XX 的文章,帮我引用一下那篇的观点」,Agent 需要能检索历史会话。但不是把历史会话全部塞入上下文,而是通过关键词检索,只拉取相关片段。
V0.6 描述
记忆有了,但还有个大问题
一切看起来不错了。但让我们回到一个基本问题:
如果工具调用失败了怎么办?
- • 搜索 API 超时了。
- •
write_file因为权限问题写入失败了。 - •
read_file读到了一个二进制文件,返回了一堆乱码。 - • 网络断了,
web_search直接报错。
在 V0.1 里,如果工具调用失败,错误信息直接塞进上下文,模型可能会困惑、重复尝试、甚至直接放弃。
在长任务中,一次未处理的错误可能导致整个后续流程崩掉。
错误发生了,Agent 怎么体面地恢复,而不是直接崩溃?
v0.7:错误恢复 —— 小错不崩,大错可控
做 Harness 的第一性原理:小错不跳循环,让模型自己处理;大错尽量别犯。
上一轮的问题
在没有错误恢复机制的情况下:
- • 一个搜索 API 超时 → Agent 不知道怎么办 → 可能无限重试,浪费轮次。
- •
write_file失败 → Agent 没有意识到文件没写成功 → 继续下一步,结果最终输出缺失。 - • 多次失败累积 → 上下文里塞满了错误信息 → 模型的注意力被错误信息绑架,忘记自己在写文章。
Harness 策略
策略一:错误信息的结构化处理
工具调用失败时,不是把原始错误日志直接丢进上下文,而是经过 Hook 处理成结构化的错误摘要:
❌ 工具调用失败:web_search原因:API 请求超时(30秒)建议:换一个搜索关键词重试,或跳过该搜索步骤这是该步骤的第 2 次失败。如果再次失败,建议跳过该步骤。这比一堆 stack trace 对模型友好得多。模型看到这个信息,知道该怎么做。
策略二:失败计数与降级
对每个工具维护失败计数:
策略三:关键节点的自动存档
每次write_file或edit_file执行成功后,自动通过 Hook 保存一个快照(或触发 git commit)。如果后续步骤出错导致文稿损坏,可以回滚到上一个正确版本。
V0.7 描述
总结:七层迭代全景
回到 Harness 的基本概念
Model + Harness = Agent
我们用七层迭代,展示了「Harness」到底在做什么:
- •循环让模型能行动。
- •任务规划让模型不迷路。
- •上下文管理让模型不遗忘。
- •沙箱让模型不越界。
- •Hooks让机械操作不消耗模型注意力。
- •记忆让模型能成长。
- •错误恢复让模型不崩溃。
每一层都不是「锦上添花」,而是在真实场景中必须解决的工程问题。跳过任何一层,Agent 在实际使用中都会暴露对应的缺陷——这就是 Harness 工程的意义。
附录:给产品经理的自检清单
如果你正在设计一个 Agent 产品,可以用这份清单逐项检查:
- • [ ]循环控制:Agent 有明确的停止条件吗?最大轮次限制是多少?
- • [ ]任务规划:Agent 能生成任务清单吗?清单会在每轮循环中被回顾吗?
- • [ ]状态管理:Agent 怎么知道自己做到哪了?连续跑偏时有检测机制吗?
- • [ ]上下文窗口:系统提示词占了多少 token?工具定义占了多少?给对话历史留了多少空间?
- • [ ] 上下文压缩:消息历史太长时怎么处理?压缩后关键信息丢了吗?
- • [ ]沙箱:Agent 的文件操作有路径限制吗?能逃逸出工作空间吗?
- • [ ]权限管理:哪些命令直接执行?哪些需要用户确认?哪些永远禁止?
- • [ ]Hooks:哪些操作可以自动化?不依赖模型主动记得去做?
- • [ ]记忆:用户的偏好怎么跨会话传递?历史会话怎么检索?
- • [ ]错误处理:工具调用失败时怎么告诉模型?连续失败时怎么降级?
- • [ ]用户追加消息:Agent 干活时用户发了新消息,怎么处理?中断还是排队?
另一个版本
上面是按照 Agent 作业流程的「任务规划」开始,把流程上每个遇到的问题进行优化的版本。
另一个思路是从 Agent 的另一个基础组件tools的优化开始的。
最终解决一样,但却是思维方式的差异:
- • 前者是流程导向,通过约束流程的可控性来确保产品的可控性
- • 后者是原子导向,通过约束基本组件的可控性来保证产品的可控性
学AI大模型的正确顺序,千万不要搞错了
🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!
有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!
就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋
📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇
学习路线:
✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经
以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!
我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~
