原文出处:Harness, Scaffold, and the AI Agent Terms Worth Getting Right,Hugging Face Blog。本文为中文翻译与 Markdown 排版整理。

当一个领域快速发展时,它的词汇往往比共同理解演进得更快。一些术语开始变得模糊,被复用于不同语境,或者变成某些想法的简称,而这些想法本身却从未被充分解释清楚。我们现在正在 AI Agent 领域看到这种情况:概念被混在一起,有些被重新命名,另一些则在几个月内被广泛使用,随后又悄然消失。

这会让新手感到不知所措,即使是努力跟进最新发展的从业者也会如此。ICLR 2026 之后,我们中的一位(@ariG23498)发布了一个问题,很好地概括了这种困惑:

“在 agent 的语境中,你们所说的 ‘harness’ 和 ‘scaffold’ 到底是什么意思?我在 ICLR 听到了很多解释,但始终不明白为什么它们没有收敛到同一种解释。”

这份术语表试图为那些经常出现、却缺少清晰一致解释的术语打下基础。它并不打算成为该领域每个术语的完整词典。相反,我们聚焦于那些经常被混淆、以不同方式复用,或者被默认“显而易见”但其实并非如此的概念。

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

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

开始吧。

目录

模型

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

脚手架

围绕模型、用于定义行为的层:系统提示词、工具描述、模型响应如何被解析、跨步骤记住什么内容(上下文管理)。它塑造了模型如何看待世界以及如何在其中行动,无论是在训练阶段还是推理阶段。

Claude Code、Codex 和 Antigravity CLI 这类产品会把整个东西称为 harness。Claude Code 的官方文档说得很直接:“Claude Code serves as the agentic harness around Claude.” 这是广义用法:harness 指模型之外的一切。当你需要分别推理二者时,例如在训练流水线里,scaffold 与 harness 的区分就最有意义。你也会听到 “scaffold” 被更宽泛地使用,用来覆盖 harness 所依赖的任何基础设施:hooks、运行时配置,甚至目录结构。

有些产品(如 Claude Code 和 Codex)与其提供方的模型紧密绑定。另一些产品(如 Antigravity CLI 和 Hermes Agent)则允许你接入任意模型。

Harness

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

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

在评估阶段,同样的模式会以 eval harness 的形式出现:它不是收集训练数据,而是在某个模型 checkpoint 上运行一组固定场景,并记录指标,而不是更新权重。

Agent

这个术语来自强化学习,在那里 agent 只是一个函数:接收一个 observation,并返回一个 action。环境接收该 action,返回新的 observation,然后循环重复。这个循环仍然是 LLM agent 工作方式的核心。

在 LLM 世界里,这个术语的含义已经扩展。Agent 是模型加上围绕它的一切,使它能够行动,而不仅仅是响应。它把原始文本生成变成一种可以在循环中行动的东西:接收信息,决定要做什么,并基于结果继续行动。

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

sub-agent

在社区里,人们通常会说 Agent = Model + Harness(可参考 @Vtrivedy10Will Brown 的推文)。如果你不是模型,那你就是 harness。造成最多困惑的,是 harness 和 scaffold 之间微妙的区别,而上面两节正是在解释这一点。

当人们谈论 Claude Code、Codex 或 Cursor 这类产品时,他们指的是建立在特定模型之上的特定 harness,并且二者被一起设计和优化。两个使用同一底层模型的产品,可能因为 harness 做出了不同选择而呈现完全不同的体验。把同一个 harness 里的模型替换成更好的模型,也会改变体验。模型、harness 和产品是三个不同的东西。

上下文工程

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

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

策略

策略是 agent 所遵循的行为方式:给定任何情况,它定义采取每种可能行动的概率。在 LLM 系统中,策略的一部分学习在模型权重里,但行为也依赖周围的 scaffolding 和 harness。同一个模型会因为提示词、工具、记忆和执行循环不同而表现得非常不同。

策略不是 agent。策略定义行为;agent 是在环境中行动的完整系统。把一个 checkpoint 包裹在 scaffolding 和 harness 中并部署出去,你得到的就是一个 agent,而它的行为就是策略。

工具使用

Agent 触达自身之外世界的方式:API、代码解释器、数据库、网页搜索、文件系统。模型以结构化格式表达使用某个工具的意图。现代推理 API 会把它作为一等对象暴露出来:harness 直接接收调用,并将其路由到正确的函数。结果会被反馈回上下文,然后循环继续。

技能

可复用、结构化的知识包,用于支持多步骤任务。工具 是一个动作(“运行这个命令”),而 技能 会打包完成某个目标所需的一切(“调查这个 bug,形成假设,编写修复”)。技能可以跨 agent 移植,并按需加载。工具、技能和子 agent 之间的边界会随框架而变化。HF Context Engineering Course 对技能有深入讲解。

子 Agent

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

训练

上面的术语无论在训练还是部署中都适用。下面四个术语则专属于训练阶段:agent 会执行任务、获得评分,并更新其模型权重。每个面向 LLM 的 RL 训练系统都围绕同一条流水线构建:

流程

RL 环境

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

我们最近发布了一篇专门的指南,所以这里不压缩介绍,请参阅 The Ultimate Guide to RL Environments,其中完整拆解了类型、框架和示例。

训练器

训练器负责让 agent 变得更好:它运行许多 agent episode,对结果打分,并使用这些结果更新内部模型的权重。TRL 的 GRPOTrainer 是一个具体例子:一个类同时处理 episode 生成、奖励评分和权重更新。

Rollout

Rollout 是一次从开始到结束的完整 agent 运行:agent 看到了什么、做了什么,以及每一步得到了什么奖励。根据语境,它也被称为 trajectorytrace。这是 RL 算法学习所使用的原始数据。

奖励

奖励是告诉训练算法模型是否变得更好的分数。它可以是 可验证的(测试通过/失败、答案匹配),也可以是 学习得到的(人类偏好、LLM-as-judge);可以是 稀疏的(episode 结束时给一个分数),也可以是 密集的(每一步都有一个分数)。训练器正是使用它来实际更新内部模型权重。关于每种类型的详尽拆解,请参阅 Adithya 指南中的 Reward Architecture 部分。

Rubrics 会把奖励拆解成带权重的显式维度,而不是一个单一数字。OpenEnvVerifiers 将 rubrics 实现为可以组合的对象(WeightedSumSequentialGate)。

了解更多

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

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

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐