资讯动态

Agent Harness 深度解析:模型负责想,它负责让事情继续往前走(附 148 行可运行实现)

发布时间:2026/9/23 9:56:52 来源:尧图企业网站定制
摘要2026 年 9 月AI 圈发生了一件容易被忽略、却极其重要的事OpenAI 把 Codex 背后的 Harness 开源并做成了托管服务Anthropic 把 Claude Code 的循环开放成 Agent SDK腾讯开放了 WorkBuddy 的基座——三家公司不约而同地打开了自家 Agent 的引擎舱。本文讲透 Harness 这个概念它是什么、六个核心部件是怎么被模型一步步逼出来的、学界关于Harness 该不该自我进化的最新争论以及笔者用 148 行 Python 从零写一个可运行的 mini-harness 的完整实录含权限守卫、上下文裁剪、观测回灌三个关键机制的验证截图。读完你会明白大模型时代真正的护城河可能不在模型里而在模型外面那套操作系统。一、这个 9 月三家巨头同时打开了引擎舱先看三条时间线。9 月 2 日腾讯开放 WorkBuddy 基座金融、法律、医疗等行业伙伴可以直接在上面搭建行业 Agent首批伙伴超过一百家9 月 10 日OpenAI 把 Codex 背后的 Harness 做成托管服务开放公测——而就在一个月前这套系统的核心代码刚被开源再往前Anthropic 早已把 Claude Code 的 SDK 扩展成通用 Agent SDK把读代码、调工具、看结果、再修改的工作循环交给开发者。三家打法不同动作却出奇一致把原本只供自家产品运转的系统变成别人开发 Agent 的起点。要理解这个动作的分量得先看两组数字。Anthropic 在 9 月披露公司 80% 的代码由 Claude 编写内部研发平台上任意时刻有约 3 万个 Agent 在并行工作自研工作中AI 主导的比例半年内从不到 1% 冲到 26%。而另一边汹涌而来的 AI 代码让自家的 CI 系统半年内任务量暴涨 25 倍连续三次打补丁都没扛住。这两组数字放在一起指向同一个结论**当下制约 Agent 产能的已经不是模型聪不聪明而是模型外面那套让它能持续、安全、可验证干活的系统。**这套系统就是本文的主角——Harness。二、Harness 到底是什么一句话、一个公式、一张图Harness 本义是马具把马力转化为拉车的那套挽具。放到 Agent 语境里它指的是模型之外的一整套运行时系统上下文怎么装配、工具怎么暴露、错误怎么处理、任务做到什么程度算结束、记忆写在哪里、危险操作怎么拦截。一句话概括模型负责想Harness 负责让事情继续往前走。如果非要写成公式2026 年越来越多 AI 系统接近的是这个形态Agent 模型大脑 Harness操作系统 AI System Model Runtime Environment State/Memory Verification Learning Loop上图两侧的对比就是聊天机器人和Agent的分界线。左边是裸模型一句话进、一段话出转头就忘、说得出口落不了地。右边是模型加上 Harness 之后的形态——模型还是那个模型但它的每一次思考都被一套系统接住上下文经过装配和裁剪行动通过工具注册表出去高危操作被权限守卫拦下每一步的观测结果回灌给模型决定下一步任务有明确的停止条件。一个容易被忽略的事实是**同一个模型参数一个不动仅仅换一套 Harness表现就可能出现数量级的差异。**这也是为什么 2026 年Harness 工程开始从幕后走到台前成为和提示词工程、RAG 并列的一等公民。把这条边界画清楚很多争论就有了答案。有人说Agent 就是提示词写得好可提示词只影响单次推理管不了第 37 步的上下文溢出也拦不住一次危险的删除操作也有人说Agent 就是模型够强可再强的模型如果没有停止条件遇到一个任务就会无限重试烧穿预算。提示词、模型、Harness 三者的关系更像是战略、参谋、后勤决定打不打得赢的是前两者决定会不会在路上饿死的是后者。这条认知在 2026 年已经不再是圈内的冷知识——各大公司招聘 AI 工程师时Agent 系统设计已经从加分项变成了必答题。三、六个部件全是被模型逼出来的今天一个成熟的 Harness——管理子 Agent、维护记忆文件、处理权限隔离——看起来像一套小型操作系统。但它的起点朴素得只有一行代码answer LLM(question)。复杂性不是架构师一次设计出来的而是被模型一次次越界逼出来的。每一代 Harness 都在补上一代暴露的真实短板模型暴露的短板被逼出来的部件对应 mini-harness 中的实现记不住上一轮说了什么上下文装配Context每轮重新装配 超窗自动裁剪没法改变真实世界工具注册表ToolsToolRegistry.register()一次调用搞不定任务主循环Looprun()里的循环 观测回灌历史越滚越长装不下记忆/裁剪Memory窗口裁剪窗口外落盘循环开始删文件、跑命令权限守卫Guarddanger 工具默认拦截 路径越界校验一个循环不够快子 AgentSubAgent任务拆解并行派发这张表值得多看一眼的地方在第三列上面每一个概念落到代码里都只是一小段朴素的逻辑。Harness 工程的门槛不在单点技术而在把十几个小机制组合成一个彼此咬合的闭环。第五节的实录会验证这句话。把这张演化表展开看还有一条更深的主线每个部件的出现都对应着模型一次从能说到能做的跨越而每次跨越都会立刻暴露出下一层的问题。上下文装配解决了记得住紧接着就暴露出记得多但分不清重点于是有了分层保留和自动裁剪工具注册表解决了够得着紧接着就暴露出够得着的东西太危险于是有了权限守卫和操作分级主循环解决了做得完紧接着就暴露出做得快但不一定做得对于是有了验证和评估环节。今天大家热议的子 Agent 并行本质上是同样的故事再演一遍单循环的串行速度成了新的瓶颈于是把任务拆给多个带独立上下文的子循环。**每一次部件的补齐都是上一代方案在真实任务里摔跟头摔出来的。**理解这条主线比记住任何一个具体框架的名词都重要——框架会过时这个短板驱动演化的规律不会。四、前沿之争Harness 该手写、该搜索还是该自己进化Harness 成为热词之后学界的争论也跟着来了。2026 年下半年有三条路线值得关注它们的分歧点在于这套系统应该由人来写、由算法来搜还是让 Agent 自己进化。**路线一WHALE权重与 Harness 交替优化。**8 月底这篇论文提出了一个足够锋利的判断模型权重和运行它的 Harness 才共同构成 Agent两者必须交替进化——先在当前 Harness 下更新权重再基于新模型搜索更好的 Harness循环往复。在数学推理等任务上这种交替方案比只练权重或只搜 Harness 高出 4 到 24 个百分点的准确率。但它同时也暴露了风险联合优化很容易变成对特定任务的条件过拟合搬到生产环境要格外小心。**路线二Harness Evolution让 Agent 改自己的挽具。**更激进的思路是让 Agent 分析自己的失败轨迹自动修改提示词、工具集和控制逻辑。但 AI2 和华盛顿大学的一项研究给这股热潮泼了盆冷水把 Harness Evolution 和最朴素的多跑几遍放在相同推理预算下公平对比复杂的自我进化并没有稳定胜出而且进化出来的 Harness 拿去解决没参与过优化的新任务时提升只剩零头。**路线三工程化分层把进化限制在笼子里。**这是目前工业界更务实的选择——把持续改进拆成模型层、Harness 层、Agent 层三层各层独立演进。有实测数据显示模型完全不变仅把脚手架升级效果可以提升 1.8 倍。代价最小、可控性最强这也是为什么它成了企业落地的默认路线。这三条路线的争论本质上是在回答同一个问题**Harness 的价值既然已被证实那它的迭代权应该交给谁**现阶段务实做工程的人答案通常是人定框架、算法搜索、Agent 只做受限的微调。对一线开发者来说这场争论还有一个更直接的读法路线一和路线二是研究者的游戏需要算力、评测集和大量失败轨迹做燃料路线三才是普通人今天就能落地的。而且路线三并不排斥前两条——你完全可以在自己的 Harness 里留一个实验开关让 Agent 在受限范围内调整提示词模板但每一次调整都要过评测关卡才能生效。这样既保留了自动进化的好处又把它可能带来的不可控性锁在了评测的笼子里。事实上本文第五节的 mini-harness 就预留了这种扩展空间run()的循环结构不变把固定提示词换成可配置模板就是一个最小化的受限进化实验台。五、动手实录148 行写一个 mini-harness概念讲一万遍不如真跑一遍。笔者照着上面第三节的六个部件用 Python 写了一个最小可用的 Harness全程不到 150 行不依赖任何框架装好 Python 就能跑。这里只贴最核心的三段完整代码随文附带。**第一段工具注册表 权限守卫。**这是整个 Harness 里安全含量最高的部分做了两件事所有文件操作锁死在工作区内防路径越界高危工具默认拒绝执行classToolRegistry:def__init__(self,workspace:str):self.workspaceworkspace self.tools,self.log{},[]def_safe(self,rel):路径守卫一切文件操作锁死在工作区内pos.path.realpath(os.path.join(self.workspace,rel))ifnotp.startswith(os.path.realpath(self.workspace)):raisePermissionError(路径越界: rel)returnpdefcall(self,name,**kwargs):toolself.tools.get(name)iftoolisNone:return{error:f未知工具{name}}iftool[danger]:self.log.append((DENY,name))return{error:f权限拒绝:{name}属高危操作需人工在终端确认}try:outtool[fn](**kwargs)self.log.append((OK,name))return{result:out}exceptExceptionase:return{error:f{type(e).__name__}:{e}}# 错误回灌而非崩溃**第二段上下文窗口与自动裁剪。**真实 Agent 的上下文永远有限Harness 必须决定模型此刻能看见什么MAX_TURNS2# 演示用小窗口模拟真实上下文限制defassemble(system,history):kepthistory[-(MAX_TURNS*2):]# 只保留最近 N 轮trimmedlen(history)-len(kept)notef\n[system] 上下文已自动裁剪{trimmed}条旧观测iftrimmedelsereturnf{system}{note}\n[task]{history[0]}\n\n.join(kept)**第三段主循环。**观测结果回灌给模型、步数上限兜底这两个机制缺一不可——前者让模型看见工具的真实结果包括报错后者防止循环失控烧穿预算defrun(llm,registry,task,max_steps10):history,budget[task],{steps:0,calls:0}forstepinrange(1,max_steps1):promptassemble(你是巡检 Agent只能使用提供的工具。,history)outllm.respond(prompt,observationNoneifstep1elsehistory[-1])ifout.get(final):returnout[final],budget# 模型主动收工obsregistry.call(out[tool],**out[args])history.append(fcall{out[tool]}{out[args]})history.append(fobs{json.dumps(obs)[:80]})return达到步数上限强制停止,budget# 停止条件防失控给它的任务是巡检一个演示目录统计 Python 文件、生成报告。为了输出可复现代码里内置了一个脚本化的 MockLLM接真实模型只需要实现同样的respond接口代码里附了完整的 OpenAI 兼容适配器填上 Key 就能跑。运行方式只有一行python mini-harness.py --mock切换真实模型则加--base-url、--api-key、--model三个参数。实际运行结果如下这次运行把三个关键机制全部验证了一遍第 3 步模型试图删除config.py里面故意放了密钥权限守卫直接拦截错误信息回灌给模型后它没有崩溃、没有重试而是把已拦截写进了最终报告——这就是错误是观测而不是异常的 Harness 哲学上下文窗口每轮自动裁剪模型始终只看见最近 4 条记录budget统计显示 5 步 4 次工具调用完成任务循环正常终止。四条实战经验是这次动手最值钱的收获**第一权限守卫必须做在 Harness 里而不是写在提示词里。**提示词是请求Harness 是强制。这次故意让模型去删带密钥的文件如果拦截逻辑只写在系统提示词里换个模型、换轮对话就可能失效。**第二上下文裁剪的粒度比算法更重要。**演示里粗暴地保留最近 N 条生产上要按系统指令 任务目标 最近观测 历史轨迹的优先级分层保留。但无论哪种策略裁剪动作本身必须由 Harness 自动完成不能指望模型自己记得看重点。第三报错信息是给模型看的要按可行动的标准写。权限拒绝: delete_file 属高危操作需人工确认这条观测让模型立即调整了行为如果只返回Error 403模型大概率会盲目重试。第四预算和停止条件从第一行代码就要有。max_steps10看着简陋它对应的是生产系统里的 token 预算与熔断机制——Anthropic 的 Agent 之所以能 3 万个并行不失控靠的正是每个循环都有硬性边界。六、Harness 定型之后能力从哪里来跑通 mini-harness 之后会发现一个清晰的分工Harness 解决Agent 怎么干活Skill 解决Agent 会干什么。工具注册表里注册的是原子能力而把领域知识、操作流程、脚本模板打包成可插拔的模块靠的是这两年已经形成事实标准的 Skill 机制。最后把三层关系画清楚这是很多人容易混的地方**Harness 是运行时管的是怎么干活——循环、预算、权限、裁剪MCP 是工具协议层管的是工具从哪来——它规定了模型和外部服务之间的标准接口让任何一个工具写一次就能被所有兼容的 Harness 调用Skill 是知识与流程层管的是这种活该怎么干——它把领域经验、操作步骤、脚本模板打包成可插拔的模块。三层各司其职又彼此嵌套Harness 调用 SkillSkill 内部可以调 MCP 工具MCP 工具最终执行真实世界的操作。拿做菜打比方Harness 是厨房的水电气和流程制度MCP 是标准的锅碗刀叉接口Skill 是菜谱。这个分工也解释了为什么 2026 年各大 Harness 都在猛扑 Skill 生态循环、权限、上下文机制是通用的不同行业、不同岗位的差异全部沉淀在 Skill 层。想给自己的 Agent 装能力可以从 DeepSkill 的作品展厅逛起里面有两百多个创作者晒出的真实作品有人开源了一套艺术家元 Skill让 Codex 一句话学会韦斯安德森的海报风格有人把 100 条动效规范打包成 Skill让前端 Agent 生成带手感的交互动画还有人把一本书转换成可长期调用的知识 Skill——每一个都附了源码和使用效果。动手写 Harness 的读者笔者的建议是在 mini-harness 的基础上按这个顺序加东西先接真实模型代码里的OpenAICompatLLM适配器填上 Key 就能用再加记忆落盘然后把工具注册表从文件三件套扩到你的真实业务——写到这一步你就拥有了一个完全可控、完全可审计的私人 Harness。工具注册表每加一个真实业务工具就值得去作品展厅看一眼有没有人已经把同类经验封装成了 Skill能省掉大量从零摸索的成本。最后照例是验收。判断一个 Harness或一个 Skill是不是真的能用别看介绍页写得多漂亮用这三个任务过一遍典型任务给它一个你每天真实在干的活看一次成功率边界任务故意制造权限不足、文件缺失、网络超时看它是报错清楚还是编造结果缺参任务模糊地下指令看它会不会先确认口径再动手。三关全过才算真的能用任何一关靠自由发挥混过去的都要降权使用。七、总结回到开头那三家公司打开引擎舱的动作。它们的潜台词其实是一致的模型能力的竞争会继续但 2026 年胜负手已经转移到了系统层——谁能把模型安全、稳定、可验证地接进真实世界谁就掌握下一代的分发入口。对普通开发者这件事反而是利好当 Codex Harness、Claude Agent SDK 都成为公共设施写一个 Agent 的门槛从训模型降到了攒 Harness。本文那不到 150 行的代码就是证明——循环、守卫、裁剪、回灌每个机制都朴素到不像前沿技术但组合起来就是一个能跑、能拦、能停的 Agent 骨架。剩下的交给 Skill 层去长出血肉。模型负责想Harness 负责让事情继续往前走。这句话值得写进 2026 年每一个 AI 工程师的备忘录。模型能力的边际收益在递减系统工程的边际收益才刚刚开始当所有人都在盯着下一个模型的发布日期时真正的机会藏在模型外面那套越来越精密的挽具里。引擎舱已经打开接下来比的就是谁装进去的东西更结实。参考文献《复杂的 Harness Evolution甚至不如多跑几遍》—— AI2 与华盛顿大学相关研究的解读《Agent 不只是模型从一次 LLM 调用到完整 Harness》—— Harness 六部件演化主线《生成式 AI 的中局范式从 Harness 到 Experience Loop》—— 腾讯新闻五层系统观《为什么中美头部 Agent不约而同走向开放》—— Codex Harness 开源托管 / WorkBuddy / Agent SDK《一篇 Agent 论文揭开了生产真相》WHALE—— 腾讯新闻权重与 Harness 交替学习《Claude 狂写 80% 代码差点干崩 AnthropicCI 半年暴涨 25 倍》—— 新智元

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价