Agent Harness 深度拆解:从框架设计到生产级部署的完整指南
深入解析 Harness 架构的核心组件、可学习控制器与安全机制,构建可靠可控的智能体执行环境
Agent Harness 深度拆解:从框架设计到生产级部署的完整指南
深入解析 Harness 架构的核心组件、可学习控制器与安全机制,构建可靠可控的智能体执行环境
Agent Harness 是包裹大语言模型的完整软件基础设施,决定了智能体在真实场景中的可靠性与可控性。本文从 Harness 的定义与工程层级出发,系统拆解生产级 Harness 的 12 个核心组件,涵盖编排循环、工具调用、记忆管理、上下文工程、状态持久化、错误处理、安全护栏等关键模块。深入探讨本体驱动架构如何将约束内建于业务结构,以及 HarnessBridge 等可学习控制器如何通过观测投影与动作投影实现动态优化。结合小米 HarnessX 与 Harness-1 等前沿实践,提供从理论到落地的完整指南。
引言:为什么模型越强,Agent 越容易翻车?
2024-2025 年,AI Agent 成为企业落地的核心形态。智能体能够自主规划、调用工具、连续执行多步任务,在演示中表现亮眼。然而,一旦进入真实业务场景,问题便集中爆发:模型记不住三步前的决策、工具调用静默失败、上下文窗口被冗余信息填满、推理逻辑偏离业务规则。
根本原因不在模型本身,而在于模型周围缺乏一套稳定的运行时结构。LangChain 曾用一个典型案例证明:仅改变包裹 LLM 的基础设施,模型权重完全不动,在 TerminalBench 2.0 上的排名就从 30 名开外直接跃升至第 5。另一个研究项目让 LLM 自己优化基础设施,通过率达到 76.4%,超过了人工设计的系统。
这套基础设施如今有了正式的名字——Agent Harness。
什么是 Agent Harness?
Agent Harness 是包裹大语言模型的完整软件基础设施,包含编排循环、工具、记忆、上下文管理、状态持久化、错误处理、安全护栏等组件。Anthropic 在 Claude Code 文档中直接写明:SDK 就是“驱动 Claude Code 的 agent harness”。OpenAI 的 Codex 团队也采用同样的框架,将“agent”和“harness”视为等价概念,专指让 LLM 变得有用的非模型基础设施。
LangChain 的 Vivek Trivedy 给出了一个清晰的定义:如果你不是模型本身,你就是 harness。
很多人容易混淆的区分在于:“agent”是涌现出来的行为,是用户交互的那个有目标、会用工具、能自我纠正的实体;而 Harness 是产生这种行为的机器。当有人说“我做了一个 agent”,他们其实是做了一个 harness,然后把它对准了一个模型。
Beren Millidge 在 2023 年的文章《作为自然语言计算机的脚手架 LLM》中给出了一个精准的类比:裸 LLM 是没有内存、没有硬盘、没有 I/O 的 CPU。上下文窗口是内存,快但有限;外部数据库是硬盘,大但慢;工具集成是设备驱动;Harness 是操作系统。我们重新发明了冯·诺依曼架构,因为这是任何计算系统的自然抽象。
三个工程层级
围绕模型存在三个同心圆层级:
Harness 不是提示词的包装层,而是让自主 agent 行为成为可能的完整系统。
生产级 Harness 的 12 个核心组件
综合 Anthropic、OpenAI、LangChain 以及更广泛的实践者社区,一个生产级 agent harness 包含 12 个独立组件。
1. 编排循环
这是 Harness 的心跳。它实现思考-行动-观察(TAO)循环,也称为 ReAct 循环:组装提示词、调用 LLM、解析输出、执行工具调用、将结果反馈回去、重复直到完成。
机制上,这往往只是一个 while 循环,复杂性藏在循环管理的所有东西里。Anthropic 将他们的运行时描述为一个“笨循环”,所有智能都住在模型里,Harness 只管理轮次。
2. 工具
工具是 agent 的手。它们以 schema 形式定义(名称、描述、参数类型),注入到 LLM 的上下文中,让模型知道有哪些可用。工具层负责注册、schema 验证、参数提取、沙盒执行、结果捕获,以及将结果格式化成 LLM 可读的观察结果。
Claude Code 提供六个类别的工具:文件操作、搜索、执行、网络访问、代码智能、子 agent 生成。OpenAI 的 Agents SDK 支持函数工具(通过 @function_tool)、托管工具(WebSearch、CodeInterpreter、FileSearch),以及 MCP 服务器工具。
3. 记忆
记忆在多个时间尺度上运作。短期记忆是单次会话内的对话历史;长期记忆跨会话持久化。Anthropic 使用 CLAUDE.md 项目文件和自动生成的 MEMORY.md 文件;LangGraph 使用命名空间组织的 JSON Store;OpenAI 支持由 SQLite 或 Redis 支持的 Session。
Claude Code 实现了三层层级:轻量级索引(每条约 150 字符,始终加载)、按需拉取的详细主题文件、以及只通过搜索访问的原始记录。一个关键设计原则:agent 把自己的记忆视为“提示”,在行动前会对照实际状态进行验证。
4. 上下文管理
这是很多 agent 悄然失败的地方。核心问题是上下文腐烂:当关键内容落在窗口中间位置时,模型性能下降超过 30%(Chroma 研究结果,得到斯坦福“迷失在中间”论文的印证)。即使是百万 token 的窗口,随着上下文增长,指令遵循能力也会退化。
生产级策略包括:
5. 提示词构建
这一步组装模型在每一步实际看到的内容,是分层的:系统提示、工具定义、记忆文件、对话历史、当前用户消息。OpenAI 的 Codex 使用严格的优先级栈:服务器控制的系统消息(最高优先级)、工具定义、开发者指令、用户指令(级联的 AGENTS.md 文件,32 KiB 上限),然后是对话历史。
6. 输出解析
现代 Harness 依赖原生工具调用,模型返回结构化的 tool_calls 对象,而不是需要解析的自由文本。Harness 检查:有工具调用吗?执行并循环。没有工具调用?那就是最终答案。对于结构化输出,OpenAI 和 LangChain 都支持通过 Pydantic 模型进行 schema 约束的响应。
7. 状态管理
LangGraph 将状态建模为流经图节点的类型字典,用 reducer 合并更新。检查点在超步边界处触发,支持中断后恢复和时间旅行调试。OpenAI 提供四种互斥策略:应用内存、SDK session、服务端 Conversations API,或轻量级 previous_response_id 链接。Claude Code 采用不同的方式:git 提交作为检查点,进度文件作为结构化草稿纸。
8. 错误处理
一个每步成功率 99% 的 10 步流程,端到端成功率仍然只有约 90.4%。错误会快速累积。LangGraph 区分四种错误类型:瞬时错误(带退避重试)、LLM 可恢复错误(将错误作为 ToolMessage 返回让模型调整)、用户可修复错误(中断请求人工输入)、以及意外错误(向上冒泡用于调试)。Anthropic 在工具处理程序内捕获失败,将其作为错误结果返回以保持循环运行。Stripe 的生产 Harness 把重试次数上限设为两次。
9. 护栏与安全
OpenAI 的 SDK 实现三个层级:输入护栏(运行在第一个 agent 上)、输出护栏(运行在最终输出上)、工具护栏(每次工具调用都运行)。一个“断路器”机制在触发时立即停止 agent。
Anthropic 在架构上将权限执行与模型推理分离:模型决定尝试什么,工具系统决定允许什么。Claude Code 独立门控约 40 个离散工具能力,分三个阶段:项目加载时的信任建立、每次工具调用前的权限检查、以及高风险操作的明确用户确认。
10. 验证循环
这是玩具 demo 和生产 agent 的分水岭。Anthropic 推荐三种方式:基于规则的反馈(测试、代码检查、类型检查器)、视觉反馈(通过 Playwright 截图用于 UI 任务)、以及 LLM 作为评判者(独立的子 agent 评估输出)。Claude Code 创建者 Boris Cherny 指出,给模型一种验证自身工作的方式能将质量提升 2 到 3 倍。
11. 子 agent 编排
Claude Code 支持三种执行模型:Fork(父上下文的字节级复制)、Teammate(独立终端面板,通过基于文件的邮箱通信)、以及 Worktree(每个 agent 拥有独立的 git 工作树和隔离分支)。OpenAI 的 SDK 支持 agent 作为工具(专家处理有界子任务)和移交(专家接管完整控制权)。LangGraph 将子 agent 实现为嵌套状态图。
12. 可观测性与轨迹记录
生产级 Harness 必须记录完整的执行轨迹,包括每一步的输入、输出、工具调用、状态变更。这些轨迹不仅用于调试和审计,还可作为后续优化的数据源。小米的 HarnessX 系统将轨迹存入共享缓冲区,同时驱动框架演进和模型微调。
循环实际如何运转:逐步演练
了解了组件,再来看一个完整循环的运作方式。
第 1 步(提示词组装):Harness 构建完整输入:系统提示 + 工具 schema + 记忆文件 + 对话历史 + 当前用户消息。重要上下文被放在提示词的开头和结尾(来自“迷失在中间”的发现)。
第 2 步(LLM 推断):组装好的提示词发送给模型 API,模型生成输出 token:文本、工具调用请求,或两者都有。
第 3 步(输出分类):如果模型只输出文本且没有工具调用,循环结束。如果请求了工具调用,进入执行。如果请求了移交,更新当前 agent 并重新开始。
第 4 步(工具执行):对每个工具调用,Harness 验证参数、检查权限、在沙盒环境中执行、捕获结果。只读操作可以并发运行;写入操作串行运行。
第 5 步(结果打包):工具结果被格式化为 LLM 可读的消息。错误被捕获并作为错误结果返回,让模型可以自我纠正。
第 6 步(上下文更新):结果追加到对话历史。如果接近上下文窗口限制,Harness 触发压缩。
第 7 步(循环):返回第 1 步,重复直到终止。
终止条件是分层的:模型产生无工具调用的响应、超过最大轮次限制、token 预算耗尽、护栏断路器触发、用户中断、或返回安全拒绝。
前沿实践:可学习控制器与自适应演进
HarnessBridge:可学习的双向控制器
传统 Harness 依赖人工规则,在长时序任务中面临两大痛点:交互轨迹冗余信息过多,Token 开销大、关键状态被掩盖;智能体频繁输出无效、重复动作,浪费交互步数。UCLA 团队提出的 HarnessBridge 将传统静态框架改造为端到端可学习双向控制器。
HarnessBridge 由两大核心模块组成:
实验基于 SWE-bench 和 Terminal-Bench 两大代码类基准测试,采用统一指令微调训练轻量化模型。结果显示,HarnessBridge 在开源及多款商用大模型上均表现优异,任务成功率持平或超越传统框架,Token 用量与交互轮次大幅下降。例如在 Terminal-Bench 2.0 上,Token 最高降低 77.5%,成功率提升 11.2 个百分点。
HarnessX:可组合、自适应、可演进的框架工厂
小米团队提出的 HarnessX 将框架本身视为可优化的对象,包含三大核心能力:
实验在 GAIA、ALFWorld 等五大主流智能体基准上开展,结果显示 HarnessX 平均带来 14.5% 的性能提升,最高达 44.0%,且模型基线越弱收益越显著。
Harness-1:状态外部化认知卸载
针对搜索智能体需同时学习语义决策与状态管理的缺陷,Harness-1 提出状态外部化架构:将文档台账、证据记录等繁琐状态维护工作交由专用工具承担,大模型仅专注搜索、策展、验证等语义决策。工具搭建分层工作内存,集成候选池、证据图、验证记录等模块,并配备自动播种、文本压缩去重、文档重要性分级等优化机制。
在网页、金融、专利、多跳问答等 8 项检索基准中,Harness-1 平均策划召回率达 0.730,领先主流开源模型 11.4 个百分点,跨域泛化能力极强。
本体驱动:从技术可控到业务可控
传统 Harness 方案能让 agent“更稳定”,但稳定的边界是工程边界——规则是人写的,约束是配置出来的,合规是靠 Prompt 维持的。这套体系的天花板很清晰:一旦业务复杂度超过工程维护能力,约束就开始失效。
本体驱动的方案实现的是另一件事:让约束直接来自业务结构本身。企业的对象、关系、规则被统一建模为本体,Agent 在执行任务时不是拿到上下文就开始生成,而是必须先进入这层语义结构,在既定的业务关系中完成推理和决策。
本体驱动的 Harness 带来三个实质性的转变:
悦点科技的 Knora 平台将本体驱动方案落地为分层协作的系统架构,本体层以标签属性图存储本体模型 Schema,定义了实体、关系、事件、Action、Logic 五个核心概念。认知引擎层在本体和 Agent 之间做桥接,Agent 执行层是纯粹的执行者,工具从哪来、怎么用、边界在哪,全部由本体层定义。
从 Harness 到 State-Aware Runtime
Harness 解决的是静态问题:“Agent 的外围系统由哪些组件构成?”而更深层的动态问题是:“这些组件,如何共同维护一个长期稳定、可审计、可回滚、可恢复的运行状态?”这个方向被称为 State-Aware Runtime(状态感知运行时)。
State-Aware Runtime 不是单纯给 Agent 加一个 memory,也不是把历史对话塞进长上下文,而是把 Agent 的每一步执行都建模为可验证的状态转移。系统必须知道当前状态是什么,哪些动作只是候选,哪些动作已经提交,哪些状态可以回滚,哪些失败需要隔离或交给人类处理。
核心设计原则包括:
FAQ
Agent Harness 与 LangChain、OpenAI SDK 是什么关系? LangChain、OpenAI SDK 是 Harness 的具体实现框架。它们提供了编排循环、工具调用、记忆管理等基础设施,开发者可以基于这些框架构建自己的 Harness。但 Harness 是一个更广泛的概念,任何包裹 LLM 并使其具备自主行为能力的软件系统都可以称为 Harness。
Harness 工程与提示词工程的根本区别是什么? 提示词工程关注如何设计模型接收的指令文本;Harness 工程则关注完整的应用基础设施,包括工具编排、状态持久化、错误恢复、验证循环、安全执行、生命周期管理等。提示词工程是 Harness 工程的一个子集,Harness 工程是让自主 agent 行为成为可能的完整系统。
可学习控制器(如 HarnessBridge)相比传统规则式 Harness 有哪些优势? 可学习控制器通过观测投影和动作投影两个模块,动态优化上下文压缩和动作校验,能够根据历史轨迹自适应调整策略。相比传统规则式 Harness,它大幅降低 Token 消耗和交互轮次,同时保持或提升任务成功率。基于轻量化模型训练,泛化性强,可无缝迁移到不同的大模型上。
相关教程
系统梳理 Harness 概念、设计原则与落地经验,帮助读者构建生产级 Agent 运行环境
系统梳理 Harness 的核心概念、设计原则与工程实践,构建可靠、可控、可扩展的 Agent 运行框架
系统梳理 Agent Harness 的核心概念、架构支柱与落地挑战,帮你理解为什么同一个模型在不同 Harness 下表现差异巨大。
系统梳理 AI Agent 面临的主要安全威胁及防御策略,帮助开发者构建安全可靠的智能体系统
系统介绍 AI 安全的关键挑战与多层次防御方案,帮助开发者构建安全的 Agent 应用
深入 MCP 协议的设计理念、实现方式与最佳实践,结合 CLI、Skills 等实现实时数据交互