Harness、Scaffold 与 AI 智能体术语辨析
Harness, Scaffold, and the AI Agent Terms Worth Getting Right
本文旨在厘清 AI 智能体领域中易混淆的关键术语。文章指出,模型(如 Claude、GPT)本身是无记忆、无循环的大语言模型。其行为由“Scaffolding”(行为定义层,如系统提示、工具描述)塑造,而“Harness”(执行层)负责调用模型、处理工具调用与控制循环,是智能体运行的核心。两者结合,模型才能成为智能体。文章以 Claude Code、Codex 为例,说明同一模型搭配不同 Harness 会产生迥异体验,并提出了 Agent = Model + Harness 的常见理解框架。术语尚未统一,本文旨在提供一个实用的心智模型。
Agent圈术语混乱的文章很多,但HF这篇把harness、scaffold、context engineering的关系讲得最透,做agent开发的读完至少能少吵一半的架。
当一个领域快速演进时,其词汇的演变往往快于共识的形成。术语开始变得模糊,在不同语境中被复用,或成为某些从未被充分解释的概念的简写。我们目前正在 AI 智能体领域看到这种情况:各种概念被混为一谈,有些被重新命名,还有一些在被广泛使用几个月后又悄然消失。
这对新手来说可能令人不知所措,即便是试图跟上最新进展的从业者也是如此。ICLR 2026 之后,我们中的一位(@ariG23498)发了一个帖子,很好地捕捉到了这种困惑:
“在智能体的语境下,你说的‘harness’和‘scaffold’这两个术语是什么意思?我在 ICLR 期间听到了很多解释,但我不明白为什么它们没有收敛到一个统一的解释。”
这份术语表是我们的一次尝试,旨在为那些不断出现却缺乏清晰、一致解释的术语奠定基础。它并非该领域所有术语的完整词典。相反,我们聚焦于那些经常被混淆、以不同方式复用,或被认为理所当然实则并非如此的概念。
无论你是在构建智能体、部署智能体,还是只是在使用 Claude Code、Codex 或 Hermes Agent 这类工具,这些术语大多都会遇到。最后一节涵盖的是模型训练特有的概念,如果你从事这方面的工作,会更有相关性。
这些术语中许多尚未有普遍接受的定义,不同框架对同一个词的使用方式也各不相同。这里的目标不是强制推行一套唯一正确的词汇表,而是提供一个实用的心智模型,让讨论更容易跟上。
让我们开始吧。
目录
模型
模型就是 LLM:它接收文本输入并产生文本输出(例如 Claude、Qwen、GPT、Kimi、DeepSeek……)。单靠它自己,它在多次调用之间没有记忆,也没有循环。模型可以表达调用工具的意图,但需要一套 harness 才能真正执行。它回答一个提示词后就停止。把它包裹在脚手架和 harness 之中,它就变成了一个智能体。
脚手架
模型周围定义行为的那一层:系统提示词、工具描述、模型响应如何被解析、它在各步骤之间记住什么(上下文管理)。它塑造了模型如何看待世界并在其中行动,无论是在训练期间还是在推理时。
像 Claude Code、Codex 和 Antigravity CLI 这样的产品把整体称为 harness。Claude Code 的官方文档直接这么说:“Claude Code 充当 Claude 周围的智能体 harness。”这就是广义用法:harness 意味着一切非模型的部分。当你需要分别对它们进行推理时,脚手架与 harness 的区分最为重要,比如在训练流水线中。你也会听到“脚手架”被更宽泛地使用,涵盖 harness 所依赖的任何基础设施:钩子、运行时配置,甚至目录结构。
有些产品(如 Claude Code 和 Codex)与其提供商的模型紧密绑定。另一些产品(如 Antigravity CLI 和 Hermes Agent)则允许你接入任意模型。
Harness
智能体内部的执行层:它调用模型、处理模型的工具调用、决定何时停止。Harness 是让智能体运行起来的东西。上文定义的脚手架,则是模型工作的依据:它的指令、它的工具、它的格式。
Harness 工程就是把这层设计好的学问:决定智能体应在何时停止、错误如何处理、以及哪些护栏能让它保持在正轨上。它同时适用于训练和推理阶段。Addy Osmani 的文章和OpenAI 关于用 Codex 构建的叙述都从推理侧讨论了这一点。
在评估阶段,同样的模式表现为eval harness:它不收集训练数据,而是在某个模型检查点上运行一组固定的场景,记录指标而非更新权重。
有些框架用orchestrator来指代更高层的控制器,负责协调多个智能体之间的工作。与驱动模型走完其执行循环的 harness 不同,orchestrator 把智能体作为单元来管理,每个智能体运行各自的 harness(见下文“子智能体”)。
智能体
这个术语来自强化学习,在那里,智能体就是一个接收观测并返回动作的函数。环境接收该动作并返回新的观测,如此循环往复。这个循环仍然是 LLM 智能体运作方式的核心。
在 LLM 领域,这个术语的含义已经扩展了。智能体是一个模型,加上围绕它、让它能够行动而不仅仅是回应的所有东西。它把原始的文本生成转变为能够在循环中行动的东西:接收信息、决定做什么,并根据结果采取行动。
以一个编程智能体作为具体例子。系统提示词、工具描述以及模型遵循的输出格式构成了脚手架。调用模型、处理其工具调用并决定何时停止的循环则是 harness。在训练时,harness 还会并行运行许多这样的循环,并将结果反馈回去以更新模型。
在社区中,通常将其表述为 Agent = Model + Harness(参考 @Vtrivedy10 和 Will Brown 的推文)。如果你不是模型,那你就是 harness。harness 与 scaffold 之间造成大部分混淆的微妙区别,正是上面两节所讨论的内容。
当人们谈论 Claude Code、Codex 或 Cursor 这类产品时,他们指的是构建在特定模型之上的特定 harness,二者是一起设计、一起优化的。两个产品即使使用同一个底层模型,体验也可能完全不同,因为它们的 harness 做出了不同的选择。而把更好的模型换进同一个 harness,体验同样会改变。模型、harness 和产品是三样不同的东西。
上下文工程
设计进入智能体上下文窗口的内容:模型在每一步看到什么,系统提示词、工具描述、对话历史、检索到的知识。这不是一次性的决定:随着模型运行,之前的轮次会塑造后续调用所包含的内容,而 harness 会在整个运行过程中主动管理这一点。它同时适用于训练和推理,但做错的代价截然不同。在训练时,模型看到的内容会塑造它学到的东西。搞错了就得重新训练。在推理时,这不过是文本:改一下提示词再重新部署即可。HF 上下文工程课程对此有深入讲解。
记忆也是这幅图景的一部分。短期记忆是在单次运行期间留在上下文窗口里的内容:对话历史、工具结果、先前的推理。长期记忆则跨会话持久存在,存储在外部、按需检索,然后在相关时重新注入上下文。
策略
策略是智能体所遵循的行为方式:给定任意情境,它定义了采取每种可能动作的概率。在 LLM 系统中,策略的一部分是在模型权重中学习得到的,但行为还取决于周围的外围框架与执行框架。同一个模型可能因其提示词、工具、记忆和执行循环的不同而表现出截然不同的行为。
策略不等于智能体。策略定义行为;智能体是在环境中行动的完整系统。把一个 checkpoint 包装进外围框架和执行框架并部署,你就得到了一个智能体,其行为就是该策略。
工具使用
智能体如何触及自身之外:API、代码解释器、数据库、网络搜索、文件系统。模型以结构化格式表达使用某个工具的意图。现代推理 API 将其呈现为一等对象:执行框架直接接收该调用,并将其路由到正确的函数。结果被反馈回上下文,循环继续进行。
技能
可复用、结构化的知识包,能够支撑多步骤任务。工具是一个动作(“运行这条命令”),而技能则打包了达成某个目标所需的一切(“调查这个 bug,形成假设,编写修复方案”)。它们可跨智能体移植,并按需加载。工具、技能与子智能体之间的界限在不同框架中会有所变化。HF 上下文工程课程深入讲解了技能。
子智能体
一个由另一个智能体调用、用于处理特定子任务的智能体。它拥有自己的模型和脚手架,独立进行推理,并返回结果。调用它的智能体无需了解其内部运作方式。这正是 子智能体 与 工具(函数调用)或 技能(打包好的知识)的区别所在:子智能体本身可以推理、使用工具,并进一步调用子智能体。调用它的智能体有时被称为 编排器。
训练
上述术语无论你是在训练还是部署时都适用。以下四个术语则专门针对训练,即智能体跑完任务、获得评分、其模型权重得到更新的过程。每一个面向 LLM 的 RL 训练系统都围绕同一条流水线构建:
RL 环境
环境就是任何你可以与之交互的东西:一个有状态的对象,它接收动作作为输入,更新其内部状态,并返回一个观测结果。在 LLM 语境下,动作通常是工具调用。文件系统就是一个简单的例子:动作 touch foo.txt 通过创建文件来更新状态,而观测结果可能是更新后的文件列表。不同框架中的定义各有差异。
我们最近就此发布了一篇专门的指南,因此与其在这里压缩篇幅,不如参阅 RL 环境终极指南,获取关于类型、框架和示例的完整解析。
训练器
训练器是让智能体变得更好的关键:它运行大量智能体回合,对结果打分,并用这些结果来更新内部模型的权重。TRL 的 GRPOTrainer就是一个具体例子:单个类即可处理回合生成、奖励打分和权重更新。
Rollout
一次 rollout 就是一次完整的智能体运行,从开始到结束:智能体看到了什么、做了什么,以及在每一步获得了什么奖励。根据上下文的不同,它也被称为轨迹或追踪。这是强化学习算法用来学习的原始数据。
奖励
这个分数告诉训练算法模型是否在变好。它可以是可验证的(测试通过/失败、答案匹配),或者学习得到的(人类偏好、LLM-as-judge),稀疏的(在一个 episode 结束时给出一个分数),或者稠密的(每一步都给出一个分数)。这正是训练器用来实际更新内层模型权重的东西。关于每种类型的详尽拆解,请参阅奖励架构一节,位于Adithya的指南中。
评分量表将奖励拆解为带权重的明确维度,而非单一数值。OpenEnv和Verifiers将评分量表实现为可组合的对象(WeightedSum、Sequential、Gate)。
了解更多
- @Vtrivedy10:智能体框架的解剖:详细拆解框架各组件及其存在的原因
- 智能体框架工程:关于智能体 = 模型 + 框架的趋同论述,附编码智能体示例
- 框架工程:在智能体优先的世界中利用 Codex:完全用 Codex 智能体构建产品的真实记录,涵盖脚手架、反馈循环以及推理时的上下文管理
- 工具 Schema 渲染图谱(evalstate):工具 schema 如何在各模型中转化为提示词文本,展示应用提供商模板后每个模型实际看到的内容
- Simon Willison 的《编码智能体如何工作》博客:编码智能体如何作为框架运作
- AI Engineer 演讲《AI 中的框架:深度剖析》:什么是框架以及如何构建一个框架。
- RL 环境终极指南:逐框架对比与术语对照
- 持续改进我们的智能体框架:Cursor 如何作为产品迭代其框架。
- lm-evaluation-harness:权威评测框架
如果任何定义感觉不够精确,或者你遇到了我们遗漏的术语,欢迎告诉我们。
感谢 Pedro Cuenca、Quentin Gallouédec、Shaun Smith 和 Adithya S Kolavi 审阅本文。
来源:Hugging Face:Blog(RSS) · huggingface.co