Hugging Face · 官方博客

Harness、Scaffold 与值得厘清的 AI Agent 术语

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

二〇二六年五月二十五日 · 英文原文

Hugging Face 发布了一份AI Agent术语表,旨在厘清该领域快速演变中易混淆的核心概念。术语表定义了模型(LLM)、脚手架(scaffolding,行为定义层)、执行框架(harness,执行层)及Agent(模型+harness)等关键术语,并区分了工具、技能与子智能体。此外,还涵盖了上下文工程、策略及RL训练相关的环境、训练器、展开(rollout)与奖励等概念,为从业者提供了实用的心智模型。

](https://huggingface.co/sergiopaniego)

Image 2: Aritra Roy Gosthipaty 的头像

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

这对新手来说可能难以招架,即使是试图跟上最新发展的从业者也是如此。在 ICLR 2026 之后,我们中的一位(@ariG23498)提出了一个问题,很好地捕捉了这种困惑:

"在 agent 的语境下,你们所说的 'harness' 和 'scaffold' 是什么意思?我在 ICLR 上听到了很多解释,但我不明白为什么它们没有收敛到一个统一的解释上。"

这份术语表是我们试图为那些反复出现但缺乏清晰、一致解释的术语奠定基础。它并非旨在成为该领域所有术语的全面词典。相反,我们专注于那些经常被混淆、以不同方式重复使用,或者被默认为显而易见但实际上并非如此的术语。

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

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

让我们开始吧。

目录

模型

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

脚手架

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

像 Claude Code、Codex 和 Antigravity CLI 这样的产品将整个东西称为 harness。Claude Code 的官方文档直接说明:"Claude Code 充当 Claude 周围的 agentic harness。"这是广义的用法:harness 意味着除模型之外的一切。scaffold/harness 的区别在你需要分别推理它们时最为重要,例如在训练 pipeline 中。你也会听到 "scaffold" 被更广泛地用于涵盖 harness 所依赖的任何基础设施:hooks、运行时配置,甚至目录结构。

像 Claude Code 和 Codex 这样的产品与其提供商的模型紧密耦合。其他像 Antigravity CLI 和 Hermes Agent 则允许你插入任何模型。

执行框架

agent 内部的执行层:它调用模型,处理模型的工具调用,决定何时停止。harness 是让 agent 运行起来的东西。上面定义的 scaffolding 是模型工作的基础:它的指令、它的工具、它的格式。

Harness engineering 是设计好这一层的学科:决定 agent 何时应该停止,错误如何处理,以及哪些护栏能让它保持在正轨上。它适用于训练和推理。Addy Osmani 的文章OpenAI 关于使用 Codex 构建的叙述都从推理方面涵盖了这一点。

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

智能体

这个术语来自强化学习,其中 agent 只是一个接收观察并返回动作的函数。环境接收该动作并返回一个新的观察,循环重复。这个循环仍然是 LLM agent 工作的核心。

在 LLM 世界中,这个术语已经扩展。一个 agent 是一个模型加上它周围允许它行动的一切,而不仅仅是响应。它将原始的文本生成转变为可以在循环中行动的东西:接收信息,决定做什么,并对结果采取行动。

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

Image 3: Agent 图,显示 Harness、Scaffold 和 Model 作为 Agent 内部的组件,下方是 Sub-agent

在社区中,通常表述为 Agent = Model + Harness(参考 @Vtrivedy10Will Brown 的推文)。如果你不是模型,你就是 harness。上面两节讨论的 harness 和 scaffold 之间的细微差别造成了大部分混淆。

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

上下文工程

设计进入 agent 上下文窗口的内容:模型在每个步骤看到的内容、系统 prompt、工具描述、对话历史、检索到的知识。这不是一次性的决定:随着模型的运行,之前的轮次会塑造进入未来调用的内容,而 harness 在整个运行过程中积极管理这一点。它适用于训练和推理,但出错代价截然不同。在训练时,模型看到的内容塑造了学习的内容。搞错了就得重新训练。在推理时,它只是文本:更改 prompt 并重新部署。HF 上下文工程课程深入介绍了这一点。

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

策略

策略是 agent 遵循的行为:给定任何情况,它定义了采取每个可能动作的概率。在 LLM 系统中,部分策略是在模型权重中学习的,但行为也取决于周围的 scaffolding 和 harness。同一个模型根据其 prompts、工具、记忆和执行循环的不同,行为可能会有很大差异。策略不是 agent。策略定义行为;agent 是在环境中行动的完整系统。将检查点包裹在 scaffolding 和 harness 中并部署,你就得到了一个 agent,其行为就是策略。

工具使用

agent 如何与外部世界交互:API、代码解释器、数据库、网络搜索、文件系统。模型以结构化格式表达使用工具的意图。现代推理 API 将其作为一等对象呈现:harness 直接接收调用并将其路由到正确的函数。结果被反馈回上下文,循环继续。

技能

可重用的、结构化的知识包,能够实现多步骤任务。工具是一个动作("运行此命令"),而技能则捆绑了实现一个目标所需的一切("调查这个 bug,形成假设,编写修复方案")。它们可以在 agent 之间移植,并按需加载。工具、技能和子 agent 之间的界限在不同框架中有所不同。HF 上下文工程课程深入介绍了技能。

子智能体

由另一个 agent 调用来处理特定子任务的 agent。它有自己的模型和 scaffold,独立推理,并返回结果。调用 agent 不需要知道它在内部如何工作。这就是子 agent工具(函数调用)或技能(打包的知识)的区别:子 agent 本身可以推理、使用工具并调用进一步的子 agent。

训练

无论你是在训练还是部署,上述术语都适用。以下四个术语特定于训练,其中 agent 运行任务,获得评分,其模型权重得到更新。LLM 的每个 RL 训练系统都围绕相同的 pipeline 构建:

Image 4: RL 训练 pipeline,显示 RL Environment、Trainer 和 Reward 通过 rollout 和更新后的策略连接

RL 环境

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

我们最近发布了一份专门的指南,因此这里不再压缩,请参阅 RL 环境终极指南以获取类型、框架和示例的完整分解。

训练器

训练器是让 agent 变得更好的东西:它运行许多 agent 回合,对结果进行评分,并使用它们来更新内部模型的权重。TRL 的 GRPOTrainer 是一个具体的例子:一个处理回合生成、奖励评分和权重更新的单一类。

展开

一个 rollout 是从头到尾的一次完整 agent 运行:agent 看到了什么,做了什么,以及在每一步获得了什么奖励。根据上下文,它也被称为 trajectorytrace。这是 RL 算法学习的原始数据。

奖励

告诉训练算法模型是否在变好的分数。它可以是_可验证的_(测试通过/失败,答案匹配),或_学习的_(人类偏好,LLM-as-judge),稀疏的(在回合结束时一个分数),或_密集的_(在每一步一个分数)。训练器使用它来实际更新内部模型的权重。有关每种类型的详细分解,请参阅 Adithya 指南中的奖励架构部分。

评分细则将奖励分解为具有权重的显式维度,而不是一个单一数字。OpenEnvVerifiers 将评分细则实现为可以组合的对象(WeightedSumSequentialGate)。

了解更多

如果任何定义感觉不精确,或者你遇到了我们遗漏的术语,我们很乐意听取你的意见。

感谢 Pedro CuencaQuentin GallouédecShaun SmithAdithya S Kolavi 审阅本文。

译自 Hugging Face · 官方博客 · 录于 二〇二六年五月二十五日