LLM : 当“大脑”有了“肉身”
如果把大语言模型比作一颗泡在罐子里的大脑——它能思考、能推理、能生成代码——但你让它凌晨三点去修一个挂掉的CI任务,它做不到。
不是它不够聪明,是它没有“肉身”。
Harness,就是给这颗大脑装上肉身的那套系统。
一、Harness 和 Agent:到底什么关系?
先给结论:Agent = Model + Harness。
这个公式意味着什么?模型是“大脑”,Harness是“身体、手脚和工具”。没有Harness,模型只能思考,无法行动。
更精确地说,Agent由三层构成:
| 层级 | 是什么 | 负责什么 |
|---|---|---|
| Model(模型) | 裸的大语言模型(GPT、Claude、DeepSeek等) | 推理、决策、生成 |
| Scaffold(脚手架) | 模型“看到”的一切:系统提示词、工具描述、输出格式 | 定义行为边界和身份 |
| Harness(线束) | 驱动模型运行的执行层 | 调用模型、执行工具、判断停止、处理错误 |
💡 日常讨论中,人们常把 Scaffold 和 Harness 打包统称为 Harness。重点不是咬文嚼字,而是理解:模型只是Agent的一部分。
同一个模型,被不同的Harness包起来,体验可以完全不同。反过来,同一个Harness换个更强的模型,体验也会提升。
这也是为什么黄仁勋会说:“未来的公司会把越来越多能力建在Harness上。”
二、为什么要有 Harness?——裸模型的三道坎
一个“裸模型”在生产环境里根本跑不起来。原因有三:
1. 没有记忆——操作者一关标签页,记忆全没。一个真正的工程任务跨好几天,没有任何一次LLM调用能hold住这个状态。
2. 不会反应——外部世界变了,它不知道。reviewer下午四点发了条评论、CI被搞挂了,Agent必须被事件唤醒,而不是傻等。
3. 不会自救——Agent push了一个commit,CI炸了;或者session中途过期,整条pipeline静默死亡。
解决这些问题的,全是Harness的工程活儿。
三、Harness 和 Agent Framework 的区别:别搞混了
很多人把Harness和Agent Framework混为一谈,它们是不同层面的概念:
| Agent Framework(框架) | Harness(线束) | |
|---|---|---|
| 解决什么问题 | “如何开发一个Agent” | “如何让一个Agent长期可靠地运行” |
| 类比 | 招聘手册——教你怎么创建员工 | 企业管理系统——安排任务、提供工具、监督执行、保存经验 |
| 状态 | 需要开发者组装 | 开箱即用,人类只需提供目标 |
Framework像是“工具箱”,Harness则是“操作系统”——Agent时代,大模型好比芯片,Harness就是那个操作系统。
四、Harness 到底长什么样?——三层架构拆解
一个完整的Harness通常包含三层:
第一层:执行能力层(Action Layer)——给模型“手脚”
为模型提供行动能力:文件系统操作(增删读写)、操作系统访问(执行命令)、代码解释器(运行Python/Node.js)。
⚠️ 关键陷阱:工具配置必须与Agent角色绑定——代码审查Agent只能配置只读工具,不能拥有删除权限。
第二层:上下文环境层(Context Layer)——给模型“记忆”
管理模型工作时的上下文和状态:
- KV Cache:模型推理的缓存状态
- Memory:长期存储用户偏好、历史经验
- 上下文卸载:窗口满时写入文档,供后续加载
第三层:治理编排层(Orchestration Layer)——多Agent的“指挥官”
多Agent协同时的组织问题:
- 任务如何分配?写代码的和测试的怎么协作?
- 哪些模块可以并行?
- 权限如何治理?测试Agent能不能直接改代码?
五、四种 Harness 架构:同一个任务,四种玩法
同一个LLM、同一个任务,不同架构的Harness可能让成功率相差3到5倍。
以“重构用户服务,将单体拆分为三个独立服务”为例:
| 架构类型 | 怎么玩 | 结果 |
|---|---|---|
| 循环驱动型(Loop) | Agent进入ReAct循环,边想边做,30轮后上下文爆炸 | 关键约束被淹没,直接改了接口签名,下游全挂 |
| 图执行型(Graph) | 任务拆成8个节点,每个节点保存检查点 | 第5个节点失败,从检查点恢复,无需重来 |
| 微内核型(Microkernel) | 控制平面监控token、轮次,超预算时暂停等人工审核 | 成本可控,有人把关 |
| 多Agent型(MultiAgent) | 4个专业Agent并行执行 | 总耗时不到单Agent的1/3 |
💡 目前主流Harness收敛为两大家族:
- 家族A(循环+Harness):控制流交给模型,工程做厚“壳”——代表:Claude Code、Codex CLI
- 家族B(图运行时):控制流写进代码,建模为显式图——代表:LangGraph、Microsoft Agent Framework
一个能“自己干活”的Harness长什么样?
案例1:生产环境跑了好几个月的多Agent管线
一个真实团队在Claude Code上面搭了一套Harness,已经连续运转了几个月:
- 起点:一个Slack频道每周收约30张工单,每张都需要排查并在五个仓库之一改代码
- Harness三层职责:
- Investigate(排查)——新工单出现,跨仓库收集上下文,贴结构化分析
- Fix(修)——操作者批准后开MR,回reviewer评论,盯CI,CI挂了就修
- Self-improve(自我进化)——每个关闭的case都被复盘总结
- 实际效果:能在凌晨回Slack、自己修挂掉的CI、记住reviewer的评论
案例2:WorkBuddy——基于国产模型的可用Agent产品
WorkBuddy的Harness工程重点围绕:
- Context Engineering:如何选择和组织上下文
- Harness Engineering:前馈、反馈、权限、验证、编排、可观测性
- 结果:让Agent不只是能执行任务,而是更稳定、更可控地完成任务
案例3:金融研发的Harness Engineering体系
腾讯云在金融研发中构建了三层递进的AI Coding工程体系:
- Harness层(系统层):负责控制流、约束与反馈
- 核心动作:建设反馈回路
- 目标:解决大模型“不可靠/不可控”问题
关键数据:同一个模型在不同Harness配置下,任务完成率最多可以相差27.4个百分点。不换模型,只调整外围执行框架,结果就能差出近三成。
七、怎么从零开始落地Harness?
Step 1:先搭最小可用循环
一个Harness最核心的就是一个while循环:
whilenotdone:prompt=组装提示(系统提示+工具列表+历史+当前任务)response=调用LLM(prompt)ifresponse包含工具调用:result=执行工具(response.tool_call)把result塞回上下文else:输出最终答案 done=True这就是最简Harness的核心——调用模型 → 执行工具 → 观察结果 → 继续或停止。
Step 2:逐步加厚Harness
从最简循环开始,逐步叠加:
- 会话持久化:让Agent跨会话记住东西
- 权限与审批:敏感操作需要人工确认
- 钩子(Hook):任务完成后的自动处理
- 子Agent:复杂任务分拆
- 可观测性:每一步都有日志可追溯
Step 3:用工程文档“锁住”行为
企业内部落地Harness时,通过AGENTS.md、ARCHITECTURE.md等规范文档管控编码Agent:
- AGENTS.md:Agent唯一可信行为总纲——产品目标、目录结构、完成标准
- ARCHITECTURE.md:系统架构骨架
- 效果:Agent不会随意变更技术栈,所有开发动作留有文档记录
结语:模型决定上限,Harness决定你能拿到多少
2026年,Agent工程的重心已经从“框架”转移到了“Harness(执行壳)”。
模型决定上限,Harness决定你能拿到上限的百分之多少。
大模型已经够强了,可以参与研发交付。但没有Harness,它充其量是个高级玩具;有了Harness,它才能成为研发链路中可靠的协作者。
程序员的核心价值正在迁移:从“亲手写出每一行代码”,转向“定义目标、卡住边界、掌控节奏、验收结果”。
而这套转变的前提,就是先建好Harness。
💡 动手时间
如果你心动了,建议马上做这三件事:
- 手写一个最简Agent循环——不用任何框架,就一个
while循环 + 模型API调用 - 给你的Agent加一个工具——比如读写文件、执行命令,感受“模型+工具”的威力
- 记录每一次失败——思考怎么通过Harness的“重试+校验+恢复”机制来提高成功率
Harness不是技术债,是你未来AI应用的护城河。