这篇文章不讲 Prompt 技巧,也不推销某个 Skill,只聚焦两个核心问题:在企业工程环境中,如何将大模型约束与治理(Harness)为可持续参与交付的协作者;以及大模型时代,程序员为何正从“亲手写代码的人”,转向“定义目标、控节奏、做验收的人”。(内容基于作者技术实践与独立思考,仅代表个人观点。)
过去一年,行业对 AI Agent 的讨论多集中于模型能力比拼与 Prompt 优化。这些固然重要,但当 Agent 进入企业工程环境时,决定成败的关键往往不是 Prompt 写得多精妙,而是 Harness 建设是否扎实。
Harness 不是某条提示词、某个工具或几份文档,而是一整套将大模型纳入工程体系的控制面:如何提供唯一真相源?如何约束执行边界?如何接入业务能力(Capability)?如何观测、调试运行状态?如何确保产出可验证、可回归,便于其他工程师接手?
在内部项目 Aegis 实践中,团队初期并未急于构建“发请求的 Agent”,而是从研读架构文档、收敛目标、迁移参考实现起步。推进中频繁遭遇上下文断裂、Tool 耦合、接口 504/403、本地测试异常退出等工程摩擦。复盘发现,能否跨越这些障碍,与“换更聪明模型”关系不大,关键在于哪些节点成功建立了 Harness。
本文提出两个相互咬合的判断:当前大模型已足够强大,可实质性参与研发交付;但若缺乏 Harness,它仅是高级玩具;唯有构建 Harness,才能使其成为研发链路中的可靠协作者。正因如此,程序员的核心价值正发生迁移——从“亲手写出每一行代码”,转向“定义目标、卡住边界、掌控节奏、验收结果”。
这一迁移并非并列关系,而是因果关系:正因程序员必须学会放权,不再事无巨细亲力亲为,才亟需先建 Harness;也正因 Harness 成型,这种从执行者向控盘者的身份升级才真正可行。
一、Harness 到底在管什么?与传统软件工程有何区别?
许多工程师初闻 Harness,常误以为只是“加测试、看日志、写规范、Code Review”等良好实践。若仅止于此,无需新造术语。理解 Harness,须划清一条关键边界:
传统软件工程管理「确定性」,Harness Engineering 管理「非确定性」。
传统工程是为人类设计的防呆系统——我们有常识,但易手滑出错。一个 add(a, b) 函数,只要无 bug,结果恒定。而大模型是概率引擎:相同输入,可能直接返回结果、调用无关 Tool,或因前文某句话“幻觉”失控。
因此,Harness 并非泛泛的“好习惯”,而是专为将一台「聪明但缺乏工程常识的非确定性引擎」嵌入「确定的业务流水线」所设计的物理控制面。
二、架构坐标系:Harness 的边界在哪?
我们以两个坐标轴界定 Harness Engineering 的边界:
X轴(执行流路由):静态预设 vs. 动态自主——下一步动作,是由代码写死,还是由模型自主决定?
Y轴(状态与上下文):隐式内部 vs. 显式外部——系统记忆是依赖 Prompt 窗口维持,还是交由外部数据库/状态机接管?
据此可绘制 AI Agent 架构模式边界矩阵:

四个象限无绝对优劣,重在场景适配:
【象限三:无状态链】:如单次 API 调用,将 LLM 当纯函数。轻量、高并发,适合翻译、情感分类等一次性任务,成本低、吞吐高。
【象限二:提示词驱动】:如 AutoGPT、原生 ReAct。模型自主性强,中间步骤全堆于 Prompt 中。适合探索性问题、创客试错、短链路任务,开发成本低。
【象限四:传统管道】:如 LangChain 顺序链。外部状态管理严谨,模型仅为被动调用的“处理节点”。适用于流程固定、仅需 LLM 处理非结构化数据的场景。
【象限一:Harness Engineering】:模型提供意图,外部 Harness 负责状态隔离与沙盒校验。开发成本较高,但能有效应对上下文溢出、接口报错、团队协作维护等痛点,以合理成本换取系统稳定性下限。
三、避坑指南:识别“伪 Harness”与“劣质 Harness”
有了象限图,可破除常见架构错觉。许多团队陷入混乱,源于未分清“是不是 Harness(边界问题)”与“是不是好做法(质量问题)”。
错觉 1:根本不是 Harness,且是坏做法(伪 Harness)
此类做法试图在单次对话上下文(象限二)内解决所有问题,模型之外无物理约束。
“软约束”陷阱:在 Prompt 中堆砌 5000 字、数十条
DO NOT。这只是“口头嘱咐”,长链路中极易失效。Prompt 是指令,Harness 是约束——前者在模型脑中,后者在模型体外。“军火库”陷阱:一次性赋予 Agent 20 个 API 自行调用。无边界约束,危险操作迟早发生。
错觉 2:是 Harness,但质量差
建立控制面确属 Harness,但不等于“好”。粗暴控制同样引发问题。
“盲打”陷阱(暴力死循环重试):外层套执行器,一报错即把 Error 塞回模型重试。虽属控制流,但裸奔 Loop 易致模型陷入死胡同——为修一个语法错,误删核心架构。
“官僚主义”陷阱(强制重型文档流):生搬瀑布模型,强令模型先输出万字设计文档再编码。虽属状态管理,却浪费 Token,且现实变更后,巨型文档迅速沦为无人维护的垃圾。
好的 Harness 应具备什么特征?
前置验证(Evaluator 沙盒):单测失败时,抓取日志供 Agent 在沙盒中基于证据触发 Retry,修复前强制复述“核心目标”。
最小真相源(Spec is Truth):维护轻量状态机文档,保障跨天任务上下文无损恢复。
物理门禁(Checkpoint Before Execute):设置系统级审批节点作为刹车,模型破坏现有环境前须获授权。
四、为什么企业环境中 Harness 比 Prompt 更重要?
本地 Demo 中,诸多缺陷可被掩盖:人工兜底、硬塞上下文、依赖模型“超常发挥”。但企业工程环境容错率极低:链路长、边界严(涉内部鉴权)、试错成本高。Agent 面临的挑战不再是“能否写出漂亮代码”,而是:调用接口是否正确?执行失败能否自主读日志定位?上下文能否被人类随时接管?这些问题,再长的 Prompt 也无法解决。
这也带来现实的身份迁移:工程师核心价值正从“亲手写出每一行代码”,逐步转向“定义目标、卡住边界、掌控节奏、验收结果”。
初接触 Agent 时,工程师常本能代入“资深程序员”角色,纠结模型每行代码细节。但若将其视为高速执行者协作,你的角色将日益趋近技术负责人 / 交付负责人:
无需逐行干涉代码落地;
更需紧盯交付目标、阶段重心、风险点及验证证据;
不必事事亲为实现;
但必须能在关键架构、关键边界、关键异常处快速下潜、重新接管。
换言之,Harness 不仅“管住模型”,更倒逼人类工程师升级工作方式:从执行者变为控盘者;从写代码的人,变为驾驭非确定性系统完成交付的人。
需警惕一种误区:将此迁移理解为“程序员只需甩活”。准确表述应为:可不再亲手写大量代码,但绝不能放弃技术判断。
真正强的 Harness 使用者,并非完全不看代码,而是清楚何时无需盯细节、何时必须下潜检查。日常不干涉模型编写每个函数,但在以下时刻必亲自接管:
架构主线可能被污染时;
阶段目标开始漂移时;
运行时日志暴露系统性异常时;
模型将“阶段完成”误报为“全局完成”时。
从团队视角看,Harness 的价值不仅是提升模型利用率,更在于重塑工程师角色:让最有经验者从重复实现中抽离,聚焦于目标建模、过程控盘、关键抽查与结果验收。
因此,完成身份迁移的前提是学会放权;而安全放权的前提,是先建 Harness。这正是 Harness 在大模型时代最根本的现实意义。
五、Aegis 案例:一个 AI Agent 是如何被 Harness 出来的?
Aegis 项目打破了“一段神仙 Prompt 即可生成完整系统”的幻想。真实路径是:一步步将裸奔模型拉入既定轨道。
起步阶段:先收敛目标,不急着编码
最易踩的坑是一上来就让 Agent 写功能。Aegis 中首条指令为:“本项目为一个空 Python 项目,请阅读架构设计文档,了解需求后复述并讨论。”这是 Harness 第一层:收敛目标与边界。连续开发阶段:用 Spec 和 Handoff 对抗上下文腐烂
开发日志中常见开场白:“请阅读_2026-03-07_Chat_Handoff_FullLangGraph.md恢复任务上下文。”单轮 Prompt 无法承载“昨日所为、为何如此”。Spec 与 Handoff 构成 Agent 的“外部持久化记忆”,防止认知漂移。执行阶段:将 Prompt 溶解进 Capability 框架
处理复杂业务时,直接问模型:“先召回再喂模型,还是一次性全喂?”Capability 并非玄学:一个 Capability = 专属 Prompt + 确定性 Python 脚本 + Validator。“将 Prompt 溶解进路由”意为:不再用数千字穷举分支,而是拆为独立 Python 管道(如pipeline_two_stage.py)。Agent 执行前轻量路由决策,决定数据流向,而非在巨大提示词中靠概率“猜”。运行阶段:跨越“能聊”与“能跑”的分水岭
Agent 接入真实环境后,直面 Chat 接口静默退出、504 超时、403 拦截。解决方式非调整 Prompt 语气,而是引导:“先定位 Chat 接口 SSE 链路,查无文本输出即收尾的原因。”将问题转化为可诊断的链路排错,是跨越此坎关键。交付阶段:让测试与回归前置化
Agent 执行前主动确认:“我先确认测试入口和构建方式,仅运行最适配的单测,避免高开销动作。”测试不再是收尾动作,而是工作轨道本身。
这套方法可压缩为一句话:不将大需求整包丢给模型等待“神奇做完”,而是持续对齐阶段目标,要求其复述目标、检查偏差、提交中间产物;完成一阶段后 Review、提测、手动验证,并将真实日志反馈模型继续收敛。
Harness 的价值,不是“让 Agent 更自由”,而是让人类始终握紧方向盘,将非确定性执行压缩为可验证、可回退、可交接的小闭环。
六、实施层骨架:sdd-riper-one-light 扮演什么角色?
先厘清层级:SDD(Spec-Driven Development)是人机协作的「方法论」与「工具」,Harness 是承载它的底层「架构」。
Harness 提供物理基础设施——沙盒环境、运行时日志收集、能力路由。sdd-riper-one-light 是运行于该架构之上的实施协议与工具骨架。
从 Harness Engineering 视角看,大模型本质是聪明但高度非确定性的函数。sdd-riper-one-light 运用契约式设计(Design by Contract),将该非确定性引擎夹入确定性管道。
其四大控制点对应三大契约:
前置断言(Pre-conditions)—— 拦截输入端失控
强制 Checkpoint 与 Restate First:执行高危代码前,模型须复述核心目标、下一步动作及风险。断言未通过批准,函数拒绝执行,打断“盲目滑行”。
后置断言(Post-conditions)—— 拦截输出端幻觉
闭环回写(Reverse Sync):动作完成后,模型不可主观宣布成功,须经测试与日志等外部证据交叉验证。验证通过后,结论与残留偏差须回写。
不变式(Invariants)—— 对抗跨周期状态腐烂
维护最小真相源(Spec is Truth):强制维护精简 Spec,记录目标与结论。无论模型内部 Context 如何滚动遗忘,该外部 Spec 是生命周期中不可篡改的“不变式”。
总结:Harness 提供底层轨道,sdd-riper-one-light 是跑于其上的工具,以前置、后置与不变式契约锁住非确定性引擎每一步。
七、行业印证:Harness 正成为顶级团队共识
当 Agent 迈向生产环境,顶尖团队终将告别“Prompt 调优”,转向 Harness Engineering。
OpenAI Engineering:代码仓库成为唯一记录系统
OpenAI 内部用 Codex 端到端生成应用时,核心结论为“情境是稀缺资源”。团队放弃巨型 Prompt 全局掌控思路,转而以代码仓库(docs/下结构化文档)为记录系统,人类角色升维为搭建 Harness 轨道的“环境设计师”。Anthropic Labs:用 Checkpoint 对抗长任务失控
Claude 团队设计长时自治编程框架时,在 Harness 中引入强制 Context Resets,通过结构化工件实现会话间状态交接;同时剥离执行者与验证者,由独立浏览器的 Evaluator Agent 提供外部客观真相。某大厂:
deer-flow的自动化沙盒
登顶 GitHub Trending 的deer-flow自称“Super Agent Harness”:将模型“大脑”与执行环境物理隔离,提供独立 Docker/K8s 沙盒;能力边界沉淀为按需加载的SKILL.md;底层用 LangGraph 状态机编排子智能体。
底层哲学相通:欲释放大模型生产力,第一步必先建好约束与轨道。
八、如何从 0 到 1 落地?
若计划在团队内落地 Agent,建议按以下路径推进,警惕“全自治”陷阱:
先搭真相源:建立 Spec 与状态文档机制,杜绝上下文仅存于聊天窗口。
约束执行边界:业务闭环前,引入 Checkpoint 与 Approval 机制,确保方向盘可控。
构建最小能力目录:明确 Agent 可用 Tool 与接口边界,消除“幻觉猜测”。
前置验证闭环:尽早接入单测、回归与日志检索,让 Agent 习惯在反馈中修正。
完善恢复机制:跑通 Handoff 流程,任务中断或报错后可随时重载续作。
逐步释放自由度:先铺好轨道,再追求自动化速度。
若需轻量但稳定的任务控制骨架,sdd-riper-one-light 是理想起点,后续可逐步补齐日志、路由、测试等架构层。
总结
AI Agent 时代的工程命题,远不止“让模型替我们写代码”。
更深层问题是:如何将一个智商高但缺乏常识与持久稳定性的“超级大脑”,纳入一套严谨、可预测、可持续迭代的工程体系;以及人类工程师如何从执行者,升级为该体系的控盘者。
Aegis 案例揭示两大工程事实:
从 0 到 1 开发 AI Agent,需精心设计的不只是提示词,更是控制面、运行轨道与反馈闭环;
大模型时代,最有价值的程序员,不再只是写代码最快者,而是最善定义目标、约束非确定性、抓住关键结构并真正交付结果之人。
对团队而言,值得复制的往往不是某段“神仙 Prompt”,而是这套底层 Harness 思维,以及从“亲自实现”迈向“过程控盘”的工程角色升级。直白而言:程序员之所以必须从“写代码的人”迁为“控盘的人”,恰因执行权正大规模下放至非确定性模型;而 Harness 的作用,正是让这种放权变得可控。
附:实操方法精华版
若主文解答“什么是 Harness、为何重要、架构边界在哪”,本节聚焦一事:当执行权交予强但非确定性模型后,如何稳稳控其于轨道之中。
核心原则仅一句:我在每个阶段只给模型一个带边界的输入;它必须先交付中间产物;我用 Harness 控制点核验无误后,才允许进入下一步。
一、一个够用的 8 阶段 SOP
阶段 |
我给模型的输入 |
先要求它返回什么 |
我的控制动作 |
目标收敛 |
先读文档,不准上来写代码 |
需求复述、主线判断、疑问边界 |
先纠偏,再放行 |
状态恢复 |
先读 Spec/Handoff |
已完成项、未完成项、接续建议 |
用外部真相源恢复状态 |
上下文装配 |
不整包投喂,只给索引 |
最小上下文清单 |
按需补充,避免爆 Context |
任务分块 |
这一轮只做一个小段 |
1–3 个动作、风险、验证方式 |
只批准当前轮次 |
链路设计 |
先判断该走什么模式 |
执行模式和装配方案 |
先定路线,不盲改 Prompt |
执行前校准 |
先别改代码,先 Checkpoint |
当前理解、下一步、风险、验证方案 |
对齐后再 Approval |
外部验证 |
不接受“我觉得好了” |
基于日志、测试、回包的事实判断 |
用证据而非主观感觉决策 |
回写交接 |
暂停前必须回写 |
完成项、偏差、残留问题、下一步 |
给下一轮留下干净恢复点 |
此表真意不在“流程复杂”,而在:你不能让模型一路黑盒干到底。每一轮都须先拿到中间产物,再决定是否放行。
二、真正要盯的是“三层目标”
长链路任务中,最危险的并非模型不会做,而是它绕过阶段目标,直冲自认的“总目标”,表面努力,实则偏航。
故须同步盯住三层目标:
总核心目标:整个项目或大阶段最终要达成什么;
阶段性核心目标:当前几轮对话,只允许收敛哪一个主问题;
本轮动作目标:本轮具体只允许执行 1–3 个动作。
实用判断原则:阶段完成 ≠ 全局完成。若仅收住一条主链,须明确声明:“本轮最小收敛完成,但整体尚未结束。”
真实协作中,最需关注的正是三层目标是否被混用:总目标指北,阶段目标收束,本轮动作目标防“一口气做完整件事”。
三、识别偏航的 4 个信号
以下情况通常预示模型开始偏航:
绕过阶段目标,直接谈总目标;
跳过中间产物,直接声称要改代码;
用主观语气替代客观证据;
混淆阶段完成与全局完成。
一旦出现,勿与其辩论“你聪明一点”。更有效做法是:重设门禁、重压目标、重求证据。
Harness 的价值常被误解为“开局别跑偏”,但工程现实更常见的是:它并非一开始就错,而是做着做着慢慢偏。因此,你的控制动作必须是持续性的,而非起手一次指令即告终结。
四、一轮真实推进长什么样?
为使方法更具实操性,将一个完整回合压缩为最小闭环:
起手时,我不会说:
“帮我把这个 Agent 的后端全写出来。”
我的真实起手式更像:
“先读架构设计文档,理解我要做什么;不要急着实现,先复述你的理解,并告诉我你认为项目主线应该怎么收敛。”
这步目标非礼貌确认,而是检验其是否抓住总目标与当前主线。
收敛后,我也不会立刻说“开始写吧”。通常再压一层:
“先把这轮任务压成一份最小 spec,写清目标、范围和边界;没有我的允许,不要展开具体实现。”
此举旨在防止总目标偷渡进本轮。
真正动手前,我还会再卡一次 checkpoint:
“先别改代码。做一次 Checkpoint,总结当前理解、核心目标、下一步动作、风险和验证方式;我确认后你再执行。”
若此步说不清,后续执行越快,偏得越远。
改完后,我不接受“我觉得已经修好了”。只接受:
“不要主观判断。去看测试、日志和接口的实际回包,基于事实再告诉我现在是什么状态。”
最后准备结束时,我也不会直接关轮次。会要求它明确区分:
“这次最小收敛是否完成?整个总目标是否完成?如果没有,下一轮最小目标是什么?”
此举意义重大,可强行切开“阶段完成”与“全局完成”。
五、真正有教学价值的地方在“纠偏”
若查看真实项目记录,最有价值部分往往不是模型一路做对了什么,而是它开始偏时,你如何将其拽回。
典型纠偏链路如下:
先让它读
handoff恢复任务,重新对齐总目标、阶段目标与当前状态;若其欲直接推进实现,则卡
checkpoint,令其重申当前理解、下一步动作与验证方式;运行时日志反咬,如接口空结束,或出现
504、403;此时不令其“顺手多修几个点”,而是重定义本轮最小目标,如仅定位某链路为何直接收尾;
修一轮后不轻言完成,须推进至测试、日志、预发环境及手动验证,确认最小目标是否真已收住;
最后迫使其明确回答:本次最小收敛是否完成?系统性问题是否完成?若否,下一轮最小目标为何?
整条链路最关键变化仅一句:阶段目标非一锤定音,而须随真实证据动态重对齐。
因此,Harness 并非“严格按预设流程走完”,而更接近一种动态控盘能力:
大方向靠总目标锚定;
当前轮次靠阶段目标收束;
一旦证据变化,立即重定义本轮最小目标。
六、一个更完整的 Session 拆解
若前述仍偏方法论,此处提供更贴近真实工位现场的节奏拆解(非逐字稿,但判断点与真实项目对齐):
Round 1:先收敛,不实现
“先读架构设计文档,不要实现;先复述你理解的目标,并告诉我当前项目主线应该怎么收敛。”
此轮目标非代码,而是三样东西:其理解的总目标、识别的阶段主线、发现的边界与疑问。若其主动谈实现,立即打断:“先别实现,先把目标和边界说清楚。”
Round 2:压成最小 spec
“现在把这轮压成一份最小 spec,写清目标、范围、约束和暂不处理项;没有批准不要进入实现。”
此轮关键确认:它是否知悉本轮仅做 spec;是否明确“暂不处理项”;是否将总目标混入本轮范围。
Round 3:跨线程恢复
“阅读 handoff / spec 恢复任务,先告诉我现在做到哪里了、还剩什么、你建议从哪一段接着推进。”
关键不在“赶紧继续干”,而在令其基于外部真相源恢复,而非凭印象续写。
Round 4:执行前 checkpoint
“先别改代码。你先总结当前理解、核心目标、下一步动作、风险和验证方式;我确认后你再执行。”
此轮实际检查五点:目标是否仍对、动作是否够小、风险是否预见、验证是否客观、是否又偷跑实现。
Round 5:运行时反咬,重新定义阶段目标
执行后常见非顺利,而是日志反咬,如链路出现:
RUN_STARTED → TEXT_MESSAGE_START/END → RUN_FINISHED
此时不沿大目标推进,而立刻改写本轮目标:
“先不要扩展修复范围。当前阶段目标改为:只定位 chat 为何直接结束。先做原因分析,不改代码。”
类比驾驶:原走大路线,证据显示前方路塌,当前目标即变更为“先判路为何塌、能否通行”。
Round 6:基于证据做阶段验收
定位修复后,不接受“应该好了”:
“不要主观判断。去看测试结果、日志、接口回包和测试环境现象,基于证据回答:这次最小目标是否完成?若否,还差什么?”
此轮只认三类证据:测试结果、日志与链路现象、测试环境或手动验证的现场证据。唯当模型能明确答出“本次最小收敛完成,但全局同类问题尚未彻底治理”时,方视为真正进入 Harness 节奏。
七、可直接照抄的几组句式
起手收敛
先读架构设计文档,不要实现。先用你的话复述你理解的目标,并告诉我你认为当前项目主线应该怎么收敛。
压最小 spec
先把这轮任务压成最小 spec,写清目标、范围、约束、暂不处理项;没有我的批准,不要进入实现。
恢复任务
先读这份 spec / handoff 恢复任务。告诉我现在做到哪里了、还剩什么、你建议从哪一段接着推进。
执行前 checkpoint
先别改代码。做一次 checkpoint:总结当前理解、核心目标、下一步动作、风险和验证方式;我确认后你再执行。
发现偏航时
先停,不要继续展开。你先复述:这轮阶段性核心目标到底是什么,不要谈总目标。
基于证据验证
不要主观判断是否完成。去看测试、日志、接口回包和现场现象,基于事实再回答。
阶段验收
不要把这次最小收敛和全局完成混为一谈。明确告诉我:这轮完成了什么,还没完成什么,下一轮最小目标是什么。
收尾回写
任务暂停。把这一轮实际做了什么、验证了什么、还剩哪些问题没做,全部回写到 spec / handoff,保证下一轮能直接接着干。
八、如何拿捏“精简”与“能教会人”的平衡
若写太短,读者仅记口号难落地;若太长,易被细节拖慢阅读。稳妥平衡点在于:
保留一张 SOP 总表,助读者建立全景地图;
保留“三层目标”与“偏航信号”,明确盯控要点;
保留一轮完整推演,呈现顺序与节奏;
保留“日志反咬后如何改写阶段目标”的纠偏案例;
最后提供句式清单,支持即刻上手。
真正应删减的,通常是重复解释、冗长逐字稿、相似案例中的重复部分,而非教学闭环本身。

