最近在学 AI 相关内容,越看越乱:刚觉得搞懂了 AI agent,又冒出个 harness;还没记住 harness,agent skill、LLM 又搅在一起。几个名词来回绕,头都大了。
我查了不少资料,自己梳理了一套理解思路,整理出来分享给大家。本文会用操作系统和外包员工两个类比,一次性把这几个概念讲清楚。
前置提示:Harness 属于工程圈俗称,并不是大模型领域官方标准术语。不同团队对 Harness 的范围定义略有差别;本文采用 Agent 开发领域最通用的理解。
先放结论:四个角色,一句话分清
| 概念 | 一句话理解 | 类比 |
|---|---|---|
| LLM | 只会思考和输出文字的大脑 | CPU / 外包员工的头脑 |
| Harness | 让大脑能动手、循环执行、调用工具的运行机制 | 操作系统 + 手脚 + 任务循环 |
| Agent | 用户直接交互的完整助手,带有身份与目标 | 应用程序 / 外包员工本人 |
| Skill | 外挂能力包、操作SOP、经验模板 | App插件 / 公司内部操作手册 |
核心关系:
Agent 是对外呈现的完整助手,内部以 Harness 作为核心运行时; Harness 调用 LLM 作为大脑,加载 Skill 能力包,统一管理工具、记忆,承载任务目标。
Agent(对外整体)
└── Harness(内部骨架/运行时)
├── LLM:负责思考推理
├── Skill:可加载的任务SOP、能力模板
├── 工具:真实执行动作的接口
├── 记忆/上下文:历史对话与任务状态
└── 目标:用户下达的任务
Harness 到底是什么?用操作系统和外包员工来理解
操作系统这个比方
- LLM = CPU:擅长做推理计算,很聪明,但它本身不能打开文件、联网、发送消息。
- Harness = 操作系统 + 驱动 + 运行时:管理上下文状态、调用外部工具、驱动任务循环、处理输入输出、捕获异常。
- Agent = 应用程序:比如“自动订票助手”,对外有明确目标,能交付完整任务结果。
- Skill = 应用程序的插件/技能包:比如订票插件、天气查询插件,封装好一类任务的执行流程。
用户看到的是应用程序,也就是 Agent。CPU 和操作系统都藏在内部。操作系统既是 CPU 的能力延伸,又是应用程序的底层基础,但它既不等于 CPU,也不等于应用程序。 Harness 就是 LLM 的操作系统,也是 Agent 的骨架。
外包员工小美
假设招了一名外包员工叫小美(Agent)。
- LLM = 小美的头脑:负责思考、判断、构思方案。但她被关在没有电脑、手机的房间里,只能空想,无法落地操作。
- Harness = 小美的神经系统 + 手脚 + 工作循环:把脑子里的想法转化成实际动作,拿到外部结果后再反馈给大脑,循环往复直到任务完成。同时还会校验输出、捕获错误,防止跑偏。
- Skill = 公司给她的内部经验手册:比如《高铁订票SOP》,帮她少走弯路,更快找到解决方案。
- Agent = 小美本人:用户直接对接她、下发任务,最终由她交付结果。
四个角色怎么配合?看一遍订票流程
下面用「帮我订明天去广州的高铁」这个任务,走一遍完整流程。
关键点:
- LLM 只负责思考、输出决策,在⑥、⑫、⑯这些节点参与;
- Harness 包揽其余所有脏活累活:拼接上下文、调用LLM、校验输出、解析指令、调用工具、读写记忆、循环调度、异常捕获;
- Skill 在第④步加载,提供标准化步骤与模板,减少试错;
- Agent 是对外的完整载体,用户只和 Agent 交互。
为什么非得有 Harness?
原生 LLM 本身有不少局限,需要 Harness 补齐能力:
-
它只会输出文字,无法直接操作外部世界 需要 Harness 帮它调用工具、读取文件、执行代码、访问接口。
-
复杂任务需要多步迭代,LLM 不会自主循环 需要 Harness 维持主循环:思考一步 → 执行一步 → 观察结果 → 继续思考,直到任务结束。
-
LLM 容易遗忘上下文、输出乱码、产生幻觉 需要 Harness 管理记忆、校验输出格式、失败重试,约束模型行为。
-
LLM 有可能产生危险指令 需要 Harness 做权限管控、沙箱隔离、操作日志记录,降低风险。
-
模型评测需要稳定、可复现的环境 Harness 可以充当自动化考场,标准化输入输出,完成批量评测。
一句话总结:没有 Harness,LLM 只是一个“会说话的盒子”;有了 Harness,它才能感知环境、动手执行、迭代试错,同时被安全管控、自动化评测。
Harness 平时长什么样?
Harness 的本质一般是代码,但它不是单一脚本,而是代码 + 配置 + 运行时环境组合层。常见形态:
-
一段程序代码 比如 Python、TypeScript 编写的主循环。最小版本的 Harness,就是一个
while循环:调用 LLM → 判断是否调用工具 → 执行工具 → 将结果回传 → 再次调用 LLM。 -
框架或库 像 LangChain、LangGraph、LlamaIndex、AutoGen、OpenHands 中的 agent executor。开发者编写业务逻辑,框架提供现成的 Harness 调度机制。
-
CLI 工具或应用 例如 Claude Code、Codex CLI、Aider。产品面向用户,但内部自带 agent harness:读取项目文件、执行终端命令、修改代码、读取报错信息,持续循环调试。
-
服务端/中间件 企业场景下,Harness 会封装成独立服务,统一管理模型调用、权限、日志、工具接入。前端业务系统通过这个服务来使用AI能力。
-
评测脚本/测试框架 典型例子 lm-evaluation-harness,Python 包形式,自动批量出题、收集模型回答、自动打分。
-
安全沙箱/容器 安全方向的 Harness,不一定包含业务逻辑,而是 Docker、虚拟机、网络策略、权限限制。它不干预AI思考内容,只限制AI能够访问和操作的资源。
总结:Harness 常以框架、运行时、胶水层、调度器的代码形态存在,可以打包成库、CLI、后端服务或者测试脚本。
几个容易混淆的点
Harness 等于 Agent 吗?
看完前面介绍,很多人会疑惑:Harness 好像干了大部分活,那它就是 Agent? 干活的内部引擎 ≠ 对外完整实体。
- Agent:用户感知到的整体,有身份、任务目标、交互界面。
- Harness:Agent 内部的操作系统、骨架、胶水调度代码。
- LLM:Agent 内部的思考大脑。
同一个 Harness,可以支撑多种 Agent:订票Agent、编程Agent、客服Agent。 Harness 是引擎,Agent 是整辆车。
Skill 等于 Harness 吗?
继续用外包小美举例:公司给小美一本《高铁订票SOP》,这就是 Skill。Skill 本身不会运行任务循环,也不能主动调用 LLM;但它可以引导小美少走弯路,更快找到解决办法。
没有 SOP,小美可能挨个试航班、大巴、高铁;加载 SOP 之后,她直接按「优先查高铁 → 对比时间 → 选座 → 支付」的流程执行。Skill 相当于经验手册,用来加速任务求解。
但是真正执行步骤、循环调用模型的主体,依旧是 Harness。
- Harness = 运行时 / 引擎 / 骨架:负责循环调度、调用LLM、调用工具、维护全局状态。
- Skill = 能力包 / 操作手册 / 模板:定义这类任务该怎么做,附带脚本、提示词模板、资源。
一句话区分:Harness 管“怎么跑”,Skill 管“会什么”。 Skill 可以被 Harness 加载执行,但 Skill 自身没有主循环,不会主动调用 LLM,也不管理全局任务状态。
一张图收尾:四者关系全景
最后总结
- LLM:擅长思考、输出文字,但没有手脚,无法直接操作外部世界。
- Harness:给 LLM 装上手脚、记忆、任务循环与安全规则,是 Agent 的底层运行骨架。
- Skill:为 Agent 提供标准化经验、SOP,减少模型试错。
- Agent:LLM + Harness + Skill + 工具 + 记忆 + 目标,能够独立完成任务的完整助手。
Harness 既不是 LLM,也不等于 Agent。 它是把单纯会聊天的 LLM,变成能自主干活的 Agent 的中间核心机制。 就像操作系统管理电脑各类资源,但操作系统本身并不等于你打开的应用程序。
记忆口诀:LLM负责想,Harness负责跑;Skill是技能手册,Agent是交付给用户的完整助手。