The Anatomy of an Agent Harness解析

2026-04-19

Agent Harness 解析:一个 Agent 到底由什么构成?

原文:The Anatomy of an Agent Harness
作者:Vivek Trivedy(LangChain)
整理日期:2026-04-19


核心公式

Agent = Model + Harness

模型是大脑,Harness 是让大脑能干活的一切基础设施。

你说”我做了一个 Agent”,其实是说”我做了一个 Harness,然后把模型接进去了”。

“If you’re not the model, you’re the harness.” —— Vivek Trivedy, LangChain


为什么需要 Harness?

裸模型只能做一件事:吃文本,吐文本。它天生不能:

  • 跨会话保持状态
  • 执行代码
  • 访问实时信息
  • 自己安装依赖、配置环境

这些全是 Harness 的活。


一个精准的类比

计算机组件 Agent 对应物
CPU 模型(LLM)
RAM 上下文窗口
磁盘 外部数据库
设备驱动 工具(Tools)
操作系统 Harness

Harness 不是 prompt 的包装,是让自主 Agent 行为成为可能的完整系统。


三层工程的层级关系

┌─────────────────────────────────────────┐
│           Harness Engineering           │
│  ┌───────────────────────────────────┐  │
│  │       Context Engineering        │  │
│  │  ┌─────────────────────────────┐ │  │
│  │  │     Prompt Engineering      │ │  │
│  │  └─────────────────────────────┘ │  │
│  └───────────────────────────────────┘  │
└─────────────────────────────────────────┘
  • Prompt Engineering — 写给模型看的指令
  • Context Engineering — 管理模型在什么时候看到什么
  • Harness Engineering — 包含以上两层,再加上工具编排、状态持久化、错误恢复、安全执行、生命周期管理

生产级 Harness 的 11 个核心组件

1. 编排循环(Orchestration Loop)

Harness 的心跳。实现 Thought-Action-Observation(TAO)循环,也叫 ReAct 循环:

组装 prompt → 调模型 → 解析输出 → 执行工具 → 把结果喂回去 → 重复

Anthropic 把自己的 runtime 叫”dumb loop”——智能在模型里,Harness 只管轮转。


2. 工具(Tools)

模型的”手”。以 schema 形式(名称、描述、参数类型)注入上下文,让模型知道有哪些能力可用。

Harness 负责:注册、参数校验、沙箱执行、把结果格式化回 LLM 可读的 observation。

Claude Code 的工具分六类:文件操作、搜索、执行、Web 访问、代码智能、子 Agent 派生。


3. 记忆(Memory)

分两个时间尺度:

  • 短期记忆:当前会话的对话历史
  • 长期记忆:跨会话持久化

各家实现:
– Anthropic:CLAUDE.md / MEMORY.md 项目文件
– LangGraph:namespace 组织的 JSON Store
– OpenAI:SQLite 或 Redis 支持的 Sessions

Claude Code 的三层记忆架构:轻量索引(每条约 150 字符,始终加载)→ 按需拉取的详细主题文件 → 仅通过搜索访问的原始对话记录。


4. 上下文管理(Context Management)

很多 Agent 悄悄挂掉的地方。

核心问题:Context Rot(上下文腐烂)——关键内容落在窗口中间位置时,模型性能下降 30%+。即使是百万 token 窗口也不免疫。

生产级策略包括:压缩、摘要、选择性保留、滑动窗口等。


5. 文件系统(Filesystem)

最基础的 Harness 原语,解锁了:

  • Agent 有工作区可以读写数据、代码、文档
  • 跨会话保存中间结果,不用把所有东西塞进上下文
  • 多 Agent 协作的天然共享面

Git 在文件系统上加版本控制,让 Agent 能追踪工作、回滚错误、分支实验。


6. Bash + 代码执行(Code as General-Purpose Tool)

与其为每种操作预先设计工具,不如给 Agent 一个通用工具:bash。

模型可以即兴编写代码来解决问题,而不受预配置工具集的限制。代码执行已成为自主问题解决的默认通用策略。


7. 沙箱执行环境(Sandbox)

Agent 生成的代码不能直接跑在本机。沙箱提供:

  • 安全隔离的执行环境
  • 按需创建、扇出多任务、完成后销毁
  • 预装语言运行时、包管理器、CLI 工具、浏览器等

Agent 需要访问训练截止日期之后的信息,以及超出上下文窗口的历史知识。

解决方案:向量数据库 + 语义检索,在需要时把相关知识注入上下文。


9. 错误处理与护栏(Error Handling & Guardrails)

工具调用失败、输出格式不对、任务跑偏——这些都要 Harness 兜底。

包括:重试逻辑、格式校验、命令白名单、网络隔离、安全边界强制执行。


10. 多 Agent 编排(Multi-Agent Orchestration)

单个 Agent 处理不了的复杂任务,需要子 Agent 派生、任务分发、结果汇总。

Harness 负责:子 Agent 生命周期管理、任务路由、模型选择、结果聚合。


11. 生命周期管理(Lifecycle Management)

Agent 运行的完整生命周期:启动、暂停、恢复、超时、清理。

包括会话持久化、断点续跑、资源回收等。


关键结论

  1. Harness 工程才是 Agent 能力的真正决定因素。LangChain 仅改变基础设施(同一模型、同一权重),在 TerminalBench 2.0 上从 30 名开外跳到第 5 名。
  2. “我做了一个 Agent”= “我做了一个 Harness”。Agent 是涌现出来的行为,Harness 是产生这种行为的机器。
  3. 上下文管理是最容易被忽视的短板。很多 Agent 在 demo 时表现良好,任务超过 10 步就开始悄悄失败,根源往往在上下文管理,不在模型本身。

整理自 LangChain Blog & Daily Dose of Data Science,2026-04-19