简介:本文系统解析AI Agent领域核心术语,帮助你理清模型、Harness与Scaffold的定义边界与协作关系。你将了解三者各自承担的角色、为何区分如此重要、不同绑定策略的利弊,以及在实际工程中如何做出合理的技术选型判断,从而建立对Agent架构的完整认知。
当你第一次接触AI Agent(智能体)相关技术文档时,很可能会被一系列术语弄得头晕目眩:Model、Harness、Scaffold、Agent、Tool Use、Agentic Loop……它们似乎都在描述相似的东西,却又各有侧重。更令人困惑的是,不同团队、不同产品对这些术语的使用方式并不完全一致,有时甚至相互矛盾。
本文试图做一件事:把这组术语的层次关系彻底讲清楚。核心结论可以用一个公式概括:
Agent = Model + Harness
而Harness与Scaffold之间的区别,是理解整个智能体架构的关键切入点。
Model(模型)指的是大语言模型(LLM)本身——一个接收文本输入、产生文本输出的神经网络。无论是哪家厂商训练的模型,其本质能力都是一样的:根据给定的上下文,预测下一个最合理的token序列。
模型本身具有以下特征:
这意味着,单独拿出一个模型,它只能完成一问一答式的交互。它是一个静态的知识容器和推理引擎,但不是一个自主运行的系统。
Harness(直译:马具、驾驭装置)是包裹在模型外层的运行时驱动系统。它负责:
如果把模型比作一台发动机,那么Harness就是整辆汽车的传动系统、方向盘和刹车——它让发动机的动力真正转化为可控的运动。发动机本身不会决定去哪里,是Harness在决定什么时候加速、什么时候转弯、什么时候停下来。
用一句话总结:Harness是让整个系统跑起来的引擎。 它调用模型、处理工具调用、决定什么时候停下来。
Scaffold(脚手架)是模型在工作时所依据的”内容层”。它包括:
一个关键事实是:换一套脚手架,同一个模型的表现可以判若两人。
这不是夸张。同一个底层模型,在不同的指令、不同的工具集、不同的输出格式约束下,可能表现得像一个严谨的代码助手,也可能表现得像一个创意写作伙伴。脚手架塑造了模型的行为模式。
关于Scaffold的边界,业界有不同的理解:
本文倾向于采用狭义理解,以便与Harness形成清晰区分。但在实际交流中,你需要意识到对方可能使用的是广义定义。
| 维度 | Harness | Scaffold |
|---|---|---|
| 本质 | 运行时引擎 | 内容与规则 |
| 职责 | 驱动循环、执行工具、管理状态 | 定义行为、提供工具描述、约束格式 |
| 关注点 | “怎么跑” | “依据什么跑” |
| 类比 | 汽车的传动系统 | 导航地图和交通规则 |
在日常使用中,很多产品把Scaffold和Harness混在一起,统称为”Harness”——即模型之外的所有东西。这种简化在大多数场景下没有问题。
但在以下场景中,区分变得重要:
有些产品将Harness与自家模型绑定得很紧。这种策略的好处是:
代价是用户没有选择权,无法替换其他模型。
另一些产品允许用户插入任何模型。这种策略的好处是:
代价是难以做到深度优化,因为不同模型的行为差异很大。
没有绝对的优劣。紧绑定适合追求极致体验的封闭产品,松绑定适合需要灵活性的开放平台。选择哪种路线,取决于产品定位和目标用户。
综合以上分析,一个完整的Agent系统可以这样拆解:
Agent = Model + Harness + Scaffold
其中:
用一个示意性伪代码来表示:
# Scaffold:定义行为规则和工具scaffold = {"instructions": "你是一个代码助手,可以帮助用户编写和调试代码。","tools": [{"name": "read_file", "description": "读取文件内容"},{"name": "write_file", "description": "写入文件内容"},{"name": "run_command", "description": "执行命令"}],"output_format": "markdown"}# Harness:驱动循环def run_agent(user_input, model, scaffold):messages = [{"role": "system", "content": scaffold["instructions"]}]messages.append({"role": "user", "content": user_input})while True:response = model.generate(messages, tools=scaffold["tools"])if response.is_final_answer():return response.contentif response.is_tool_call():result = execute_tool(response.tool_name, response.tool_args)messages.append(response)messages.append({"role": "tool", "content": result})
模型只是Agent的一个组成部分。没有Harness的驱动和Scaffold的约束,模型只是一个被动的文本生成器。
有些开发者认为只要模型足够强,Scaffold随便写写就行。实际上,精心设计的Scaffold可以显著提升模型的表现,尤其是在复杂任务中。
Harness的循环控制逻辑直接影响Agent的效率和可靠性。什么时候继续、什么时候停止、如何处理工具调用失败——这些都需要仔细设计。
回到定义本身:
理解这三者的层次关系和各自职责,是设计和调试Agent系统的前提。希望本文能帮助你建立起清晰的认知框架,在面对各种术语时不再困惑。