第05章 Harness vs Agent vs Model —— 三者关系辨析

上一篇我们拆解了 Harness 的四层架构。本章我们辨析 Model、Agent、Harness 三者的精确定义——很多人混淆这些概念。

Model 是什么

一句话定义:推理引擎——输入→输出的函数,无状态、无感知、无行动。

Model = 推理函数 输入:messages 数组(对话历史) 输出:response(文本 + stop_reason)

图表 代码
graph LR
    I[输入
messages 数组
对话历史] --> M[Model
推理引擎
Claude/GPT] M --> O[输出
response
文本 + stop_reason] style I fill:#E3F2FD style M fill:#E3F2FD style O fill:#E3F2FD
graph LR
    I[输入
messages 数组
对话历史] --> M[Model
推理引擎
Claude/GPT] M --> O[输出
response
文本 + stop_reason] style I fill:#E3F2FD style M fill:#E3F2FD style O fill:#E3F2FD
graph LR
    I[输入
messages 数组
对话历史] --> M[Model
推理引擎
Claude/GPT] M --> O[输出
response
文本 + stop_reason] style I fill:#E3F2FD style M fill:#E3F2FD style O fill:#E3F2FD
graph LR
    I[输入<br/>messages 数组<br/>对话历史] --> M[Model<br/>推理引擎<br/>Claude/GPT]
    M --> O[输出<br/>response<br/>文本 + stop_reason]
    
    style I fill:#E3F2FD
    style M fill:#E3F2FD
    style O fill:#E3F2FD

Model 的特性

特性说明局限
无状态每次调用独立,不保存历史需要 Harness 管理上下文
无感知不知道环境状态需要 Harness 提供感知接口
无行动只输出文本,不执行操作需要 Harness 执行工具
泛化能力跨领域推理需要 Harness 落地特定领域
推理能力感知→推理→决策需要 Harness 执行决策

Model 不做什么

不做的事原因Harness 解决方案
不读取文件Model 没有文件系统接口Read 工具执行
不执行命令Model 没有终端接口Bash 工具执行
不保存状态Model 无状态Context 管理历史
不感知环境Model 无感知Observation 接口
不判断权限Model 不懂安全边界Permissions 强制控制

Model 的本质:Model 是一个被训练出来的神经网络——经过数十亿次梯度更新,在行动序列数据上学会了感知环境、推理目标、采取行动的决策能力。但它只是一个函数——输入文本,输出文本。要让它干活,需要 Harness。

Agent 是什么

一句话定义:决策循环——Model + 目标 + 记忆 + 循环,完整的自主行动产品。

Agent = Model + Harness Model:推理引擎(决策者) Harness:能力边界(行动环境)

图表 代码
graph LR
    subgraph Agent["Agent = Model + Harness"]
        M[Model
推理引擎
Claude/GPT] H[Harness
能力边界
工具/权限/上下文] end M -->|调用| H H -->|反馈| M Agent --> A[完整产品
感知/推理/行动] style Agent fill:#FFF3E0 style A fill:#FFF3E0
graph LR
    subgraph Agent["Agent = Model + Harness"]
        M[Model
推理引擎
Claude/GPT] H[Harness
能力边界
工具/权限/上下文] end M -->|调用| H H -->|反馈| M Agent --> A[完整产品
感知/推理/行动] style Agent fill:#FFF3E0 style A fill:#FFF3E0
graph LR
    subgraph Agent["Agent = Model + Harness"]
        M[Model
推理引擎
Claude/GPT] H[Harness
能力边界
工具/权限/上下文] end M -->|调用| H H -->|反馈| M Agent --> A[完整产品
感知/推理/行动] style Agent fill:#FFF3E0 style A fill:#FFF3E0
graph LR
    subgraph Agent["Agent = Model + Harness"]
        M[Model<br/>推理引擎<br/>Claude/GPT]
        H[Harness<br/>能力边界<br/>工具/权限/上下文]
    end
    
    M -->|调用| H
    H -->|反馈| M
    
    Agent --> A[完整产品<br/>感知/推理/行动]
    
    style Agent fill:#FFF3E0
    style A fill:#FFF3E0

Agent 的特性

特性说明来源
有状态保存对话历史、任务进展Harness Context 管理
有感知知道环境状态(git diff、文件结构)Harness Observation
有行动执行工具(Bash、Read、Write)Harness Tools
有决策自主判断下一步行动Model 推理
有边界权限控制、安全约束Harness Permissions

Agent 的完整形态

Agent = Agent Loop(持续循环)
      + Model(推理决策)
      + Tools(行动能力)
      + Context(记忆管理)
      + Permissions(安全边界)
      + Knowledge(领域知识)

Agent 的本质:Agent 是一个完整的自主行动产品——用户给它一个目标,它自己感知环境、推理步骤、执行行动、反思结果。Agent 不是被编程出来的智能,而是 Model 的推理能力 + Harness 的行动环境。

Harness 是什么

一句话定义:能力边界系统——Agent 在特定领域工作所需的一切。

Harness = Tools + Knowledge + Observation + Action + Permissions

图表 代码
graph TB
    subgraph Harness["Harness = "]
        T[Tools
工具
Bash/Read/Write] K[Knowledge
知识
Skills/CLAUDE.md] O[Observation
感知
git diff/日志] A[Action
行动接口
CLI/API/UI] P[Permissions
权限
deny→ask→allow] end Harness --> E[Agent 能力边界] style Harness fill:#E8F5E9 style E fill:#E8F5E9
graph TB
    subgraph Harness["Harness = "]
        T[Tools
工具
Bash/Read/Write] K[Knowledge
知识
Skills/CLAUDE.md] O[Observation
感知
git diff/日志] A[Action
行动接口
CLI/API/UI] P[Permissions
权限
deny→ask→allow] end Harness --> E[Agent 能力边界] style Harness fill:#E8F5E9 style E fill:#E8F5E9
graph TB
    subgraph Harness["Harness = "]
        T[Tools
工具
Bash/Read/Write] K[Knowledge
知识
Skills/CLAUDE.md] O[Observation
感知
git diff/日志] A[Action
行动接口
CLI/API/UI] P[Permissions
权限
deny→ask→allow] end Harness --> E[Agent 能力边界] style Harness fill:#E8F5E9 style E fill:#E8F5E9
graph TB
    subgraph Harness["Harness = "]
        T[Tools<br/>工具<br/>Bash/Read/Write]
        K[Knowledge<br/>知识<br/>Skills/CLAUDE.md]
        O[Observation<br/>感知<br/>git diff/日志]
        A[Action<br/>行动接口<br/>CLI/API/UI]
        P[Permissions<br/>权限<br/>deny→ask→allow]
    end
    
    Harness --> E[Agent 能力边界]
    
    style Harness fill:#E8F5E9
    style E fill:#E8F5E9

Harness 的角色

角色说明对应组件
双手执行工具操作Tools(Bash、Read、Write、Edit)
脑库提供领域知识Knowledge(Skills、CLAUDE.md)
眼睛感知环境状态Observation(git diff、日志)
双脚连接外部系统Action(CLI、API、UI)
边界强制安全约束Permissions(deny→ask→allow)

Harness 不做什么

不做的事原因Model 负责
不做决策Harness 不推理Model 判断下一步行动
不做推理Harness 不思考Model 推理目标、规划步骤
不做判断Harness 不选择Model 决定使用什么工具
不做智能Harness 不聪明Model 提供推理能力

Harness 的本质:Harness 是 Agent 的栖居世界——提供工具、知识、感知、行动接口和权限边界。同一个 Model,不同的 Harness,可以变成完全不同的 Agent。

三者关系辨析

公式关系

图表 代码
graph LR
    M[Model
推理引擎
无状态无感知] + H[Harness
能力边界
工具权限上下文] --> A[Agent
完整产品
感知推理行动] style M fill:#E3F2FD style H fill:#E8F5E9 style A fill:#FFF3E0
graph LR
    M[Model
推理引擎
无状态无感知] + H[Harness
能力边界
工具权限上下文] --> A[Agent
完整产品
感知推理行动] style M fill:#E3F2FD style H fill:#E8F5E9 style A fill:#FFF3E0
graph LR
    M[Model
推理引擎
无状态无感知] + H[Harness
能力边界
工具权限上下文] --> A[Agent
完整产品
感知推理行动] style M fill:#E3F2FD style H fill:#E8F5E9 style A fill:#FFF3E0
graph LR
    M[Model<br/>推理引擎<br/>无状态无感知] + H[Harness<br/>能力边界<br/>工具权限上下文] --> A[Agent<br/>完整产品<br/>感知推理行动]
    
    style M fill:#E3F2FD
    style H fill:#E8F5E9
    style A fill:#FFF3E0

公式解读:

  • Model:推理引擎——提供决策能力(大脑)
  • Harness:能力边界——提供行动环境(身体)
  • Agent:完整产品——Model + Harness(完整的人)

全维度对比

维度ModelHarnessAgent
本质推理函数能力边界系统完整产品
状态❌ 无状态✅ 管理状态✅ 有记忆
感知❌ 无感知✅ 提供感知接口✅ 有感知
行动❌ 无行动✅ 执行工具✅ 有行动
决策✅ 仅推理❌ 不决策✅ 有决策循环
泛化✅ 跨领域❌ 因领域而变✅ 领域特化
知识✅ 世界知识✅ 领域知识注入✅ 组合知识
权限❌ 不懂边界✅ 强制控制✅ 有安全边界

分工关系

工作Model 负责Harness 负责
感知环境理解感知结果提供感知接口
推理决策规划下一步行动不参与推理
执行工具决定调用什么工具执行工具调用
管理记忆使用上下文窗口管理历史、压缩上下文
安全控制不负责强制权限判断
知识加载判断需要什么知识按需加载 Skills

Claude Code 三者拆解

Claude Code 的组成

图表 代码
graph TB
    subgraph ClaudeCode["Claude Code Agent"]
        subgraph ModelLayer["Model 层"]
            M1[Claude 4.x
推理引擎] end subgraph HarnessLayer["Harness 层"] subgraph Loop["Loop 层"] L1[Agent Loop
observe→think→act] end subgraph Tools["工具层"] T1[Bash] T2[Read/Write/Edit] T3[Glob/Grep] T4[Browser] end subgraph Mgmt["管理层"] M2[Permissions] M3[Context 压缩] M4[任务系统] M5[子Agent派发] end subgraph Ext["扩展层"] E1[Skills] E2[MCP] E3[Hooks] end end end ModelLayer -->|调用| HarnessLayer HarnessLayer -->|执行| Env[环境
IDE/终端/文件系统]
graph TB
    subgraph ClaudeCode["Claude Code Agent"]
        subgraph ModelLayer["Model 层"]
            M1[Claude 4.x
推理引擎] end subgraph HarnessLayer["Harness 层"] subgraph Loop["Loop 层"] L1[Agent Loop
observe→think→act] end subgraph Tools["工具层"] T1[Bash] T2[Read/Write/Edit] T3[Glob/Grep] T4[Browser] end subgraph Mgmt["管理层"] M2[Permissions] M3[Context 压缩] M4[任务系统] M5[子Agent派发] end subgraph Ext["扩展层"] E1[Skills] E2[MCP] E3[Hooks] end end end ModelLayer -->|调用| HarnessLayer HarnessLayer -->|执行| Env[环境
IDE/终端/文件系统]
graph TB
    subgraph ClaudeCode["Claude Code Agent"]
        subgraph ModelLayer["Model 层"]
            M1[Claude 4.x
推理引擎] end subgraph HarnessLayer["Harness 层"] subgraph Loop["Loop 层"] L1[Agent Loop
observe→think→act] end subgraph Tools["工具层"] T1[Bash] T2[Read/Write/Edit] T3[Glob/Grep] T4[Browser] end subgraph Mgmt["管理层"] M2[Permissions] M3[Context 压缩] M4[任务系统] M5[子Agent派发] end subgraph Ext["扩展层"] E1[Skills] E2[MCP] E3[Hooks] end end end ModelLayer -->|调用| HarnessLayer HarnessLayer -->|执行| Env[环境
IDE/终端/文件系统]
graph TB
    subgraph ClaudeCode["Claude Code Agent"]
        subgraph ModelLayer["Model 层"]
            M1[Claude 4.x<br/>推理引擎]
        end
        
        subgraph HarnessLayer["Harness 层"]
            subgraph Loop["Loop 层"]
                L1[Agent Loop<br/>observe→think→act]
            end
            
            subgraph Tools["工具层"]
                T1[Bash]
                T2[Read/Write/Edit]
                T3[Glob/Grep]
                T4[Browser]
            end
            
            subgraph Mgmt["管理层"]
                M2[Permissions]
                M3[Context 压缩]
                M4[任务系统]
                M5[子Agent派发]
            end
            
            subgraph Ext["扩展层"]
                E1[Skills]
                E2[MCP]
                E3[Hooks]
            end
        end
    end
    
    ModelLayer -->|调用| HarnessLayer
    HarnessLayer -->|执行| Env[环境<br/>IDE/终端/文件系统]

Model 部分

ModelClaude Code 使用
Claude 4.x提供推理能力
特性无状态、无感知、无行动
职责感知代码库、推理步骤、决策工具调用

Harness 部分

Harness 组件Claude Code 实现
Loop 层Agent Loop(observe→think→act→feedback)
工具层Bash、Read、Write、Edit、Glob、Grep、Browser
管理层Permissions(deny→ask→allow)、Context 压缩、任务系统、子 Agent 派发
扩展层Skills 按需加载、MCP 插件集成、Hooks 扩展点

Agent 部分

Agent 特性Claude Code 实现
有状态messages 数组管理对话历史
有感知Bash 执行 git diff、Glob 查看文件结构
有行动Read 读取代码、Write 写入文件、Edit 编辑片段
有决策Model 自主判断下一步操作
有边界Permissions 强制控制危险操作

常见误解纠正

误解 1:“我在开发 Agent” 的两种含义

含义 A:训练 Model(真正开发 Agent)

  • 通过强化学习、微调、RLHF 调整权重
  • 收集任务过程数据(感知-推理-行动轨迹)
  • 这是 DeepMind、OpenAI、Anthropic 在做的事

含义 B:构建 Harness(大多数人的工作)

  • 编写工具定义、权限规则
  • 管理上下文、设计 Skills
  • 这是 Harness 工程师的工作

真相:大多数说"我在开发 Agent"的人,实际上是在构建 Harness。Model 已经被 Anthropic/OpenAI 训练好了,我们只需要为它提供 Harness(行动环境)。

误解 2:提示词链是 Agent

真相:提示词链、节点图、工作流编排——它们不是 Agent,是假 Agent。

真假 Agent真 Agent(Model + Harness)假 Agent(提示词水管工)
核心架构Model + Agent Loopif-else + 节点图
决策方式Model 自主推理硬编码路由逻辑
泛化能力✅ 跨领域泛化❌ 无法泛化
可维护性✅ 模型自动演化❌ 规则爆炸

真相:提示词水管工是 GOFAI(符号 AI)的还魂——几十年前就被学界抛弃的规则系统,喷了一层 LLM 的漆又登场了。

误解 3:Harness 负责决策

真相:Harness 不决策。Model 决策,Harness 执行。

决策负责方说明
判断需要什么工具Model推理决定调用 Bash 或 Read
执行工具调用Harness执行 Bash 命令、Read 文件
判断需要什么知识Model判断需要加载哪些 Skills
加载 SkillsHarness按需加载 Markdown 文件

实际案例:同一 Model,不同 Harness

ModelHarnessAgent 产品
Claude 4.xClaude Code(IDE + 终端)编程 Agent
Claude 4.xOpenClaw(多渠道通信)个人助手 Agent
Claude 4.x庄园 Harness(传感器 + 维护工具)庄园管理 Agent
Claude 4.x酒店 Harness(预订系统 + 客户渠道)店运营 Agent

启示:同一个 Model(Claude),不同的 Harness,可以变成完全不同的 Agent 产品。Harness 决定了 Agent 能做什么、在哪个领域工作。

本章小结

  • Model:推理引擎,无状态无感知无行动,只负责推理
  • Harness:能力边界,提供工具、知识、感知、行动、权限
  • Agent:Model + Harness,完整的自主行动产品
  • 分工:Model 决策,Harness 执行;Model 推理,Harness 提供环境
  • 误解:提示词链不是 Agent,Harness 不负责决策
  • 案例:同一 Model,不同 Harness = 不同 Agent

预告:下一篇我们开始实战——剖析 Claude Code 的 Harness 实现细节。



相关内容

如果这篇文章对你有帮助,欢迎请我喝杯咖啡 ☕
Cygnus Yang 支付宝支付宝
Cygnus Yang 微信微信