第17章 Harness 是 Agent 的操作系统 —— 一个深刻的类比
目录
上一篇我们了解了 Agent 的完整生命周期。本章我们用一个类比深化理解——Harness 就是 Agent 的操作系统。
为什么这个类比很重要
一句话定义:Harness 为 Agent 提供运行环境,就像 OS 为程序提供运行环境。
Harness = Agent 的操作系统 定位:理解 Harness 核心作用的最佳类比
图表
代码
graph LR
subgraph OS类比
App[应用程序] -->|运行在| OS[操作系统]
OS -->|管理| Hardware[硬件资源]
end
subgraph Harness类比
Agent[Agent] -->|运行在| Harness[Harness]
Harness -->|管理| Tools[工具/MCP/Skills]
end
OS类比 -.->|类比| Harness类比graph LR
subgraph OS类比
App[应用程序] -->|运行在| OS[操作系统]
OS -->|管理| Hardware[硬件资源]
end
subgraph Harness类比
Agent[Agent] -->|运行在| Harness[Harness]
Harness -->|管理| Tools[工具/MCP/Skills]
end
OS类比 -.->|类比| Harness类比graph LR
subgraph OS类比
App[应用程序] -->|运行在| OS[操作系统]
OS -->|管理| Hardware[硬件资源]
end
subgraph Harness类比
Agent[Agent] -->|运行在| Harness[Harness]
Harness -->|管理| Tools[工具/MCP/Skills]
end
OS类比 -.->|类比| Harness类比graph LR
subgraph OS类比
App[应用程序] -->|运行在| OS[操作系统]
OS -->|管理| Hardware[硬件资源]
end
subgraph Harness类比
Agent[Agent] -->|运行在| Harness[Harness]
Harness -->|管理| Tools[工具/MCP/Skills]
end
OS类比 -.->|类比| Harness类比类比价值:
- 易于理解:用熟悉的 OS 概念解释抽象的 Harness
- 准确映射:每个 OS 组件都有 Harness 对应
- 指导设计:借鉴 OS 设计思想设计 Harness
OS 与 Harness 的组件对应
核心组件对比
| OS 组件 | OS 功能 | Harness 对应 | Harness 功能 |
|---|---|---|---|
| 内核 | 资源管理、进程调度 | Agent Loop | 循环调度、状态管理 |
| 文件系统 | 文件存储与管理 | 工具层(Read/Write/Edit) | 文件操作工具 |
| 设备驱动 | 外设访问接口 | MCP 服务器 | 外部系统连接 |
| 权限管理 | 用户权限控制 | 权限系统 | 操作审批边界 |
| 内存管理 | 内存分配回收 | 上下文管理 | messages 数组管理 |
| 进程调度 | 多进程并发 | 多 Agent 协作 | 主/子 Agent 协作 |
| 系统调用 | 用户态→内核态接口 | 工具调用 | Agent→工具接口 |
| 环境变量 | 运行环境配置 | CLAUDE.md | 项目约定配置 |
图表
代码
graph TB
subgraph OS["操作系统"]
Kernel[内核
进程调度]
FileSystem[文件系统
文件管理]
DeviceDriver[设备驱动
外设访问]
Permission[权限管理
用户控制]
Memory[内存管理
分配回收]
Process[进程调度
并发管理]
SysCall[系统调用
用户态接口]
EnvVar[环境变量
运行配置]
end
subgraph Harness["Harness"]
AgentLoop[Agent Loop
循环调度]
FileTools[Read/Write/Edit
文件操作]
MCP[MCP 服务器
外部连接]
PermSystem[权限系统
审批边界]
Context[上下文管理
messages 管理]
MultiAgent[多 Agent
主/子协作]
ToolCall[工具调用
调用接口]
CLAUDEmd[CLAUDE.md
项目约定]
end
Kernel -.->|对应| AgentLoop
FileSystem -.->|对应| FileTools
DeviceDriver -.->|对应| MCP
Permission -.->|对应| PermSystem
Memory -.->|对应| Context
Process -.->|对应| MultiAgent
SysCall -.->|对应| ToolCall
EnvVar -.->|对应| CLAUDEmd
style OS fill:#E0E0FF
style Harness fill:#FFE0E0graph TB
subgraph OS["操作系统"]
Kernel[内核
进程调度]
FileSystem[文件系统
文件管理]
DeviceDriver[设备驱动
外设访问]
Permission[权限管理
用户控制]
Memory[内存管理
分配回收]
Process[进程调度
并发管理]
SysCall[系统调用
用户态接口]
EnvVar[环境变量
运行配置]
end
subgraph Harness["Harness"]
AgentLoop[Agent Loop
循环调度]
FileTools[Read/Write/Edit
文件操作]
MCP[MCP 服务器
外部连接]
PermSystem[权限系统
审批边界]
Context[上下文管理
messages 管理]
MultiAgent[多 Agent
主/子协作]
ToolCall[工具调用
调用接口]
CLAUDEmd[CLAUDE.md
项目约定]
end
Kernel -.->|对应| AgentLoop
FileSystem -.->|对应| FileTools
DeviceDriver -.->|对应| MCP
Permission -.->|对应| PermSystem
Memory -.->|对应| Context
Process -.->|对应| MultiAgent
SysCall -.->|对应| ToolCall
EnvVar -.->|对应| CLAUDEmd
style OS fill:#E0E0FF
style Harness fill:#FFE0E0graph TB
subgraph OS["操作系统"]
Kernel[内核
进程调度]
FileSystem[文件系统
文件管理]
DeviceDriver[设备驱动
外设访问]
Permission[权限管理
用户控制]
Memory[内存管理
分配回收]
Process[进程调度
并发管理]
SysCall[系统调用
用户态接口]
EnvVar[环境变量
运行配置]
end
subgraph Harness["Harness"]
AgentLoop[Agent Loop
循环调度]
FileTools[Read/Write/Edit
文件操作]
MCP[MCP 服务器
外部连接]
PermSystem[权限系统
审批边界]
Context[上下文管理
messages 管理]
MultiAgent[多 Agent
主/子协作]
ToolCall[工具调用
调用接口]
CLAUDEmd[CLAUDE.md
项目约定]
end
Kernel -.->|对应| AgentLoop
FileSystem -.->|对应| FileTools
DeviceDriver -.->|对应| MCP
Permission -.->|对应| PermSystem
Memory -.->|对应| Context
Process -.->|对应| MultiAgent
SysCall -.->|对应| ToolCall
EnvVar -.->|对应| CLAUDEmd
style OS fill:#E0E0FF
style Harness fill:#FFE0E0graph TB
subgraph OS["操作系统"]
Kernel[内核<br/>进程调度]
FileSystem[文件系统<br/>文件管理]
DeviceDriver[设备驱动<br/>外设访问]
Permission[权限管理<br/>用户控制]
Memory[内存管理<br/>分配回收]
Process[进程调度<br/>并发管理]
SysCall[系统调用<br/>用户态接口]
EnvVar[环境变量<br/>运行配置]
end
subgraph Harness["Harness"]
AgentLoop[Agent Loop<br/>循环调度]
FileTools[Read/Write/Edit<br/>文件操作]
MCP[MCP 服务器<br/>外部连接]
PermSystem[权限系统<br/>审批边界]
Context[上下文管理<br/>messages 管理]
MultiAgent[多 Agent<br/>主/子协作]
ToolCall[工具调用<br/>调用接口]
CLAUDEmd[CLAUDE.md<br/>项目约定]
end
Kernel -.->|对应| AgentLoop
FileSystem -.->|对应| FileTools
DeviceDriver -.->|对应| MCP
Permission -.->|对应| PermSystem
Memory -.->|对应| Context
Process -.->|对应| MultiAgent
SysCall -.->|对应| ToolCall
EnvVar -.->|对应| CLAUDEmd
style OS fill:#E0E0FF
style Harness fill:#FFE0E0详细类比:逐层剖析
1. 内核 ↔ Agent Loop
OS 内核:
- 进程调度(时间片轮转)
- 资源管理(CPU、内存、I/O)
- 中断处理(硬件中断、软中断)
- 系统调用入口
Harness Agent Loop:
- 循环调度(observe→think→act→feedback)
- 状态管理(messages 数组、任务系统)
- 工具调用处理(tool_use 事件)
- Model API 入口
图表
代码
graph LR
subgraph OSKernel["OS 内核"]
K1[进程调度
时间片轮转]
K2[资源管理
CPU/内存/IO]
K3[中断处理
硬件/软中断]
K4[系统调用
syscall入口]
end
subgraph AgentLoop["Agent Loop"]
L1[循环调度
observe→think→act]
L2[状态管理
messages/tasks]
L3[工具处理
tool_use事件]
L4[Model入口
API调用]
end
OSKernel -.->|类比| AgentLoopgraph LR
subgraph OSKernel["OS 内核"]
K1[进程调度
时间片轮转]
K2[资源管理
CPU/内存/IO]
K3[中断处理
硬件/软中断]
K4[系统调用
syscall入口]
end
subgraph AgentLoop["Agent Loop"]
L1[循环调度
observe→think→act]
L2[状态管理
messages/tasks]
L3[工具处理
tool_use事件]
L4[Model入口
API调用]
end
OSKernel -.->|类比| AgentLoopgraph LR
subgraph OSKernel["OS 内核"]
K1[进程调度
时间片轮转]
K2[资源管理
CPU/内存/IO]
K3[中断处理
硬件/软中断]
K4[系统调用
syscall入口]
end
subgraph AgentLoop["Agent Loop"]
L1[循环调度
observe→think→act]
L2[状态管理
messages/tasks]
L3[工具处理
tool_use事件]
L4[Model入口
API调用]
end
OSKernel -.->|类比| AgentLoopgraph LR
subgraph OSKernel["OS 内核"]
K1[进程调度<br/>时间片轮转]
K2[资源管理<br/>CPU/内存/IO]
K3[中断处理<br/>硬件/软中断]
K4[系统调用<br/>syscall入口]
end
subgraph AgentLoop["Agent Loop"]
L1[循环调度<br/>observe→think→act]
L2[状态管理<br/>messages/tasks]
L3[工具处理<br/>tool_use事件]
L4[Model入口<br/>API调用]
end
OSKernel -.->|类比| AgentLoop类比要点:
- 调度中心:内核调度进程,Agent Loop 调度工具
- 状态管理:内核管理进程状态,Agent Loop 管理 messages
- 事件响应:内核响应中断,Agent Loop 响应 tool_use
2. 文件系统 ↔ 工具层
OS 文件系统:
- 文件读写(open、read、write、close)
- 目录管理(mkdir、rmdir、list)
- 权限控制(chmod、chown)
- 文件锁定(lock、unlock)
Harness 工具层:
- Read/Write/Edit(文件读写编辑)
- Glob/Grep(文件搜索)
- Bash(命令执行)
- 权限检查(deny/ask/allow)
图表
代码
graph TB
subgraph FileSystem["文件系统"]
F1[open/read/write
文件读写]
F2[mkdir/rmdir
目录管理]
F3[chmod/chown
权限控制]
F4[lock/unlock
文件锁定]
end
subgraph ToolLayer["工具层"]
T1[Read/Write/Edit
文件操作]
T2[Glob/Grep
文件搜索]
T3[Bash
命令执行]
T4[Permissions
权限检查]
end
FileSystem -.->|类比| ToolLayergraph TB
subgraph FileSystem["文件系统"]
F1[open/read/write
文件读写]
F2[mkdir/rmdir
目录管理]
F3[chmod/chown
权限控制]
F4[lock/unlock
文件锁定]
end
subgraph ToolLayer["工具层"]
T1[Read/Write/Edit
文件操作]
T2[Glob/Grep
文件搜索]
T3[Bash
命令执行]
T4[Permissions
权限检查]
end
FileSystem -.->|类比| ToolLayergraph TB
subgraph FileSystem["文件系统"]
F1[open/read/write
文件读写]
F2[mkdir/rmdir
目录管理]
F3[chmod/chown
权限控制]
F4[lock/unlock
文件锁定]
end
subgraph ToolLayer["工具层"]
T1[Read/Write/Edit
文件操作]
T2[Glob/Grep
文件搜索]
T3[Bash
命令执行]
T4[Permissions
权限检查]
end
FileSystem -.->|类比| ToolLayergraph TB
subgraph FileSystem["文件系统"]
F1[open/read/write<br/>文件读写]
F2[mkdir/rmdir<br/>目录管理]
F3[chmod/chown<br/>权限控制]
F4[lock/unlock<br/>文件锁定]
end
subgraph ToolLayer["工具层"]
T1[Read/Write/Edit<br/>文件操作]
T2[Glob/Grep<br/>文件搜索]
T3[Bash<br/>命令执行]
T4[Permissions<br/>权限检查]
end
FileSystem -.->|类比| ToolLayer类比要点:
- 存储操作:文件系统管理磁盘,工具层管理代码库
- 抽象接口:文件系统抽象磁盘,工具层抽象操作系统
- 权限控制:文件系统有文件权限,工具层有操作权限
3. 设备驱动 ↔ MCP 服务器
OS 设备驱动:
- 硬件抽象(显卡、网卡、声卡)
- 标准接口(统一设备接口)
- 动态加载(按需加载驱动)
- 厂商定制(厂商提供驱动)
Harness MCP 服务器:
- 外部系统抽象(数据库、云服务、企业 API)
- 标准协议(统一的 MCP 协议)
- 动态注册(按需连接 MCP)
- 第三方定制(开源/企业 MCP)
图表
代码
graph TB
subgraph DeviceDriver["设备驱动"]
D1[硬件抽象
显卡/网卡/声卡]
D2[标准接口
统一设备API]
D3[动态加载
按需加载驱动]
D4[厂商定制
厂商提供驱动]
end
subgraph MCPServer["MCP 服务器"]
M1[系统抽象
数据库/云服务/API]
M2[标准协议
MCP协议]
M3[动态注册
按需连接]
M4[第三方定制
开源/企业MCP]
end
DeviceDriver -.->|类比| MCPServergraph TB
subgraph DeviceDriver["设备驱动"]
D1[硬件抽象
显卡/网卡/声卡]
D2[标准接口
统一设备API]
D3[动态加载
按需加载驱动]
D4[厂商定制
厂商提供驱动]
end
subgraph MCPServer["MCP 服务器"]
M1[系统抽象
数据库/云服务/API]
M2[标准协议
MCP协议]
M3[动态注册
按需连接]
M4[第三方定制
开源/企业MCP]
end
DeviceDriver -.->|类比| MCPServergraph TB
subgraph DeviceDriver["设备驱动"]
D1[硬件抽象
显卡/网卡/声卡]
D2[标准接口
统一设备API]
D3[动态加载
按需加载驱动]
D4[厂商定制
厂商提供驱动]
end
subgraph MCPServer["MCP 服务器"]
M1[系统抽象
数据库/云服务/API]
M2[标准协议
MCP协议]
M3[动态注册
按需连接]
M4[第三方定制
开源/企业MCP]
end
DeviceDriver -.->|类比| MCPServergraph TB
subgraph DeviceDriver["设备驱动"]
D1[硬件抽象<br/>显卡/网卡/声卡]
D2[标准接口<br/>统一设备API]
D3[动态加载<br/>按需加载驱动]
D4[厂商定制<br/>厂商提供驱动]
end
subgraph MCPServer["MCP 服务器"]
M1[系统抽象<br/>数据库/云服务/API]
M2[标准协议<br/>MCP协议]
M3[动态注册<br/>按需连接]
M4[第三方定制<br/>开源/企业MCP]
end
DeviceDriver -.->|类比| MCPServer类比要点:
- 扩展能力:驱动扩展硬件,MCP 扩展外部系统
- 标准接口:驱动统一设备接口,MCP 统一工具协议
- 生态丰富:驱动由厂商提供,MCP 由开源/企业提供
4. 权限管理 ↔ 权限系统
OS 权限管理:
- 用户权限(root、user、guest)
- 文件权限(r、w、x)
- 操作审批(sudo 密码)
- 权限继承(进程继承用户权限)
Harness 权限系统:
- 操作权限(deny、ask、allow)
- 工具权限(Read、Write、Bash)
- 操作审批(ask 用户确认)
- 权限继承(子 Agent 继承权限)
图表
代码
graph TB
subgraph OSPermission["OS 权限管理"]
P1[用户权限
root/user/guest]
P2[文件权限
r/w/x]
P3[操作审批
sudo密码]
P4[权限继承
进程继承权限]
end
subgraph HarnessPerm["Harness 权限系统"]
H1[操作权限
deny/ask/allow]
H2[工具权限
Read/Write/Bash]
H3[操作审批
用户确认]
H4[权限继承
子Agent继承]
end
OSPermission -.->|类比| HarnessPermgraph TB
subgraph OSPermission["OS 权限管理"]
P1[用户权限
root/user/guest]
P2[文件权限
r/w/x]
P3[操作审批
sudo密码]
P4[权限继承
进程继承权限]
end
subgraph HarnessPerm["Harness 权限系统"]
H1[操作权限
deny/ask/allow]
H2[工具权限
Read/Write/Bash]
H3[操作审批
用户确认]
H4[权限继承
子Agent继承]
end
OSPermission -.->|类比| HarnessPermgraph TB
subgraph OSPermission["OS 权限管理"]
P1[用户权限
root/user/guest]
P2[文件权限
r/w/x]
P3[操作审批
sudo密码]
P4[权限继承
进程继承权限]
end
subgraph HarnessPerm["Harness 权限系统"]
H1[操作权限
deny/ask/allow]
H2[工具权限
Read/Write/Bash]
H3[操作审批
用户确认]
H4[权限继承
子Agent继承]
end
OSPermission -.->|类比| HarnessPermgraph TB
subgraph OSPermission["OS 权限管理"]
P1[用户权限<br/>root/user/guest]
P2[文件权限<br/>r/w/x]
P3[操作审批<br/>sudo密码]
P4[权限继承<br/>进程继承权限]
end
subgraph HarnessPerm["Harness 权限系统"]
H1[操作权限<br/>deny/ask/allow]
H2[工具权限<br/>Read/Write/Bash]
H3[操作审批<br/>用户确认]
H4[权限继承<br/>子Agent继承]
end
OSPermission -.->|类比| HarnessPerm类比要点:
- 安全边界:OS 保护系统,Harness 保护用户环境
- 分级控制:OS 有用户分级,Harness 有操作分级
- 审批机制:OS 有 sudo,Harness 有 ask
5. 内存管理 ↔ 上下文管理
OS 内存管理:
- 内存分配(malloc、free)
- 虚拟内存(页表、换页)
- 内存压缩(swap、压缩内存)
- 进程隔离(每个进程独立内存)
Harness 上下文管理:
- messages 分配(追加消息)
- 上下文窗口(200K tokens)
- 上下文压缩(四层压缩)
- Agent 隔离(子 Agent 独立上下文)
图表
代码
graph TB
subgraph MemoryMgmt["OS 内存管理"]
M1[内存分配
malloc/free]
M2[虚拟内存
页表/换页]
M3[内存压缩
swap/压缩]
M4[进程隔离
独立内存空间]
end
subgraph ContextMgmt["Harness 上下文管理"]
C1[messages分配
追加消息]
C2[上下文窗口
200K tokens]
C3[上下文压缩
四层压缩]
C4[Agent隔离
独立上下文]
end
MemoryMgmt -.->|类比| ContextMgmtgraph TB
subgraph MemoryMgmt["OS 内存管理"]
M1[内存分配
malloc/free]
M2[虚拟内存
页表/换页]
M3[内存压缩
swap/压缩]
M4[进程隔离
独立内存空间]
end
subgraph ContextMgmt["Harness 上下文管理"]
C1[messages分配
追加消息]
C2[上下文窗口
200K tokens]
C3[上下文压缩
四层压缩]
C4[Agent隔离
独立上下文]
end
MemoryMgmt -.->|类比| ContextMgmtgraph TB
subgraph MemoryMgmt["OS 内存管理"]
M1[内存分配
malloc/free]
M2[虚拟内存
页表/换页]
M3[内存压缩
swap/压缩]
M4[进程隔离
独立内存空间]
end
subgraph ContextMgmt["Harness 上下文管理"]
C1[messages分配
追加消息]
C2[上下文窗口
200K tokens]
C3[上下文压缩
四层压缩]
C4[Agent隔离
独立上下文]
end
MemoryMgmt -.->|类比| ContextMgmtgraph TB
subgraph MemoryMgmt["OS 内存管理"]
M1[内存分配<br/>malloc/free]
M2[虚拟内存<br/>页表/换页]
M3[内存压缩<br/>swap/压缩]
M4[进程隔离<br/>独立内存空间]
end
subgraph ContextMgmt["Harness 上下文管理"]
C1[messages分配<br/>追加消息]
C2[上下文窗口<br/>200K tokens]
C3[上下文压缩<br/>四层压缩]
C4[Agent隔离<br/>独立上下文]
end
MemoryMgmt -.->|类比| ContextMgmt类比要点:
- 资源限制:内存有上限,上下文窗口有上限
- 压缩机制:内存可 swap,上下文可压缩
- 隔离保护:进程内存隔离,Agent 上下文隔离
6. 进程调度 ↔ 多 Agent 协作
OS 进程调度:
- 多进程并发(时间片轮转)
- 进程通信(管道、共享内存、消息队列)
- 父子进程(fork、exec)
- 进程状态(运行、阻塞、结束)
Harness 多 Agent 协作:
- 多 Agent 并发(主/子 Agent)
- Agent 通信(Agent 工具、消息传递)
- 主子 Agent(派发子 Agent)
- Agent 状态(初始化、循环、完成)
图表
代码
graph TB
subgraph ProcessSched["OS 进程调度"]
P1[多进程并发
时间片轮转]
P2[进程通信
管道/共享内存]
P3[父子进程
fork/exec]
P4[进程状态
运行/阻塞/结束]
end
subgraph MultiAgent["Harness 多 Agent"]
A1[多Agent并发
主/子Agent]
A2[Agent通信
消息传递]
A3[主子Agent
派发子Agent]
A4[Agent状态
初始化/循环/完成]
end
ProcessSched -.->|类比| MultiAgentgraph TB
subgraph ProcessSched["OS 进程调度"]
P1[多进程并发
时间片轮转]
P2[进程通信
管道/共享内存]
P3[父子进程
fork/exec]
P4[进程状态
运行/阻塞/结束]
end
subgraph MultiAgent["Harness 多 Agent"]
A1[多Agent并发
主/子Agent]
A2[Agent通信
消息传递]
A3[主子Agent
派发子Agent]
A4[Agent状态
初始化/循环/完成]
end
ProcessSched -.->|类比| MultiAgentgraph TB
subgraph ProcessSched["OS 进程调度"]
P1[多进程并发
时间片轮转]
P2[进程通信
管道/共享内存]
P3[父子进程
fork/exec]
P4[进程状态
运行/阻塞/结束]
end
subgraph MultiAgent["Harness 多 Agent"]
A1[多Agent并发
主/子Agent]
A2[Agent通信
消息传递]
A3[主子Agent
派发子Agent]
A4[Agent状态
初始化/循环/完成]
end
ProcessSched -.->|类比| MultiAgentgraph TB
subgraph ProcessSched["OS 进程调度"]
P1[多进程并发<br/>时间片轮转]
P2[进程通信<br/>管道/共享内存]
P3[父子进程<br/>fork/exec]
P4[进程状态<br/>运行/阻塞/结束]
end
subgraph MultiAgent["Harness 多 Agent"]
A1[多Agent并发<br/>主/子Agent]
A2[Agent通信<br/>消息传递]
A3[主子Agent<br/>派发子Agent]
A4[Agent状态<br/>初始化/循环/完成]
end
ProcessSched -.->|类比| MultiAgent类比要点:
- 并发协作:OS 多进程,Harness 多 Agent
- 通信机制:OS 进程通信,Agent 消息传递
- 层级关系:OS 父子进程,Harness 主子 Agent
7. 系统调用 ↔ 工具调用
OS 系统调用:
- 用户态→内核态(syscall)
- 标准接口(read、write、open)
- 参数传递(寄存器、栈)
- 返回值(错误码、结果)
Harness 工具调用:
- Agent→工具层(tool_use)
- 标准接口(Read、Write、Bash)
- 参数传递(JSON 参数)
- 返回值(工具输出)
图表
代码
graph LR
subgraph SysCall["系统调用"]
S1[用户态程序]
S2[syscall接口]
S3[内核态执行]
S4[返回结果]
end
subgraph ToolCall["工具调用"]
T1[Agent推理]
T2[tool_use接口]
T3[工具层执行]
T4[返回输出]
end
S1 -->|调用| S2 -->|切换| S3 -->|返回| S4
T1 -->|调用| T2 -->|执行| T3 -->|返回| T4
SysCall -.->|类比| ToolCallgraph LR
subgraph SysCall["系统调用"]
S1[用户态程序]
S2[syscall接口]
S3[内核态执行]
S4[返回结果]
end
subgraph ToolCall["工具调用"]
T1[Agent推理]
T2[tool_use接口]
T3[工具层执行]
T4[返回输出]
end
S1 -->|调用| S2 -->|切换| S3 -->|返回| S4
T1 -->|调用| T2 -->|执行| T3 -->|返回| T4
SysCall -.->|类比| ToolCallgraph LR
subgraph SysCall["系统调用"]
S1[用户态程序]
S2[syscall接口]
S3[内核态执行]
S4[返回结果]
end
subgraph ToolCall["工具调用"]
T1[Agent推理]
T2[tool_use接口]
T3[工具层执行]
T4[返回输出]
end
S1 -->|调用| S2 -->|切换| S3 -->|返回| S4
T1 -->|调用| T2 -->|执行| T3 -->|返回| T4
SysCall -.->|类比| ToolCallgraph LR
subgraph SysCall["系统调用"]
S1[用户态程序]
S2[syscall接口]
S3[内核态执行]
S4[返回结果]
end
subgraph ToolCall["工具调用"]
T1[Agent推理]
T2[tool_use接口]
T3[工具层执行]
T4[返回输出]
end
S1 -->|调用| S2 -->|切换| S3 -->|返回| S4
T1 -->|调用| T2 -->|执行| T3 -->|返回| T4
SysCall -.->|类比| ToolCall类比要点:
- 边界跨越:syscall 跨用户/内核态,tool_use 跨 Agent/工具层
- 标准接口:syscall 有标准 API,tool_use 有标准 Schema
- 参数返回:syscall 有参数返回,tool_use 有参数输出
8. 环境变量 ↔ CLAUDE.md
OS 环境变量:
- 运行环境配置(PATH、HOME)
- 进程继承(子进程继承环境变量)
- 动态修改(export、unset)
- 项目特定(.env 文件)
Harness CLAUDE.md:
- 项目约定配置(架构、约定)
- Agent 继承(注入 System Prompt)
- 动态修改(修改 CLAUDE.md)
- 项目特定(每个项目不同)
图表
代码
graph TB
subgraph EnvVar["环境变量"]
E1[运行环境配置
PATH/HOME]
E2[进程继承
子进程继承]
E3[动态修改
export/unset]
E4[项目特定
.env文件]
end
subgraph CLAUDEmd["CLAUDE.md"]
C1[项目约定配置
架构/约定]
C2[Agent继承
注入Prompt]
C3[动态修改
编辑文件]
C4[项目特定
每个项目不同]
end
EnvVar -.->|类比| CLAUDEmdgraph TB
subgraph EnvVar["环境变量"]
E1[运行环境配置
PATH/HOME]
E2[进程继承
子进程继承]
E3[动态修改
export/unset]
E4[项目特定
.env文件]
end
subgraph CLAUDEmd["CLAUDE.md"]
C1[项目约定配置
架构/约定]
C2[Agent继承
注入Prompt]
C3[动态修改
编辑文件]
C4[项目特定
每个项目不同]
end
EnvVar -.->|类比| CLAUDEmdgraph TB
subgraph EnvVar["环境变量"]
E1[运行环境配置
PATH/HOME]
E2[进程继承
子进程继承]
E3[动态修改
export/unset]
E4[项目特定
.env文件]
end
subgraph CLAUDEmd["CLAUDE.md"]
C1[项目约定配置
架构/约定]
C2[Agent继承
注入Prompt]
C3[动态修改
编辑文件]
C4[项目特定
每个项目不同]
end
EnvVar -.->|类比| CLAUDEmdgraph TB
subgraph EnvVar["环境变量"]
E1[运行环境配置<br/>PATH/HOME]
E2[进程继承<br/>子进程继承]
E3[动态修改<br/>export/unset]
E4[项目特定<br/>.env文件]
end
subgraph CLAUDEmd["CLAUDE.md"]
C1[项目约定配置<br/>架构/约定]
C2[Agent继承<br/>注入Prompt]
C3[动态修改<br/>编辑文件]
C4[项目特定<br/>每个项目不同]
end
EnvVar -.->|类比| CLAUDEmd类比要点:
- 环境配置:环境变量配置运行环境,CLAUDE.md 配置项目环境
- 继承机制:子进程继承环境变量,Agent 继承 CLAUDE.md
- 项目特定:每个项目有不同环境,每个项目有不同 CLAUDE.md
类比的深层含义
Harness 的"操作系统"角色
图表
代码
graph TB
subgraph AgentRunsOn["Agent 运行在 Harness 上"]
Agent[Agent
推理决策]
Harness[Harness
执行环境]
Tools[工具系统
能力边界]
Agent -->|运行| Harness -->|管理| Tools
end
subgraph AppRunsOn["程序运行在 OS 上"]
App[应用程序
业务逻辑]
OS[操作系统
运行环境]
Hardware[硬件资源
能力边界]
App -->|运行| OS -->|管理| Hardware
end
AgentRunsOn -.->|类比| AppRunsOngraph TB
subgraph AgentRunsOn["Agent 运行在 Harness 上"]
Agent[Agent
推理决策]
Harness[Harness
执行环境]
Tools[工具系统
能力边界]
Agent -->|运行| Harness -->|管理| Tools
end
subgraph AppRunsOn["程序运行在 OS 上"]
App[应用程序
业务逻辑]
OS[操作系统
运行环境]
Hardware[硬件资源
能力边界]
App -->|运行| OS -->|管理| Hardware
end
AgentRunsOn -.->|类比| AppRunsOngraph TB
subgraph AgentRunsOn["Agent 运行在 Harness 上"]
Agent[Agent
推理决策]
Harness[Harness
执行环境]
Tools[工具系统
能力边界]
Agent -->|运行| Harness -->|管理| Tools
end
subgraph AppRunsOn["程序运行在 OS 上"]
App[应用程序
业务逻辑]
OS[操作系统
运行环境]
Hardware[硬件资源
能力边界]
App -->|运行| OS -->|管理| Hardware
end
AgentRunsOn -.->|类比| AppRunsOngraph TB
subgraph AgentRunsOn["Agent 运行在 Harness 上"]
Agent[Agent<br/>推理决策]
Harness[Harness<br/>执行环境]
Tools[工具系统<br/>能力边界]
Agent -->|运行| Harness -->|管理| Tools
end
subgraph AppRunsOn["程序运行在 OS 上"]
App[应用程序<br/>业务逻辑]
OS[操作系统<br/>运行环境]
Hardware[硬件资源<br/>能力边界]
App -->|运行| OS -->|管理| Hardware
end
AgentRunsOn -.->|类比| AppRunsOn类比揭示的深层含义:
| 含义 | 说明 | 启示 |
|---|---|---|
| Harness 是基础设施 | Agent 需要 Harness 才能工作 | Harness 设计要稳固 |
| Harness 提供抽象 | 工具层抽象复杂操作 | Harness 要易用 |
| Harness 管理资源 | 上下文、权限、工具都是资源 | Harness 要高效 |
| Harness 保护安全 | 权限系统保护用户环境 | Harness 要安全 |
| Harness 可扩展 | MCP/Skills 扩展能力 | Harness 要灵活 |
类比的局限性
不完全类比的部分
| OS 概念 | Harness 不对应的部分 | 原因 |
|---|---|---|
| 硬件直接管理 | Harness 不管理硬件 | Harness 管理工具,不是硬件 |
| 实时性保证 | Harness 无实时要求 | Agent Loop 不是实时系统 |
| 多用户并发 | Harness 单用户为主 | Agent 通常单用户工作 |
| 持久化存储 | Harness 不负责持久化 | 文件系统负责持久化 |
图表
代码
graph TB
subgraph NotAnalogy["不完全类比"]
N1[硬件直接管理
Harness管理工具]
N2[实时性保证
无实时要求]
N3[多用户并发
单用户为主]
N4[持久化存储
文件系统负责]
end
style NotAnalogy fill:#FFE0E0graph TB
subgraph NotAnalogy["不完全类比"]
N1[硬件直接管理
Harness管理工具]
N2[实时性保证
无实时要求]
N3[多用户并发
单用户为主]
N4[持久化存储
文件系统负责]
end
style NotAnalogy fill:#FFE0E0graph TB
subgraph NotAnalogy["不完全类比"]
N1[硬件直接管理
Harness管理工具]
N2[实时性保证
无实时要求]
N3[多用户并发
单用户为主]
N4[持久化存储
文件系统负责]
end
style NotAnalogy fill:#FFE0E0graph TB
subgraph NotAnalogy["不完全类比"]
N1[硬件直接管理<br/>Harness管理工具]
N2[实时性保证<br/>无实时要求]
N3[多用户并发<br/>单用户为主]
N4[持久化存储<br/>文件系统负责]
end
style NotAnalogy fill:#FFE0E0类比的适用边界
适用场景:
- ✅ 理解 Harness 的基础设施角色
- ✅ 理解 Harness 的组件职责
- ✅ 理解 Harness 的设计思想
不适用场景:
- ❌ 理解 Harness 的实现细节
- ❌ 理解 Agent 的推理机制
- ❌ 理解 Model 的能力边界
设计启示:借鉴 OS 设计思想
从 OS 学到的设计原则
| OS 设计原则 | Harness 应用 | 说明 |
|---|---|---|
| 分层设计 | Harness 四层架构 | Loop层→工具层→管理层→扩展层 |
| 抽象接口 | 工具统一接口 | 所有工具统一 Schema |
| 权限分离 | 三级权限系统 | deny→ask→allow |
| 资源管理 | 上下文管理 | 四层压缩策略 |
| 并发协作 | 多 Agent 协作 | 主/子 Agent 机制 |
| 动态加载 | MCP/Skills 按需加载 | 按需注册,按需注入 |
| 环境隔离 | 子 Agent 上下文隔离 | 独立上下文,不污染 |
图表
代码
graph TB
subgraph OSDesign["OS 设计原则"]
O1[分层设计]
O2[抽象接口]
O3[权限分离]
O4[资源管理]
O5[并发协作]
O6[动态加载]
O7[环境隔离]
end
subgraph HarnessApply["Harness 应用"]
H1[四层架构]
H2[工具Schema]
H3[三级权限]
H4[上下文压缩]
H5[多Agent]
H6[MCP/Skills]
H7[子Agent隔离]
end
OSDesign -->|借鉴| HarnessApplygraph TB
subgraph OSDesign["OS 设计原则"]
O1[分层设计]
O2[抽象接口]
O3[权限分离]
O4[资源管理]
O5[并发协作]
O6[动态加载]
O7[环境隔离]
end
subgraph HarnessApply["Harness 应用"]
H1[四层架构]
H2[工具Schema]
H3[三级权限]
H4[上下文压缩]
H5[多Agent]
H6[MCP/Skills]
H7[子Agent隔离]
end
OSDesign -->|借鉴| HarnessApplygraph TB
subgraph OSDesign["OS 设计原则"]
O1[分层设计]
O2[抽象接口]
O3[权限分离]
O4[资源管理]
O5[并发协作]
O6[动态加载]
O7[环境隔离]
end
subgraph HarnessApply["Harness 应用"]
H1[四层架构]
H2[工具Schema]
H3[三级权限]
H4[上下文压缩]
H5[多Agent]
H6[MCP/Skills]
H7[子Agent隔离]
end
OSDesign -->|借鉴| HarnessApplygraph TB
subgraph OSDesign["OS 设计原则"]
O1[分层设计]
O2[抽象接口]
O3[权限分离]
O4[资源管理]
O5[并发协作]
O6[动态加载]
O7[环境隔离]
end
subgraph HarnessApply["Harness 应用"]
H1[四层架构]
H2[工具Schema]
H3[三级权限]
H4[上下文压缩]
H5[多Agent]
H6[MCP/Skills]
H7[子Agent隔离]
end
OSDesign -->|借鉴| HarnessApply本章小结
- 类比定义:Harness 是 Agent 的操作系统,提供运行环境和管理能力
- 组件对应:内核→Agent Loop、文件系统→工具层、设备驱动→MCP、权限管理→权限系统、内存管理→上下文、进程调度→多Agent、系统调用→工具调用、环境变量→CLAUDE.md
- 类比价值:易于理解、准确映射、指导设计
- 深层含义:Harness 是基础设施、提供抽象、管理资源、保护安全、可扩展
- 局限性:不管理硬件、无实时性、单用户为主、不负责持久化
- 设计启示:借鉴 OS 分层设计、抽象接口、权限分离、资源管理、并发协作、动态加载、环境隔离
预告:下一篇我们深入 Agent 与 Harness 的协作模式——两者如何配合完成任务。
相关内容
- 第01章 Agent 的 70 年简史 —— 从符号推理到深度学习
- 第02章 LLM 时代的 Agent 革命 —— 2023-2026 爆发期
- 第03章 Harness 概念溯源 —— "模型是大脑,Harness是身体"
- 第04章 Harness 核心架构 —— 四层模型详解
- 第05章 Harness vs Agent vs Model —— 三者关系辨析
收录于 合集・01-AI 工具与智能体/07-Harness 27
如果这篇文章对你有帮助,欢迎请我喝杯咖啡 ☕
支付宝
微信