aboutHarness
Harness的定义
Harness(Agent Harness)可以理解为:
给定一个大语言模型,通过增加工具调用、上下文管理、任务循环、权限控制、记忆、状态管理、评估等基础设施,让LLM从“只能回答问题的模型”变成“能够持续完成任务的智能体”。
简单来说:
LLM负责思考,Harness负责让它真正做事。
传统LLM:
1 | 用户问题 |
Agent:
1 | 用户任务 |
而控制这个循环的基础设施,就是Agent Harness。
微软对 Agent Harness 的定义也强调了这一点:Harness负责驱动模型调用与工具调用、管理会话状态和上下文、执行审批策略,并让Agent能够持续推进多步骤任务。
Coding Agent|Browser Agent|Research Agent|Data Agent|DevOps Agent
Harness解决什么问题?
单独使用LLM时,模型主要负责:
- 理解用户问题
- 生成文本
- 根据上下文进行推理
但是一个真正的Agent还需要:
- 调用工具
- 读取文件
- 执行代码
- 查询数据库
- 访问网络
- 管理上下文
- 保存任务状态
- 控制权限
- 处理错误
- 继续执行任务
- 判断什么时候应该停止
因此:
Agent ≠ LLM
更加准确的关系是:
1 | Agent |
所以Harness更像是:
Agent的运行时基础设施。
Harness的核心流程
一个最简单的Agent Harness可以抽象成:
1 | 用户输入 |
核心其实就是一个循环:
1 | while not finished: |
因此Agent Harness最核心的部分可以理解为:
Agent Loop
Harness的核心组成
1. LLM
LLM是Agent的“大脑”。
主要负责:
- 理解任务
- 分析上下文
- 选择工具
- 制定下一步行动
- 根据工具结果继续推理
- 最终生成结果
例如:
1 | 用户: |
LLM可能决定:
1 | 1. 查看项目目录 |
但是LLM本身不能直接完成这些事情。
这就需要Harness。
2. Tool
Tool是Agent能够真正执行操作的接口。
例如:
1 | 文件系统 |
LLM负责:
决定调用什么工具。
Harness负责:
真正执行工具,并把结果重新交给LLM。
例如:
1 | LLM: |
Harness:
1 | 执行 read_file |
然后:
1 | LLM |
3. Agent Loop
Agent Loop是Harness最核心的机制。
传统程序:
1 | A → B → C → D |
流程提前确定。
Agent:
1 | A |
因此Agent的执行路径不是完全固定的。
一个典型循环可以表示为:
1 | Observe |
这也是Agent区别于普通LLM API调用的重要原因。
4. Context
Context负责保存Agent当前任务所需要的信息。
例如:
1 | System Prompt |
最终组成:
1 | Context |
Context管理非常重要,因为Agent运行时间越长:
1 | 工具调用次数 ↑ |
如果无限制地保存所有内容,就会导致:
- Token消耗增加
- 推理速度下降
- 上下文窗口不足
- 无关信息干扰模型
因此Harness通常需要:
Context Management
5. Context Compaction
当上下文过长时,可以对历史信息进行压缩。
例如原始Context:
1 | 用户问题 |
压缩之后:
1 | 任务目标: |
也就是:
1 | 大量历史信息 |
这样可以让Agent长时间运行。
6. Memory
Context和Memory不是完全相同的东西。
Context
主要保存:
当前任务需要的信息
例如:
1 | 当前正在修改: |
Memory
主要保存:
跨任务、长期需要的信息
例如:
1 | 项目使用: |
可以简单理解:
1 | Context |
7. Permission
Agent拥有工具以后,就产生了一个非常重要的问题:
Agent到底可以做什么?
例如:
1 | 读取文件 ✓ |
因此Harness通常需要权限控制。
例如:
1 | Read |
可以进一步设置:
1 | 允许 |
例如:
1 | Agent: |
这也是生产环境Agent非常重要的一层。
8. Sub-Agent
复杂任务可以拆分给多个Agent。
例如:
1 | 主Agent |
最终:
1 | 主Agent |
因此Harness还可以负责:
Agent之间的任务调度与生命周期管理。
9. Hooks
Hooks可以理解为:
在Agent执行某些关键动作之前或之后自动执行额外逻辑。
例如:
1 | Agent开始执行 |
可以用于:
- 日志记录
- 权限检查
- Token统计
- 安全检查
- 自动测试
- 审计
- 结果评估
10. MCP
MCP(Model Context Protocol)可以作为Agent连接外部工具和数据源的一种标准化方式。
例如:
1 | Agent |
这样Agent不需要针对每个工具重新设计一套调用方式。
Harness与Agent、LLM的关系
可以这样理解:
| 概念 | 主要职责 |
|---|---|
| LLM | 思考、推理、决策 |
| Tool | 执行具体操作 |
| Agent | 利用LLM和Tool完成任务 |
| Harness | 管理Agent运行所需的整个运行环境 |
| MCP | 标准化Agent与外部工具/数据源之间的连接 |
| Memory | 保存长期信息 |
| Context | 保存当前任务信息 |
因此:
1 | Agent |
Harness的典型应用
1. Coding Agent
例如:
1 | 用户: |
Harness负责:
1 | 读取代码 |
2. Research Agent
1 | 用户: |
Agent可以:
1 | 搜索论文 |
3. DevOps Agent
例如:
1 | 检查生产环境服务状态 |
Agent:
1 | 查询监控 |
企业平台也已经开始把AI Agent直接作为软件交付Pipeline中的步骤,使Agent能够参与构建、测试、部署、故障处理等流程,并通过Pipeline和平台治理进行控制。
Harness的核心价值
传统:
1 | LLM |
Agent:
1 | LLM |
Harness:
1 | ┌──────────────────────────────┐ |
因此可以把Harness理解成:
让LLM能够稳定、持续、安全地执行复杂任务的一套运行时基础设施。
Harness与普通工作流的区别
传统Workflow:
1 | A → B → C → D |
流程由开发者提前确定。
Agent Harness:
1 | A |
因此:
Workflow强调预定义流程。
Agent Harness强调动态决策 + 工具执行 + 状态循环。
两者也可以结合:
1 | Workflow |
Harness的本质
如果只记住一句话:
LLM负责“想”,Tool负责“做”,Harness负责“让整个Agent持续运行起来”。
进一步可以理解为:
1 | LLM |
所以在Agent系统中,Harness并不是一个单独的模型,而是一层运行时基础设施(Runtime Infrastructure)。






