Blog

Agent Harness 是什么?一次说清运行时、Session 与权限边界

Agent Harness 是把大模型变成可用 Agent 的运行时层。本文说明它到底负责什么、和 Agent 框架及 MCP 的区别,以及为什么进入生产环境后要求会突然变高。

Agent Harness 是把大模型变成「可用 Agent」的那一层运行时。

模型负责推理,Harness 负责其他所有事:跑执行循环(调用模型、执行工具、把结果喂回去)、维护 Session 状态、给 Agent 一块可操作的工作区、装配它能调用的工具,并守住权限与沙箱边界。

理解了这条分界线,就能解释一个很常见的现象:Agent 一旦离开 demo 阶段,出问题的地方往往不是推理,而是运行时。上下文在两次运行之间丢了;工具调用碰到了不该碰的东西;没人能还原当时发生了什么;Agent 没法接着昨天的工作往下做。

容易混淆的四层

这几个词经常被混着用,但它们处在不同层,职责也不同。

它是什么它不负责什么
模型推理引擎没有记忆、没有工具、不能持久化
框架用来表达 Agent 逻辑的库不管执行、状态和治理
Harness真正执行并约束 Agent 的运行时不决定你产品的交互界面
协议(MCP)连接工具与数据的约定它不是运行时,也不管 Session

一个简单的判断方法:把它删掉,什么会坏?

删掉模型,没东西会推理。删掉框架,你要多写些代码,但 Agent 还能跑。删掉 Harness,Agent 在两次请求之间就不存在了,因为持有它状态、工具和权限的东西没了。

Harness 到底负责什么

清单不长,但每一项都缺不得:

  • 执行循环:调用模型、解析工具调用、执行、把结果喂回,直到任务完成或触到上限。
  • Session 状态:对话、工作上下文,以及继续、分叉、重放一个 Session 的能力,而不是每次从头开始。
  • Workspace:Agent 能操作的文件、目录与 Shell。没有边界清晰的工作区,Agent 做不了真活。
  • 工具与 Plugin:Agent 实际能调用的东西,且是显式装配的,不是碰巧发现的。
  • 记忆:什么能跨 Session 存活,以及后续怎么检索出来。
  • 权限与沙箱:哪些动作允许、哪些需要审批、硬边界画在哪里。
  • 服务:模型访问、身份、存储,以及 Agent 需要的外部能力。
  • 用量与成本:调了哪个模型、花了多少 token、由谁买单。
  • 可观测性:日志、链路与产物,要足以回答「它做了什么,为什么这么做」。

注意这里面几乎没有「提示词」的份量。Harness 的工作主要是系统工程:进程边界、状态机、权限、成本核算。

和 Agent 框架的区别

框架帮你描述一个 Agent,Harness 帮你运行一个 Agent。

框架擅长编排:链、图、工具定义、提示模板。但它是库,所以进程、持久化、权限模型和部署方式仍然归你的应用管。

当有人说「Agent 在 notebook 里好好的,上生产就不行」,缺的通常就是这一层。库在履行自己的职责,只是没有任何东西在履行运行时的职责。

和 MCP 的关系

MCP(Model Context Protocol)是连接标准。它把一个具体问题回答得很好:Agent 如何以可预期的方式访问某个工具或数据源?

这很有价值,但它和 Harness 不是同一件事。MCP 定义的是 Agent 边缘的契约;Harness 持有的是 Agent 本身:它的循环、Session、Workspace、权限与计费。

两者是组合关系,不是竞争关系。Harness 可以把 MCP server 作为工具暴露给 Agent。但 MCP 本身不会告诉你:哪个 Session 在什么成本下、用谁的凭证调用了哪个工具。那是 Harness 的领地。

为什么进入生产后要求会突然变高

一旦有真实用户依赖这个 Agent,四个要求会立刻出现。

可续跑。 demo 在一个进程里跑九十秒。真实 Agent 要跨重启、跨部署跑几周。状态必须活得比进程久,Session 也就必须是持久化对象,而不是内存里的便利结构。

边界。 只给自己用的时候,工具权限放开无所谓。面对真实用户,你必须能明确回答:Agent 可以碰什么、什么需要人工审批、沙箱边缘在哪里。

多个产品共用一套后端。 多数团队要交付的不是一个 Agent,而是控制台、扩展、API 和内部工具,它们都需要同一套模型、账号与用量记录。每个入口各重建一遍,正是 Agent 项目悄悄死掉的方式。

成本可见。 token 开销是真实的成本项。如果用量无法归因到某个用户、产品或 Session,你就没法定价、限流或排查。

这些都不是模型问题,全部是 Harness 问题。

Downcity 与这些职责的对应关系

Downcity 是一套开源 Agent Harness,以及让它可交付的配套 Kit。职责到组件的映射是刻意的,基本一一对应:

Harness 职责Downcity 组件
执行循环、Session、WorkspaceAgent HarnessAgent 运行时
本地 Agent 宿主与请求转发City
模型目录、Service 路由、身份Federation
把 Agent 嵌进你自己的应用Agent SDK
工具、记忆、Shell、任务Agent Plugins
用量、Credits 与支付账号与支付
面向 Agent 的 UI 模式UI SDK

有两个设计选择值得单独指出,因为它们决定了其他一切。

第一,能力显式装配。由调用方决定这个 Agent 挂哪些 Plugin 和工具,而不是依赖平台自动组装。显式装配是权限可审计的前提。

第二,产品边界与运行时分离。产品负责用户体验;Agent 在明确边界内执行;运行时负责那些被反复重建的基础设施:模型、工具、任务、记忆、权限、用量、计费与可观测性。更完整的论证写在白皮书里。

常见问题

Agent Harness 就是 Agent 框架吗? 不是。框架是用来描述 Agent 逻辑的库;Harness 是执行它、持有它状态、约束它能做什么的运行时。多数团队最终两者都需要。

已经用了 MCP,还需要 Harness 吗? 如果 Agent 只是偶尔调几个工具,MCP 可能够用。一旦你需要可续跑的 Session、权限控制、成本归因,或者多个产品共用一个后端,你就需要一个运行时,那就是 Harness。

Harness 只适用于编码 Agent 吗? 不是。编码 Agent 让这个词流行,是因为它一次性压满了所有运行时要求:长 Session、文件读写、Shell 执行、审批。研究、运营、客服类 Agent 面对的是同一组要求。

可以自己实现一个吗? 可以,很多团队也是这么起步的。真实的代价是:你最终会把 Session 持久化、沙箱、权限校验、用量核算和多入口访问重新实现一遍。如果不想从零开始,Downcity 是开源的。

下一步

想先看到 Harness 跑起来再读理论,可以直接安装 CLI 并启动第一个 Agent,几分钟内就能拿到一个真实的 Session、Workspace 和工具边界。

想先理解架构,建议读生产级 Agent 白皮书,它解释了 Harness 这一层为什么存在,以及边界应该画在哪里。如果需要更细的产品文档,可以从文档首页进入。