Harness内心OS:大模型只管想,剩下烂摊子全我的

2026-04-16 16:58
浙江

大模型说"我要调搜索",

谁去调?

Harness去。

让不让它调?

Harness来决定。

结果太长,塞不进上下文窗口怎么办?

Harness来裁剪。

沙箱崩了怎么办?

Harness来兜底。

Harness这么有用,有哪些组件?

想了解Harness组件,

强烈建议先看开头这篇,

少瞎吹系列:AI智能体基础,infra就不基础

其实就是几个月前的叫法不同,

我列出的这些组件:

Runtime(执行环境)、

Memory(记忆)、

Gateway(网关)、

Browser Tool(浏览器工具)、

Identity(身份管理)、

Code Interpreter(代码沙箱)、

Observability(可观测性)、

Policy(策略)、

Evaluations(评估)。

这些东西都就叫Harness。

无论是to B,还是To C,

无论Agent是什么设计理念,

Harness都是脚手架,优化Agent运行。

世界上没有脱离Harness的Agent。

本质上,Agent的核心能力就一个:

大模型自己决定下一步调什么函数,

是大模型实时判断出来的,

也是大模型根据当前的上下文"想"出来的。

其余的归Harness,

都为了让"大模型自己决定调什么函数"的过程,

能跑得稳、跑得快、跑得安全。

看看有哪些误解:

误解一:Harness给大模型,

搭建了一套完整的工作环境。

正解一:可不止工作环境。

只说搭工作环境,不全面,

准确地说,它做的事情至少还有两层:

第一,管控体系,

第二,支撑系统,

误解二:Harness是一个组件;

正解二:不是一个具体的组件,

它是一个总称。

就像"汽车"不是指某一个零件,

而是指发动机 + 底盘 + 刹车等,

组装在一起。

误解三:有的大模型能调用工具,

所以大模型自己就是 Agent。

正解三:大模型负责"想",

Harness又动手又兜底。

大模型说"我要调搜索"的时候,

它只是输出了一段JSON文本。

它没有真的上网,没有真的连接搜索引擎,

没有真的拿到结果。

是Runtime解析了这段JSON;

是Gateway把请求转发给了搜索 API;

是Policy在调用前检查了权限;

是Memory把结果记录了下来。

Harness才"动了手"。

误解四:Harness搭好一次就不用动了。

正解四:是跟模型能力绑定的。

旧模型容易输出格式错误,

Harness就加了格式校验和重试。

新模型不犯这个错了,这个逻辑就废了。

Anthropic原话说得很直白:

Harness编码的假设会随着模型改进而过时。

所以,Harness不是搭完就完了,

它得跟着模型一起迭代。

误解五:Harness的难点是技术,

搞定代码就行。

正解五:最难的部分不是写代码,

是做决策。

上下文窗口快满了,

该丢哪些信息保留哪些?

工具调用失败了,

该重试还是放弃还是换一条路?

大模型反复做同一件事,

第几次该判定它陷入死循环?

这些都没有标准答案,

取决于你的业务场景、

你的用户容忍度、

你的成本预算。

代码不难死人,

但"在什么情况下做什么选择"这套策略,

是靠踩坑踩出来的,会难死人。

误解六:Harness出错了看看日志就行,

跟普通软件调试一样。

正解六:比传统软件调试复杂一个量级。

普通软件是确定性的,Agent不是。

普通软件同样的输入,

一定得到同样的输出,你能复现。

Agent给它同样的写代码再搜索,

结果可能完全不同。

而且,一个任务可能跑了200步,

中间调了5次工具,

任何一步的微小偏差,

都可能导致最终结果跑偏。

事情
用了哪些组件
把指令变成动作
Runtime + Gateway
管理大模型看到啥
Memory
调用前检查权限
Policy + Identity
调用后处理结果
Runtime
处理失败和恢复
Runtime + Policy
防止死循环
Policy + Evaluations
保存执行记录
Memory + Observability
管理凭证安全
Identity + Gateway
多Agent协作
Runtime + Gateway + Memory

本质是,Harness到底做了哪些事,

来优化Agent运行。

细数九件事。

第一件事:把大模型的"话"变成真正的"动作"

组件:Runtime + Gateway

大模型输出的只是一段字,

比如:

Harness要做的是:解析这段 JSON,

从工具注册表里找调用那段代码,

传入参数,等待返回结果,

把结果格式化成大模型能理解的文本,

再塞回大模型的下一轮输入里。

Runtime 是执行环境,

负责接收大模型输出的JSON 指令,解析它,

启动真正的执行流程。

Gateway是路由层,负责找到这个工具调用应该发给谁,

是发给搜索 API、还是发给沙箱、还是发给企业内部系统,

然后把请求转发过去,等结果返回。

第二件事:决定大模型每一轮能"看到"什么

组件:Memory

大模型的上下文窗口是有限的。

一个复杂任务跑了200步,

之前所有的对话、工具调用,

返回结果加在一起可能有几十万字,

远超上下文窗口的容量。

Harness要做的是:

决定这一轮调用大模型时,

塞进去哪些内容、丢掉哪些内容。

最近几轮的对话要保留,

很早之前的工具返回结果可以压缩成摘要,

跟当前任务无关的历史可以暂时不放进去。

这直接影响大模型的决策质量。

如果Harness塞了太多无关信息,

大模型会被干扰。

如果Harness丢了关键信息,

大模型会做出错误判断。

上下文管理是Harness对Agent质量,

影响最大的环节之一。

Memory管理所有的历史信息,

之前的对话、工具调用记录、中间结果。

第三件事:在大模型调用函数之前做检查

组件:Policy + Identity

Harness在每次工具调用之前会做一系列检查:

这个Agent有没有被授权使用这个工具?

这个操作是不是需要用户确认才能执行?

这个工具在过去一分钟内,

是不是已经被调了 50 次,需要限速?

检查通过才放行,不通过就拦截,

并把拦截原因告诉大模型,让它换个方式。

Policy是规则引擎,存储着"什么能做,

什么不能做"的规则。

比如"这个 Agent 不允许删除文件"

"调用外部 API 需要用户确认"

"每分钟最多调 10 次搜索"。

Identity 管理"谁在操作":

这个Agent以什么身份运行、

它有什么权限、它能访问哪些资源。

两者配合:Identity确认身份,

Policy根据身份查规则,决定放行还是拦截。

第四件事:在大模型拿到结果之后做处理

组件:Runtime

工具返回的原始结果可能有各种毛病。

搜索引擎返回了 10 页结果,每页几千字,

太长了,直接塞给大模型会浪费上下文窗口。

Runtime负责对工具返回的原始结果做截断,

提取关键信息,格式化。

搜索返回了10万字,

Runtime截取前 500 字。

这些处理逻辑跑在 Runtime 里。

第五件事:处理工具调用失败的情况

组件:Runtime + Policy

Harness根据错误类型选择策略。

Runtime 检测到失败(超时、崩溃、错误码),

Policy里存着对应的处理策略,

网络超时重试 3 次,

权限不足直接报错,

沙箱崩溃换新沙箱。

Runtime根据Policy的规则执行对应的恢复动作。

第六件事:防止大模型陷入死循环

组件:Policy + Evaluations

Harness根据错误类型选择对应的策略。

Policy里定义了硬限制:

最多调多少次工具、

最多用多少token、

最多跑多长时间。

Evaluations负责判断质量,

连续5次搜索都没找到有用信息,

Evaluations判定"当前策略无效",

触发Policy的终止规则。

第七件事:保存每一步的执行记录

组件:Memory + Observability

大模型每一次推理,

每一次工具调用、每一次返回结果,

Harness都写入Session日志。

这些记录有三个用途:

第一,恢复用。

进程崩了,读取日志,

从最后一步继续执行,不用从头来。

『执行到第200步失败了』,

『从第199步继续』靠这个实现的。

第二,调试用。

发现Agent的输出不对,

可以回溯日志看每一步发生了什么,

大模型在第15步做了什么判断?

第37步调了什么工具?

第52步拿到了什么结果?

是哪一步开始出的问题?

第三,计费用。

每次调用大模型用了多 token,

每次工具调用花了多长时间,

整个任务的总成本是多少。

Memory负责保存Session日志,

Observability在Memory的基础上,

做细粒度的追踪。

第八件事:管理凭证,不让大模型碰到密钥

组件:Identity + Gateway

大模型只发出"我要调数据库"这个指令,

Harness在执行时附上凭证去调,

调完之后把凭证相关的信息,

从返回结果里剥离掉。

Gateway在转发工具调用请求时,

从Identity那里拿到对应的凭证附在请求上,

大模型只跟Gateway交互,

永远碰不到Identity里的凭证。

第九件事:编排多个Agent的协作

组件:Runtime + Gateway + Memory

Harness把Manager的指令路由,

给正确的子Agent,

把子Agent的结果收集回来,

交给Manager,

管理多个Agent之间的上下文传递,

让它们不会相互间干扰。

Runtime管理Manager Agent,

和子Agent的执行循环,

谁先跑、谁后跑、谁可以并行。

Gateway负责把Manager的指令,

路由给正确的子Agent,

把子Agent的结果收回来。

Memory管理多个Agent之间的上下文传递,

但每个Agent只看到自己该看到的部分。

写到最后了,

替Harness发个声吧:

『大模型只管想,

剩下烂摊子全是我的。』

《AI产品和技术模块》

1.Kimi Agent产品很厉害,然后呢?

2.搞懂“记忆”必看|吃透Engram,坐等Deepseek新模型

3.实属踩踏了?深水炸弹Seedance掩盖Seed2.0

4.少瞎吹系列:AI智能体基础,infra就不基础

《具身智能》

1.“26年具身智能,根本做不过来”:含陶大程教授独家专访

2.漫画:大模型“强控”具身智能机器人?

《AI+医疗》

1.独家深度丨夸克健康大模型调研报告

2.离谱!熬夜三年肝损害,AI博主也靠AI学“续命”医学知识

3.为什么AI能预警心脏主动脉“血管炸弹”?

4.对话作者:全球首个开源手术视频大模型SurgMotion(第一期)

《超节点系列》

1.对抗NVLink简史?10万卡争端,英伟达NVL72超节点挑起

2.英伟达:『照抄者死』,阿里华为:AI集群狂飙『全解耦』

3.阿里华为『血战』英伟达AI超节点:悲观者正确,乐观者赚钱

4.抢在英伟达护城河合拢前,硅光的冲刺与最后窗口

5.OCP现场 l 北美AI巨头罕见共识ESUN,为利益『握手』

6.为什么有些『闪断的锅』,硅光不背?

原标题:《Harness内心OS:大模型只管想,剩下烂摊子全我的》

阅读原文

    特别声明
    本文为澎湃号作者或机构在澎湃新闻上传并发布,仅代表该作者或机构观点,不代表澎湃新闻的观点或立场,澎湃新闻仅提供信息发布平台。申请澎湃号请用电脑访问https://renzheng.thepaper.cn。