一次搞懂Harness、Scaffold和那些让人头疼的AI Agent术语
AI Agent领域每天都在冒新词,Harness、Scaffold、Policy、Rollout,一个比一个玄乎,听的人是一头雾水。
Harness和Scaffold到底什么区别,为什么每个人解释都不一样?
这篇就帮你把这些容易混淆的概念一次性理清楚。
全文围绕Model、Scaffolding、Harness、Agent、Context Engineering、Policy、Tool Use、Skills、Sub-agents,以及训练侧的RL Environment、Trainer、Rollout、Reward,逐个拆解。
Agent = Model + Harness,而Harness和Scaffold的区别,是理解整个Agent架构的关键。
模型、脚手架与缰绳
Model(模型)就是LLM本身,吃进文本,吐出文本。
Claude、Qwen、GPT、Kimi、DeepSeek,都是模型。
模型自身没有跨调用的记忆,也没有循环执行的能力。它可以表达调用工具的意图,但要真正执行,需要一个Harness来驱动。
模型回答一个提示词就停了,把它包上Scaffolding和Harness,它才变成一个Agent。理解这一点很要紧,模型本身是静态的、无状态的,单独拿出来只能一问一答。
Scaffolding(脚手架)是围绕模型的行为定义层。系统提示词、工具描述、模型输出怎么解析、跨步骤记什么内容,都属于脚手架。它决定了模型如何看待世界、如何在其中行动。
脚手架在训练和推理阶段都在起作用。你可以把它理解成给模型配的一套行为规则:告诉它该干什么、有哪些工具可用、输出要遵循什么格式。
换个脚手架,同一个模型的表现可以判若两人。
有趣的是,Claude Code自己的文档写得很直白:"Claude Code serves as the agentic harness around Claude"。
很多产品把脚手架和Harness混在一起统称Harness,即模型之外的所有东西。
脚手架和Harness的区分,在训练流水线里需要单独分析它们时,才显得重要。
也有人把脚手架用得更宽泛,涵盖Harness依赖的任何基础设施:钩子、运行时配置,甚至目录结构。
有些产品比如Claude Code和Codex,跟自家模型绑定很紧。另一些比如Antigravity CLI和Hermes Agent,允许你插任何模型进来。绑定紧的好处是可以深度优化,灵活的好处是用户有选择权,两种路线各有利弊。
Harness是Agent内部的执行层。它调用模型,处理工具调用,决定什么时候停下来。
脚手架是模型工作所依据的内容:指令、工具、格式,Harness是让整个系统跑起来的引擎。
打个比方,脚手架是剧本和道具,Harness是导演和舞台监督,把一切串起来执行。
Harness Engineering是设计好这一层的学问:Agent什么时候该停,错误怎么处理,防护栏怎么设置。
这一层设计得好不好,直接决定Agent跑起来是靠谱还是失控。
Addy Osmani的文章和OpenAI关于用Codex构建产品的分享,都从推理侧讨论了这个问题。 https://www.oreilly.com/radar/agent-harness-engineering/ https://openai.com/index/harness-engineering/
Harness工程的核心挑战在于平衡自主性和可控性,给Agent足够的自由度完成任务,又要防止它跑偏。
评估阶段同样有Eval Harness的概念,区别在于它跑一组固定场景,记录指标,不更新权重。可以把它理解成考试模式:同样的考卷,只打分,不学习。
有些框架用Orchestrator(编排器)指代更上层的控制器,协调多个Agent之间的工作。
Harness驱动单个模型走执行循环,Orchestrator把Agent当作单元来管理,每个Agent跑自己的Harness。
Agent到底是什么
Agent(智能体)这个词来自强化学习。
在强化学习里,Agent就是一个函数:接收观察,返回动作,环境接收动作后返回新的观察,循环往复。
LLM Agent的核心仍然是这个循环。理解了这一点,后面很多概念就顺了。
在LLM的世界里,这个词的含义拓宽了。
Agent是模型加上让它能行动而非仅仅响应的所有东西。它把原始的文本生成,变成可以在循环中行动的系统:接收信息,决定做什么,对结果采取行动。
模型只会回答问题,Agent会持续工作直到任务完成。
拿编程Agent举例。系统提示词、工具描述、模型遵循的输出格式,构成脚手架。
调用模型、处理工具调用、决定何时停止的循环,是Harness。
训练时,Harness还会并行跑很多这样的循环,把结果反馈回来更新模型。
推理时,Harness只跑一条路径,执行完就结束。
下图清晰展示了Agent内部的结构关系。
社区里通常的说法是Agent = Model + Harness。如果你不是模型,你就是Harness。
Harness和Scaffold之间微妙的区分,正是多数混淆的来源。
简单判断:脚手架是信息,模型能看到;Harness是逻辑,模型看不到但驱动它运行。
人们聊Claude Code、Codex、Cursor这些产品时,说的是特定Harness搭在特定模型上,一起设计和优化的结果。
两个产品用同一个底层模型,体验可以完全不同,因为Harness做了不同的选择。
同一个Harness换一个更好的模型,体验也会变。
模型、Harness、产品,是三件不同的事。
搞混这三者,就容易在讨论中对牛弹琴。
上下文、策略与工具
Context Engineering(上下文工程)是设计Agent上下文窗口里放什么的过程:模型每一步看到什么,系统提示词、工具描述、对话历史、检索到的知识。
这不是一次性决定,模型运行过程中,前面的轮次会塑造后面调用里放什么,Harness在整个运行过程中持续管理这些内容。
上下文工程在训练和推理阶段都适用,搞错的代价差别很大。
训练时,模型看到什么决定了学到什么,搞错了得重新训练。
推理时只是文本,改个提示词重新部署就行。所以推理侧可以快速迭代,训练侧得格外谨慎。
记忆是上下文工程的一部分。
Short-term Memory(短期记忆)是单次运行中留在上下文窗口里的内容:对话历史、工具结果、之前的推理。
Long-term Memory(长期记忆)跨会话持久存在,存储在外部,按需检索,相关时注入回上下文。
短期记忆受窗口大小限制,长期记忆理论上可以无限扩展,但检索的精准度是关键挑战。
Policy(策略)是Agent遵循的行为方式。
给定任何情况,策略定义采取每个可能动作的概率。
在LLM系统里,策略的一部分学在模型权重里,行为还取决于周围的脚手架和Harness。
同一个模型配不同的提示词、工具、记忆和执行循环,行为可以大不相同。
同样的底层模型,不同产品的表现差异大,根源就在策略不同。
策略和Agent容易混为一谈。
策略定义行为,Agent是在环境中行动的完整系统。
把一个检查点包上脚手架和Harness部署出去,得到一个Agent,它的行为就是策略。
策略可以调整,Agent可以替换组件,两者各有各的变化维度。
Tool Use(工具使用)是Agent与外界交互的方式:API、代码解释器、数据库、网页搜索、文件系统。
模型以结构化格式表达使用工具的意图,现代推理API把工具调用作为一等对象呈现,Harness直接接收并路由到正确的函数,结果反馈回上下文,循环继续。
工具让Agent从只能说话变成能做事,从纸上谈兵变成动手操作。
Skill(技能)是可复用的、结构化的知识包,支持多步骤任务。
工具是一个动作,运行某条命令;技能是把完成一个目标所需的一切打包,调查某个Bug、提出假设、写修复代码。
技能可以跨Agent移植,按需加载。
工具、技能、子Agent之间的界限在不同框架里有所偏移,大体上是从简单到复杂的光谱:工具最轻,技能居中,子Agent最重。
Sub-agent(子智能体)是被另一个Agent调用来处理特定子任务的Agent。
它有自己的模型和脚手架,独立推理,返回结果。调用方不需要知道它内部怎么工作。
子Agent和工具的区别在于:工具是函数调用,技能是打包的知识,子Agent本身能推理、能用工具、能调更下层的子Agent。
调用方有时被称为Orchestrator。
子Agent的好处是模块化,坏处是通信开销和协调成本,用不用子Agent,取决于任务的复杂度是否值得。
训练侧的那些事
上面的概念在训练和部署时都适用。
接下来这四个概念是训练专用的:Agent跑任务、被打分、模型权重被更新。
所有LLM的RL训练系统都围绕同一条流水线构建。
RL Environment(强化学习环境)是你能与之交互的任何东西:一个有状态的对象,接收动作作为输入,更新内部状态,返回观察。
在LLM场景下,动作通常是工具调用。文件系统是个简单的例子:执行touch foo.txt这个动作更新了状态,观察就是更新后的文件列表。
环境可以是沙盒,也可以是真实系统,不同框架对环境的定义有所差异,但核心机制都是一样的:动作进,观察出。
Trainer(训练器)让Agent变得更好:它跑很多Agent回合,对结果打分,用打分结果更新内部模型的权重。
TRL的GRPOTrainer就是一个具体例子,单个类处理回合生成、奖励评分和权重更新。
训练器是整个RL训练循环的调度中心,把环境、策略、奖励串在一起,形成闭环。
Rollout(展开)是一次完整的Agent运行,从头到尾:Agent看到了什么、做了什么、每一步得到了什么奖励。也叫Trajectory(轨迹)或Trace(追踪),取决于上下文。这是RL算法学习的原始数据,没有Rollout,训练器就没有素材来更新权重。
一次训练通常需要成千上万个Rollout才能收敛。
Reward(奖励)是告诉训练算法模型是否在变好的分数。
可以是Verifiable(可验证)的,测试通过或失败、答案是否匹配;也可以是Learned(学习型)的,基于人类偏好或LLM当裁判。可以是Sparse(稀疏)的,一个回合结束才给一个分;也可以是Dense(密集)的,每一步都有分。
训练器用奖励来更新内部模型的权重。稀疏奖励简单但收敛慢,密集奖励信号丰富但设计成本高,两种选择各有利弊。
Rubric(评分细则)把奖励拆成多个显式维度并赋权重,不是一个总分。
OpenEnv和Verifiers把评分细则实现为可组合的对象,支持WeightedSum(加权求和)、Sequential(顺序执行)、Gate(门控)等组合方式。
评分细则的好处是灵活,可以精细地告诉模型哪个方面做得好、哪个方面需要改进,而不是只给一个笼统的分数。
把这些术语理清之后,Agent的世界就不再是一团迷雾了。
你对哪个概念的理解跟之前不一样了?
参考资料:
https://huggingface.co/blog/agent-glossary
