SSD Nodes Learn Hosting plans →
指南 Matt Connor作者: Matt Connor · 更新于 2026-08-27

Agent harness 是什么?它与模型和框架的区别

了解 agent harness 如何通过循环、工具、权限、会话状态和工作目录运行模型,及其与模型、运行框架的区别;Claude Code、Codex、Gemini CLI 均采用这种划分。

Agent harness 是什么

Agent harness 是围绕语言模型运行、并将其转变为 agent 的程序。它负责维护持续调用模型的循环、模型可以调用的工具定义、决定哪些调用实际执行的权限规则、在多轮交互之间保留的会话状态,以及执行任务的工作目录。其中的模型可以替换。

请记住上一句。模型单独运行时,只会回答问题,然后忘记您。Harness 会询问模型下一步该做什么,执行模型请求的命令,将结果反馈给模型,然后再次询问。人们所说的“agent”,指的就是这种重复过程。如果相关术语仍不清晰,可以先阅读AI agent、LLM 和 assistant 的区别,再选择工具。

运行框架不是模型

供应商使用同一个品牌名称发布它们,因此两者容易混淆。

dsh 和 DeepSeek 是不同的产品。DeepSeek Harness 于 13 August 2026 以 MIT 许可证发布在 github.com/deepseek-ai/deepseek-harness,是需要安装到计算机上的 Node 程序。DeepSeek 模型是通过 API(应用程序编程接口)提供服务的模型权重。将 dsh 指向其他供应商的模型后,它仍可正常工作,因为运行框架只需要对方能够接受消息并返回工具调用。

Claude Code 和 Claude 也是同样的关系。Claude Code 是运行框架:一个带有循环、权限系统以及文件和 shell 工具的终端程序。Claude 是它默认调用的模型系列。Codex 和 Gemini CLI 也采用相同的划分方式。

下面的测试始终可以确定两者的区别。安装一个运行框架,然后调用一个模型。如果该程序在磁盘上有版本,并且在您的主目录中有配置文件,那么它就是运行框架。如果它是该配置文件中的一个字符串,例如 deepseek-chat,那么它就是模型。

循环实际执行的内容

一次 harness 循环如下所示。请慢慢阅读,因为不同 harness 之间几乎所有差异,都体现在这 5 个步骤中。

  1. harness 将当前为止的对话以及工具定义列表发送给模型。
  2. 模型返回文本,或请求调用其中一个工具。
  3. harness 根据权限规则检查该请求,然后执行工具,或暂停并请求您的确认。
  4. harness 运行工具,捕获输出和退出码;如果输出过长,则将其截断。
  5. harness 将结果追加到对话中,然后返回第 1 步。

在日常使用中,第 3 步最能体现 harness 之间的差异。每条命令都先询问的 harness 更安全,但也令人疲惫。完全不询问的 harness 最终可能会在模型判断错误的路径上执行破坏性命令。现在,所有成熟的 harness 都提供一种折中设置:允许列表中的命令无需询问即可运行,其他命令则显示提示并请求确认。

其余差异主要存在于第 1 步。harness 还会在每次请求中附带 system prompt;Claude Code 直接提供了这个调节选项,因为输出样式会修改它发送的 system prompt,从而改变每次返回的回复。对话会在每一轮中增长,而模型的上下文窗口大小固定,因此 harness 必须决定丢弃哪些内容、总结哪些内容,以及将哪些内容写入文件并在之后读回。正是这一决策,在很大程度上决定了两个使用同一模型的 harness 为何会产生不同质量的结果。如果这 5 个步骤仍然比较抽象,最有效的方法是亲自编写一次简易循环;循序渐进的 AI agent 学习路径正是让您在早期构建这样的循环。

现在,大多数 harness 都通过 MCP(模型上下文协议)接入外部工具。MCP 是一种标准方式,可将工具提供给任何支持该协议的 harness,因此一次集成即可用于多个 harness。在 VPS 上运行 MCP 服务器介绍了这一部分。Web 搜索通常是人们接入的第一个工具;让 agent 使用您自己的 SearXNG 实例可以避免将查询发送给第三方,同时也清楚表明,agent 随后读取的每个页面都是在循环中接收的不可信输入。

Agent harness 与 agent framework

每当有新的 harness 发布时,都会出现这个问题。由于各家厂商的定义并不一致,答案也各不相同。下面给出一个经得起检验的区分方式。

framework 是供您导入的库。您编写循环,决定何时调用模型,并自行处理工具结果。LangChain 是一个典型示例:它提供构建模块,您在代码中组装 agent。

harness 是供您运行的程序。循环已经编写完成,工具已经提供,权限模型也已有默认设置。您执行第一条命令就能得到一个可工作的 agent,之后再根据需要进行配置。

通常可以通过安装后的操作判断。如果安装后还需要编写代码,它就是 framework。如果安装后可以直接与其交互,它就是 harness。

这条边界确实存在争议。最清楚的证据来自 LangChain 自己的文档。截至 August 2026,该文档将 Deep Agents 描述为构建于 LangGraph 之上的“固执己见、开箱即用”的 framework,而 langchain-ai/deepagents repository 则将自身称为“开箱即用的 agent harness”。这两种描述都成立。Deep Agents 是一个需要导入的 Python SDK(software development kit),因此按安装测试应归为库;同时,它提供了足够多的默认行为,因此用户也会像使用 harness 一样使用它。Microsoft 在 August 2026 将 harness 和 hosted agents 推出为正式可用产品,这表明该词如今已经成为一个产品类别,而不只是术语。

因此,不妨改问一个更能预测工作量的问题。如果您编写循环,就需要负责循环本身:重试、上下文裁剪、权限提示,以及记录发生过的操作。如果循环由产品提供,您就会继承其他人对这些问题的处理方案。这样可以更快开始,但日后更难修改。

聊天窗口与 harness 的区别

聊天窗口和 harness 都会显示模型输出。区别在于工作在哪台计算机上执行。在聊天窗口中,模型运行的任何代码都会在供应商的沙箱内执行,操作的是您上传的文件;会话结束后,这些内容就会消失。harness 则会在您启动它的计算机上运行工具,以启动它的用户身份运行,并操作真实文件,同时使用其环境中的真实凭据。

这两句话概括了它的全部优势和全部风险。代理终于可以执行实际工作。代理也可以删除这些工作。

实际运行中的 Harness

本列表特意标注为 19 August 2026。这个领域每周都在变化,任何汇总很快就会过时。

  • Claude Code 和 Codex 是厂商提供的 Harness。它们以终端为主,默认绑定各自厂商的模型,并提供最完善的权限处理。Claude Code、Cursor、Codex 和 Copilot 对比会详细介绍这些工具。
  • DeepSeek Harness (dsh) 采用 MIT 许可证,基于一个核心理念构建:一切都是插件。因此,模型、工具、会话、沙箱和用户界面都可以替换。每个已安装的插件都使用 Agent 自身的权限运行,因此在添加 dsh 插件前,检查 dsh 插件可以访问哪些内容比在工具集固定的 Harness 上更重要。截至 19 August 2026,也就是发布后第 6 天,它在 GitHub 上约有 166,800 个 Star。
  • Hermes 来自 Nous Research,是通用的自主 Agent,而不是编程工具。它于 February 2026 以 MIT 许可证发布,并将记忆和技能保存在本机的 SQLite 数据库中。在 VPS 上自行托管 Hermes介绍了具体步骤。
  • Omnigent 是元 Harness:它通过一个 API 驱动包括 Claude Code 和 Codex 在内的其他 Harness,并提供共享会话、支出上限和操作系统级沙箱。将 Omnigent 作为多 Agent Harness介绍了这些功能的作用。
  • OneCLI 是面向团队的沙箱化 Harness,围绕一个网关构建。该网关会将真实凭据注入出站请求,因此 Agent 自身始终只能看到占位密钥。

其中 3 个经常同时进入候选列表,因此值得阅读并列比较 DeepSeek Harness、Claude Code 和 Omnigent,了解它们在模型绑定、许可证、成熟度以及各自在服务器上运行所需条件方面的差异。

dsh快速入门只需执行一条命令。运行一次是了解 Harness 工作方式的最快方法。本机需要安装 Node.js。

npx @deepseek-ai/dsh web

该命令会在 http://127.0.0.1:3080 上启动 Web UI(用户界面)。在依赖它之前,请先阅读 README,因为 dsh明确将自身描述为开发者预览版,并说明后续会发生破坏兼容性的变更。如果第一条命令直接失败,或拉取了不符合预期的构建版本,固定 dsh 的确切版本并清理 npx 缓存通常可以解决问题。在 VPS 上运行 DeepSeek Harness介绍服务器安装过程,为什么该地址以 127.0.0.1 开头解释了回环地址的默认设置。

路由器位于 harness 之上

模型路由器是 harness 与提供商 API 之间的本地代理。Claude Code Router 是常见示例:它默认绑定到 127.0.0.1:3456,接收 Claude Code 原本会发送给其供应商的请求,并将请求转发到您配置的提供商。harness 不知道发生了变化。

路由器之所以存在,是因为模型可以替换,因此它们很好地证明了本文的核心观点。路由器也会集中风险,因为代理可以看到每个提示词,并持有每个提供商的密钥。应将其视为基础设施,而不是便利工具。harness 保存 API 密钥和模型设置的位置 是下移一层后遇到的同一问题。

在 VPS 上运行 harness 时有哪些变化

当 harness 从笔记本迁移到租用的服务器上时,会有四点变化。

关闭笔记本盖后,它仍会继续运行。 长时间任务不会因通勤或电池电量受到影响。在 tmux 中启动任务,然后与其分离:

tmux new -s agent
# start the harness, then press Ctrl-b and then d to detach
tmux attach -t agent

对于需要在重启后自动恢复的任务,用户服务比终端会话更可靠:

loginctl enable-linger $USER
systemctl --user status my-agent.service

loginctl enable-linger 是很多人会忽略的部分。如果没有它,systemd 会在您最后一个 SSH(安全 Shell)会话关闭后立即停止该用户的服务。因此,您退出登录后 agent 就会终止,而且不会输出错误。在 systemd 下无头运行 dsh包含所需的 unit 文件。服务器上已有一个会话运行后,再启动第二个会话不会增加额外开销;同一台主机上的两个 Claude Code 会话可以互相发送消息,因此您今天早上启动的会话可以将任务交给另一个会话,而无需您手动转发。

它会保存您的密钥。 现在,provider key 存储在该服务器的配置文件中。检查哪些用户可以读取该文件:

ls -l ~/.config

以您的用户身份运行的任何进程都可以读取该文件,包括 agent 以及 agent 选择运行的任何程序。

它可以连接到您的其他机器。 如果 VPS 与其他主机位于同一私有网络中,agent 就能通过网络路由访问这些主机。这正是这样部署的目的,同时也决定了安全事件的影响范围。

您可以从任何位置访问它。 大多数 harness 都会提供 Web UI,而且出于安全原因,通常会将其绑定到 loopback。检查您的配置:

ss -tlnp | grep 3080

127.0.0.1:3080 表示只有服务器自身可以连接。0.0.0.0:3080 表示任何找到该地址的人都可以连接。应通过 SSH 隧道访问 loopback UI,而不是更改绑定地址:

ssh -N -L 3080:127.0.0.1:3080 you@your-server

然后在笔记本的浏览器中打开 http://127.0.0.1:3080。网络流量会通过 SSH 会话传输,因此不会有新的服务暴露到互联网。

这些特性同时也是安全风险的依据

换成攻击者的视角,再读一遍这四项特性。

它会无人值守地运行,因此没有人监控模型误读路径的过程。它保存您的密钥,因此只要有一个配置文件可读,整个云服务商账户就可能被接管。它可以访问您的其他机器,因此提示注入(即隐藏在代理读取的网页或文件中的指令)现在可以成为通往数据库主机的路径。它可以从任何位置访问,因此绑定到 0.0.0.0 且没有密码的 Web UI,就相当于把 shell 暴露在公共互联网上。

每种情况下的修复方法都很简单,而且始终相同。为代理创建专用的非特权用户账户,不要使用您的账户:

sudo adduser --disabled-password --gecos "" agent

将 Web UI 绑定到 loopback,并通过 SSH 访问。为代理提供完成任务所需的最小权限凭据,相关内容将在避免让 AI 代理接触密钥中详细说明。对于您无法持续监控的任务,一台临时机器比一台配置谨慎的机器更合适:在一次性 VM 中运行编码代理和在 VPS 上安全运行 Claude Code都采用这种方式。

是否需要 agent harness?

如果你的工作是一次处理一个问题,那么聊天窗口就够了;harness 只会额外增加一个需要你监督的循环。当任务需要针对真实文件执行许多步骤,或者需要在你休息时继续运行,harness 才开始体现价值。

这一类别中的大多数工具都还比较新。截至 2026 年 8 月,dsh 在其 README 中仍标注为开发者预览版,其他工具的变化速度也很快,因此你今天编写的配置文件下个月可能就需要修改。这意味着应保持设置简洁且可复现,并记录所做的更改。同样的克制也适用于循环内部:将 agent 引导至可行的最小改动的 skill,能让你在无人值守运行结束时真正读懂 diff。先在一台服务器上使用一个 harness,交给它一个任务和一个权限范围狭窄的密钥。只有在第一个任务连续一周都平稳无异常后,再扩大其访问权限。当前值得运行的自托管 agent 是选择第一个 agent 的合理起点。

FAQ

简单来说,agent harness 是什么?

它是模型周围运行的程序。模型生成文本,并请求使用工具。harness 运行循环,持续发起后续请求,执行模型请求的工具,强制执行哪些工具可以在未经许可的情况下运行的规则,并在多轮交互之间保留会话状态和文件。替换模型后,harness 仍然可以运行。这最清楚地说明两者是彼此独立的组件。

Claude Code 是模型还是 harness?

Claude Code 是 harness。它是一个终端程序,包含运行循环、权限系统,以及内置的文件和 shell 工具。Claude 是它默认调用的模型系列。DeepSeek Harness(dsh)也采用相同的划分方式:它是需要安装的 Node 程序,而 DeepSeek 模型通过 API 提供服务。您可以在机器上安装 harness,再通过网络调用模型。

agent harness 和 agent framework 有什么区别?

framework 是需要导入并基于其编写代码的库,因此循环、重试和上下文处理都由您负责。harness 是直接运行的程序,因此这些功能都随默认配置一起提供,您只需进行配置而不必自行编写。实际边界并不清晰:截至 2026 年 8 月,LangChain 的 Deep Agents 是一个可导入的 SDK,其代码仓库称它为开箱即用的 agent harness。请先确认您是否需要自行编写循环。这个答案决定哪一个术语更适合当前情况。

运行 agent harness 需要 VPS 吗?

不需要。这里提到的每个 harness 都可以在笔记本电脑上运行。服务器会带来4个变化:关闭笔记本盖子后,agent 仍会继续运行;它可以将密钥保存在一台始终开机的机器上;它可以访问您的其他服务器;您可以从任何设备返回到同一个会话。这些同时也是安全注意事项,因此应为 agent 分配独立的用户账户,并让所有 Web UI 仅绑定到 127.0.0.1。

可以在同一个 harness 中使用其他模型吗?

通常可以,这也是 harness 的定义性特征。大多数 harness 都会在配置中接收模型名称和 base URL,因此将其指向其他提供商通常只需修改配置,而不必重写程序。如果 harness 不支持这样做,可以使用 Claude Code Router 这类本地路由器,让它位于 harness 和提供商之间并转换请求;它默认绑定到 127.0.0.1:3456。请谨慎配置此代理,因为它可以看到每个提示词,并持有每个密钥。