智能体架构核心术语解析:Harness与Scaffold

作者:起个名字好难2026.11.04 12:39浏览量:0

简介:本文系统解析AI Agent领域核心术语,帮助你理清模型、Harness与Scaffold的定义边界与协作关系。你将了解三者各自承担的角色、为何区分如此重要、不同绑定策略的利弊,以及在实际工程中如何做出合理的技术选型判断,从而建立对Agent架构的完整认知。

智能体架构核心术语解析:Harness与Scaffold

一、从一个常见困惑说起

当你第一次接触AI Agent(智能体)相关技术文档时,很可能会被一系列术语弄得头晕目眩:Model、Harness、Scaffold、Agent、Tool Use、Agentic Loop……它们似乎都在描述相似的东西,却又各有侧重。更令人困惑的是,不同团队、不同产品对这些术语的使用方式并不完全一致,有时甚至相互矛盾。

本文试图做一件事:把这组术语的层次关系彻底讲清楚。核心结论可以用一个公式概括:

Agent = Model + Harness

而Harness与Scaffold之间的区别,是理解整个智能体架构的关键切入点。


二、Model:静态的文本变换器

2.1 模型是什么

Model(模型)指的是大语言模型(LLM)本身——一个接收文本输入、产生文本输出的神经网络。无论是哪家厂商训练的模型,其本质能力都是一样的:根据给定的上下文,预测下一个最合理的token序列。

2.2 模型的能力边界

模型本身具有以下特征:

  • 无状态:模型不记忆上一次调用的内容。每次推理都是一次独立的、从零开始的文本变换。
  • 无循环执行能力:模型不会自主地”再想一想”或”再试一次”。它输出一次结果,然后就停止了。
  • 可以表达意图,但无法执行:模型可以在输出中表示”我应该调用某个工具”,但它自身没有执行工具调用的能力。

这意味着,单独拿出一个模型,它只能完成一问一答式的交互。它是一个静态的知识容器和推理引擎,但不是一个自主运行的系统。


三、Harness:让系统跑起来的引擎

3.1 Harness的定义

Harness(直译:马具、驾驭装置)是包裹在模型外层的运行时驱动系统。它负责:

  • 调用模型:向模型发送提示词,接收模型输出。
  • 解析输出:判断模型的输出是最终回答,还是工具调用意图。
  • 执行工具调用:真正去调用外部工具(如搜索、代码执行、数据库查询等),并将结果返回给模型。
  • 控制循环:决定何时继续调用模型、何时停止。这就是所谓的”Agentic Loop”。
  • 管理状态:在多次模型调用之间维护上下文和中间结果。

3.2 一个直观的类比

如果把模型比作一台发动机,那么Harness就是整辆汽车的传动系统、方向盘和刹车——它让发动机的动力真正转化为可控的运动。发动机本身不会决定去哪里,是Harness在决定什么时候加速、什么时候转弯、什么时候停下来。

3.3 Harness的核心职责

用一句话总结:Harness是让整个系统跑起来的引擎。 它调用模型、处理工具调用、决定什么时候停下来。


四、Scaffold:模型工作所依据的内容

4.1 Scaffold的定义

Scaffold(脚手架)是模型在工作时所依据的”内容层”。它包括:

  • 指令(Instructions) :系统提示词、行为规则、角色设定。
  • 工具定义(Tools) :模型可以使用哪些工具,每个工具的用途和参数格式。
  • 输出格式(Format) :模型应该遵循的输出结构,如JSON Schema、Markdown格式等。
  • 行为约束:告诉模型该干什么、不该干什么、遇到什么情况该怎么处理。

4.2 脚手架如何影响模型表现

一个关键事实是:换一套脚手架,同一个模型的表现可以判若两人。

这不是夸张。同一个底层模型,在不同的指令、不同的工具集、不同的输出格式约束下,可能表现得像一个严谨的代码助手,也可能表现得像一个创意写作伙伴。脚手架塑造了模型的行为模式。

4.3 Scaffold的边界

关于Scaffold的边界,业界有不同的理解:

  • 狭义理解:Scaffold仅指指令、工具定义和输出格式。
  • 广义理解:Scaffold涵盖Harness依赖的任何基础设施,包括钩子(hooks)、运行时配置、甚至目录结构。

本文倾向于采用狭义理解,以便与Harness形成清晰区分。但在实际交流中,你需要意识到对方可能使用的是广义定义。


五、Harness与Scaffold的区别:为什么重要

5.1 核心区别

维度 Harness Scaffold
本质 运行时引擎 内容与规则
职责 驱动循环、执行工具、管理状态 定义行为、提供工具描述、约束格式
关注点 “怎么跑” “依据什么跑”
类比 汽车的传动系统 导航地图和交通规则

5.2 为什么需要区分

在日常使用中,很多产品把Scaffold和Harness混在一起,统称为”Harness”——即模型之外的所有东西。这种简化在大多数场景下没有问题。

但在以下场景中,区分变得重要:

  • 训练流水线:当你需要单独分析脚手架和Harness对模型表现的影响时。
  • 架构设计:当你需要决定哪些逻辑放在运行时引擎中,哪些放在提示词中时。
  • 问题排查:当模型表现异常时,你需要判断是Harness的循环逻辑有问题,还是Scaffold的指令不够清晰。

六、绑定策略:紧耦合与松耦合

6.1 紧绑定

有些产品将Harness与自家模型绑定得很紧。这种策略的好处是:

  • 深度优化:可以针对特定模型的行为特点,精细调整Harness的循环逻辑和Scaffold的指令设计。
  • 一致体验:用户不需要关心底层模型是什么,产品可以提供统一的交互体验。

代价是用户没有选择权,无法替换其他模型。

6.2 松绑定

另一些产品允许用户插入任何模型。这种策略的好处是:

  • 灵活性:用户可以根据成本、性能、合规等需求选择不同的模型。
  • 可替换性:当更好的模型出现时,用户可以快速切换。

代价是难以做到深度优化,因为不同模型的行为差异很大。

6.3 两种路线各有利弊

没有绝对的优劣。紧绑定适合追求极致体验的封闭产品,松绑定适合需要灵活性的开放平台。选择哪种路线,取决于产品定位和目标用户。


agent-">七、一个完整的Agent系统包含什么

综合以上分析,一个完整的Agent系统可以这样拆解:

  1. Agent = Model + Harness + Scaffold

其中:

  • Model:提供推理和生成能力。
  • Scaffold:定义模型的行为规则、可用工具和输出格式。
  • Harness:驱动整个系统运行,调用模型、执行工具、控制循环。

用一个示意性伪代码来表示:

  1. # Scaffold:定义行为规则和工具
  2. scaffold = {
  3. "instructions": "你是一个代码助手,可以帮助用户编写和调试代码。",
  4. "tools": [
  5. {"name": "read_file", "description": "读取文件内容"},
  6. {"name": "write_file", "description": "写入文件内容"},
  7. {"name": "run_command", "description": "执行命令"}
  8. ],
  9. "output_format": "markdown"
  10. }
  11. # Harness:驱动循环
  12. def run_agent(user_input, model, scaffold):
  13. messages = [{"role": "system", "content": scaffold["instructions"]}]
  14. messages.append({"role": "user", "content": user_input})
  15. while True:
  16. response = model.generate(messages, tools=scaffold["tools"])
  17. if response.is_final_answer():
  18. return response.content
  19. if response.is_tool_call():
  20. result = execute_tool(response.tool_name, response.tool_args)
  21. messages.append(response)
  22. messages.append({"role": "tool", "content": result})

八、常见误区与注意事项

8.1 误区一:把模型等同于Agent

模型只是Agent的一个组成部分。没有Harness的驱动和Scaffold的约束,模型只是一个被动的文本生成器。

8.2 误区二:认为Scaffold不重要

有些开发者认为只要模型足够强,Scaffold随便写写就行。实际上,精心设计的Scaffold可以显著提升模型的表现,尤其是在复杂任务中。

8.3 误区三:忽视Harness的循环控制

Harness的循环控制逻辑直接影响Agent的效率和可靠性。什么时候继续、什么时候停止、如何处理工具调用失败——这些都需要仔细设计。

8.4 选型建议

  • 如果你需要快速搭建一个Agent,优先选择紧绑定的产品,减少集成成本。
  • 如果你需要灵活切换模型,选择松绑定的方案,但要准备好应对不同模型的行为差异。
  • 无论哪种方案,都要重视Scaffold的设计——它是你与模型沟通的主要接口。

九、总结

回到定义本身:

  • Model是静态的、无状态的文本变换器。
  • Scaffold是模型工作所依据的内容:指令、工具、格式。
  • Harness是让整个系统跑起来的引擎:调用模型、处理工具调用、决定何时停止。
  • Agent = Model + Harness + Scaffold。

理解这三者的层次关系和各自职责,是设计和调试Agent系统的前提。希望本文能帮助你建立起清晰的认知框架,在面对各种术语时不再困惑。