跳到正文
原文
Hugging Face:Blog(RSS)·· 2026-05-25精选AI 评分60

Hugging Face 发布 AI Agent 术语表:厘清 Harness 与 Scaffold 的区别

Harness, Scaffold, and the AI Agent Terms Worth Getting Right

AI 导读

Hugging Face 发布 AI Agent 术语表,厘清 harness、scaffold、agent 等易混概念。核心区分是:scaffold 是定义行为的层(系统提示词、工具描述、上下文管理),harness 是执行层(调用模型、处理工具调用、决定何时停止),社区常用 Agent = Model + Harness 概括。

推荐理由

原文系统区分了 harness、scaffold、agent 等易混术语,并给出训练与推理两侧的实用心智模型。

正文 · AI 翻译

当一个领域发展迅速时,其词汇的演变往往快于共识的形成。术语开始变得模糊,在不同语境中被重复使用,或者成为从未被充分解释的概念的简写。我们目前正在 AI Agents 领域看到这种情况:概念被混在一起,有些被重新命名,另一些则被广泛使用几个月后悄然消失。

这对新手来说可能令人不知所措,甚至对试图跟上最新进展的从业者也是如此。在 ICLR 2026 之后,我们中的一位(@ariG23498)发布了一个很好地捕捉到这种困惑的问题:

“在 agents 的语境中,你说的‘harness’和‘scaffold’这两个术语是什么意思?我在 ICLR 期间听到了很多解释,但我不明白为什么它们没有收敛到一个统一的解释。”

这份术语表是我们的一次尝试,旨在为那些不断出现却缺乏清晰、一致解释的术语奠定基础。它并非该领域每个术语的完整词典。相反,我们聚焦于那些经常被混淆、以不同方式被重复使用,或被想当然地认为显而易见的概念。

无论你是在构建 agent、部署 agent,还是只是使用 Claude Code、Codex 或 Hermes Agent 这类工具,这些术语大多都会出现。最后一节涵盖的是训练模型特有的概念,如果你从事这方面的工作,会更有相关性。

这些术语中有许多还没有普遍接受的定义,不同的框架对同一个词的使用方式也不同。这里的目标不是强制推行一套唯一正确的词汇,而是提供一个实用的心智模型,让讨论更容易跟上。

让我们开始吧。

目录

模型

模型就是 LLM:它接收文本输入并产生文本输出(例如 Claude、Qwen、GPT、Kimi、DeepSeek……)。就其自身而言,它在调用之间没有记忆,也没有循环。模型可以表达调用工具的意图,但需要 harness 来实际执行。它回答一个提示然后停止。把它包裹在脚手架和 harness 中,它就变成了一个 agent。

脚手架

模型周围定义行为的那一层:系统提示、工具描述、模型响应如何被解析、它在各步骤之间记住什么(上下文管理)。它塑造了模型如何看待世界并在其中行动,无论是在训练期间还是在推理时。

像 Claude Code、Codex 和 Antigravity CLI 这样的产品把整个东西称为 harness。Claude Code 的自己的文档直接这么说:“Claude Code 充当 Claude 周围的 agentic harness。”这就是广义用法:harness 意味着一切不是模型的东西。当你需要分别对它们进行推理时,scaffold/harness 的区分最为重要,比如在训练流水线中。你也会听到“scaffold”被更广泛地用来涵盖 harness 所依赖的任何基础设施:hooks、运行时配置,甚至目录结构。

有些产品如 Claude Code 和 Codex 与其提供商的模型紧密耦合。另一些如 Antigravity CLI 和 Hermes Agent 则允许你接入任何模型。

Harness

Agent 内部的执行层:它调用模型、处理模型的工具调用、决定何时停止。Harness 是让 agent 运行起来的东西。上文定义的 scaffolding 则是模型工作的依据:它的指令、它的工具、它的格式。

Harness 工程是设计好这一层的学问:决定 agent 何时应当停止、错误如何处理、以及哪些护栏能让它保持在正轨上。它同时适用于训练和推理阶段。Addy Osmani 的文章和 OpenAI 关于用 Codex 构建的叙述都从推理侧覆盖了这一点。

在评估阶段,同样的模式表现为 eval harness:它不收集训练数据,而是在某个模型检查点上运行一组固定的场景,记录指标而非更新权重。

有些框架用 orchestrator 来指代更高层的控制器,负责协调多个 agent 之间的工作。与驱动模型走完其执行循环的 harness 不同,orchestrator 把各个 agent 当作单元来管理,每个 agent 运行自己的 harness(见下文 Sub-agents)。

Agent

这个术语来自强化学习,在那里 agent 就是一个接收观测并返回动作的函数。环境接收该动作并返回新的观测,循环往复。这个循环仍然是 LLM agent 工作方式的核心。

在 LLM 领域,这个术语的含义已经扩展。Agent 是模型加上围绕它、让它能够行动而不仅仅是回应的所有东西。它把原始的文本生成变成能在循环中行动的东西:接收信息、决定做什么、并根据结果采取行动。

以一个编码 agent 为例。系统提示词、工具描述以及模型遵循的输出格式构成了 scaffolding。调用模型、处理其工具调用、决定何时停止的循环则是 harness。在训练时,harness 还会并行运行许多这样的循环,并把结果反馈回去以更新模型。

Agent diagram showing Harness, Scaffold, and Model as components inside Agent, with Sub-agent below

在社区里,通常表述为 Agent = Model + Harness(可参考 @Vtrivedy10 和 Will Brown 的推文)。如果你不是模型,那你就是 harness。harness 与 scaffold 之间造成大部分困惑的细微区别,正是上面两节所讨论的内容。

当人们谈论 Claude Code、Codex 或 Cursor 这类产品时,他们指的是构建在特定模型之上、经过共同设计和优化的特定 harness。两个使用相同底层模型的产品可能感觉完全不同,因为它们的 harness 做出了不同的选择。而把更好的模型换进同一个 harness 也会改变体验。模型、harness 和产品是三样不同的东西。

Context Engineering

设计进入 agent 上下文窗口的内容:模型在每一步看到什么,系统提示词、工具描述、对话历史、检索到的知识。这不是一次性的决定:随着模型运行,之前的轮次会塑造进入后续调用的内容,而 harness 会在整个运行过程中主动管理这一点。它同时适用于训练和推理,但做错的代价截然不同。在训练时,模型看到的内容会塑造它学到的东西。搞错了就得重新训练。在推理时,它只是文本:改个提示词重新部署即可。HF Context Engineering Course 深入讲解了这一点。

记忆是这幅图景的一部分。短期记忆是在单次运行期间留在上下文窗口中的内容:对话历史、工具结果、先前的推理。长期记忆跨会话持久存在,存储在外部并按需检索,然后在相关时重新注入上下文。

策略

策略是智能体所遵循的行为:给定任何情境,它定义采取每个可能动作的概率。在 LLM 系统中,该策略的一部分是在模型权重中学习得到的,但行为也取决于周围的脚手架和运行框架。同一个模型可能因其提示、工具、记忆和执行循环的不同而表现出截然不同的行为。

策略不是智能体。策略定义行为;智能体是在环境中行动的完整系统。将检查点包裹在脚手架和运行框架中并部署,你就得到了一个行为即策略的智能体。

工具使用

智能体如何触及自身之外:API、代码解释器、数据库、网络搜索、文件系统。模型以结构化格式表达使用工具的意图。现代推理 API 将其呈现为一等对象:运行框架直接接收调用并将其路由到正确的函数。结果被反馈回上下文,循环继续。

技能

可复用、结构化的知识包,能够支持多步骤任务。工具是一个动作(“运行这条命令”),而技能则打包了完成一个目标所需的一切(“调查这个 bug,形成假设,编写修复”)。它们可跨智能体移植,并按需加载。工具、技能和子智能体之间的界限因框架而异。HF 上下文工程课程深入介绍了技能。

子智能体

由另一个智能体调用以处理特定子任务的智能体。它有自己的模型和脚手架,独立推理,并返回结果。调用方智能体不需要知道它内部如何工作。这正是子智能体与工具(函数调用)或技能(打包的知识)的区别所在:子智能体本身可以推理、使用工具,并调用进一步的子智能体。调用方智能体有时被称为编排器。

训练

上述术语无论你是在训练还是部署都适用。以下四个是训练特有的,在训练中智能体跑完任务、获得评分,其模型权重得到更新。每个面向 LLM 的 RL 训练系统都围绕同一条流水线构建:

RL training pipeline showing RL Environment, Trainer, and Reward connected by rollout and updated policy

RL 环境

环境是任何你可以与之交互的东西:一个有状态对象,它接受一个动作作为输入,更新其内部状态,并返回一个观察。在 LLM 语境中,动作通常是工具调用。文件系统是一个简单的例子:动作 touch foo.txt 通过创建文件来更新状态,而观察可能是更新后的文件列表。定义因框架而异。

我们最近发布了一篇关于此的专门指南,所以与其在这里压缩它,不如参阅RL 环境终极指南,以获取关于类型、框架和示例的完整解析。

训练器

训练器是让智能体变得更好的关键:它运行许多智能体回合,对结果打分,并用这些结果来更新内部模型的权重。TRL 的 GRPOTrainer 就是一个具体例子:一个类就处理了回合生成、奖励打分和权重更新。

Rollout

Rollout 是一次完整的智能体运行,从开始到结束:智能体看到了什么、做了什么,以及每一步获得了什么奖励。根据上下文,它也被称为轨迹(trajectory)或追踪(trace)。这是强化学习算法所学习的原始数据。

Reward

这个分数告诉训练算法模型是否在变好。它可以是可验证的(测试通过/失败、答案匹配),也可以是学习得到的(人类偏好、LLM 作为评判者),可以是稀疏的(一个回合结束时给一个分数),也可以是密集的(每一步都给一个分数)。训练器正是用它来实际更新内部模型的权重。关于每种类型的详细拆解,请参阅 Adithya 指南中的奖励架构部分。

评分标准(Rubrics)将奖励拆解为带有权重的明确维度,而不是一个单一的数字。OpenEnv 和 Verifiers 将评分标准实现为可以组合的对象(WeightedSum、Sequential、Gate)。

Learn More

如果任何定义感觉不够精确,或者你遇到了我们遗漏的术语,欢迎告诉我们。

感谢 Pedro Cuenca、Quentin Gallouédec、Shaun Smith 和 Adithya S Kolavi 审阅本文。

来源:Hugging Face:Blog(RSS) · huggingface.co