什么是代理运行框架?它与模型、框架的区别
代理运行框架是围绕模型运行的程序,包含循环、工具、权限、会话状态和工作目录。本文解释它如何执行工具调用,以及它与模型和开发框架的区别。
代理运行框架是什么
代理运行框架是围绕语言模型运行、并将其转换为代理的程序。它包含持续调用模型的循环、允许模型调用的工具定义、决定哪些调用实际执行的权限规则、在多轮交互之间保留的会话状态,以及执行任务的工作目录。框架中的模型可以替换。
请记住最后一句话。模型单独运行时,只会回答问题,然后忘记您。代理运行框架会询问模型下一步应执行什么,运行模型请求的命令,将结果反馈给模型,然后再次询问。人们所说的“代理”就是指这种重复过程。如果相关术语仍不清晰,AI 代理、LLM 和助手之间的区别会先解释这些概念,再帮助您选择工具。
运行框架不是模型
供应商使用同一个品牌名称发布二者,因此容易将它们混淆。
dsh 和 DeepSeek 是不同的产品。DeepSeek Harness 由 github.com/deepseek-ai/deepseek-harness 于 13 August 2026 以 MIT 许可证发布,是安装在计算机上的 Node 程序。DeepSeek 模型是通过 API(应用程序编程接口)提供服务的模型权重。将 dsh 指向其他供应商的模型后,它仍可正常工作,因为运行框架只需要连接到能够接收消息并返回工具调用的对象。
Claude Code 和 Claude 也是同样的关系。Claude Code 是一个运行框架:它是包含循环、权限系统以及文件和 shell 工具的终端程序。Claude 是它默认调用的模型系列。Codex 和 Gemini CLI 也采用相同的划分方式。
下面的测试每次都能明确区分二者。安装一个运行框架,然后调用一个模型。如果该对象在磁盘上有版本,并且在主目录中有配置文件,那么它就是运行框架。如果它是配置文件中的一个字符串,例如 deepseek-chat,那么它就是模型。
循环实际执行的内容
一次 harness 循环如下所示。请仔细阅读,因为不同 harness 之间几乎所有差异,都体现在这 5 个步骤中。
- harness 将当前为止的对话以及工具定义列表发送给模型。
- 模型返回文本,或请求调用其中一个工具。
- harness 根据权限规则检查该请求,然后执行请求,或暂停并请求您的确认。
- harness 运行工具,捕获输出和退出码;如果输出过长,则将其截断。
- harness 将结果追加到对话中,然后返回第 1 步。
第 3 步最能体现 harness 在日常使用中的差异。每条命令都先请求确认的 harness 更安全,但使用起来很繁琐。完全不请求确认的 harness 最终可能会在模型判断错误的路径上执行破坏性命令。现在,所有成熟的 harness 都提供一种折中设置:允许列表中的命令无需确认即可执行,其他命令则显示提示并请求确认。
其余差异主要体现在第 1 步。对话会在每一轮增长,而模型的上下文窗口大小固定,因此 harness 必须决定丢弃哪些内容、摘要哪些内容,以及将哪些内容写入文件,稍后再读回。两个 harness 驱动同一个模型时,工作质量之所以不同,主要就是因为这项决策不同。
现在,大多数 harness 都通过 MCP(model context protocol)连接外部工具。MCP 是一种标准方式,可将工具提供给支持该协议的任意 harness,因此一次集成即可连接多个 harness。在 VPS 上运行 MCP 服务器介绍了这方面的内容。
Agent harness 与 agent framework
每当有新的 harness 发布时,这个问题都会再次出现。不同厂商的说法并不一致,因此答案也常常不同。下面的定义更可靠。
framework 是供你导入的库。你编写循环,决定何时调用模型,并自行处理工具结果。LangChain 是一个典型示例:它提供构建模块,由你在代码中组装 agent。
harness 是供你运行的程序。循环已经编写完成,工具已经可用,权限模型也已有默认配置。你在第一次命令中就能获得一个可运行的 agent,然后再根据需要进行配置。
安装测试通常可以确定类型。如果安装后还需要编写代码,它就是 framework。如果安装后可以直接与它交互,它就是 harness。
这个边界确实存在争议,LangChain 自己的文档就是最清楚的证据。截至 August 2026,该文档将 Deep Agents 描述为构建在 LangGraph 之上的“固执己见、开箱即用”的 framework,而 langchain-ai/deepagents 仓库则称自己为“开箱即用的 agent harness”。这两种描述都成立。Deep Agents 是一个需要导入的 Python SDK(软件开发工具包),因此按安装测试应归类为库;但它提供了足够多的默认行为,因此用户也会像使用 harness 一样使用它。Microsoft 在 August 2026 将一个 harness 和托管 agent 推出为正式可用版本,这表明该词如今已经成为一个产品类别,而不只是术语。
因此,不妨改问一个更能预测工作量的问题。如果由你编写循环,那么循环也由你负责:包括重试、上下文裁剪、权限提示,以及操作记录。如果循环由产品提供,那么这些问题的处理方式就是继承自其他人的设计。这样启动会快得多,但后续修改会更困难。
聊天窗口与 harness 的区别
聊天窗口和 harness 都会显示模型输出。区别在于任务在哪台计算机上执行。在聊天窗口中,模型运行的代码会在供应商的沙箱内执行,处理您上传的文件;会话结束后,这些内容就会消失。harness 会在您启动它的计算机上运行工具,以启动它的用户身份执行,并访问真实文件;其环境中还包含您的真实凭据。
这两句话概括了它的全部优势和全部风险。代理终于可以执行实际任务。代理也可以删除这些任务成果。
实际有人在使用的 Harness
本列表特意标注为 19 August 2026。这个类别每周都在变化,任何汇总很快就会过时。
- Claude Code 和 Codex 是厂商提供的 Harness。它们以终端为主,默认绑定各自厂商的模型,并提供目前最完善的权限处理。Claude Code、Cursor、Codex 和 Copilot 的比较对它们进行了详细介绍。
- DeepSeek Harness (
dsh) 采用 MIT 许可证,基于一个核心理念构建:所有功能都是插件。因此,模型、工具、会话、沙箱和用户界面都可以替换。它在 19 August 2026 的 GitHub star 数约为 166,800,此时距离发布仅 6 天。 - Hermes 由 Nous Research 开发,是通用自治代理,而不是编码工具。它于 February 2026 以 MIT 许可证发布,并将记忆和技能存储在本机的 SQLite 数据库中。在 VPS 上自行托管 Hermes介绍了具体步骤。
- Omnigent 是元 Harness:它可以驱动包括 Claude Code 和 Codex 在内的其他 Harness,通过一个 API 提供共享会话、支出上限和操作系统级沙箱。将 Omnigent 用作多代理 Harness介绍了这些功能的实际价值。
- OneCLI 是面向团队的沙箱化 Harness,围绕一个网关构建。该网关会将真实凭据注入出站请求,因此代理本身始终只能看到占位密钥。
dsh 的快速入门只需执行一条命令。运行一次是了解 Harness 工作方式的最快方法。机器上需要安装 Node.js。
npx @deepseek-ai/dsh web该命令会在 http://127.0.0.1:3080 启动 Web UI(用户界面)。在依赖它之前,请先阅读 README,因为 dsh 明确将自身描述为开发者预览版,并说明后续会有破坏兼容性的变更。在 VPS 上运行 DeepSeek Harness介绍了服务器安装过程,为什么该地址以 127.0.0.1 开头解释了默认使用 loopback 地址的原因。
路由器位于 harness 之上
模型路由器是 harness 与提供商 API 之间的本地代理。Claude Code Router 是常见示例:它默认绑定到 127.0.0.1:3456,接收 Claude Code 原本会发送给其供应商的请求,并将请求转发到您配置的提供商。harness 不知道其中发生了变化。
路由器之所以存在,是因为模型可以替换,因此它们很好地证明了本文的核心观点。路由器也会集中风险,因为代理可以看到每个提示,并持有每个提供商的密钥。应将其视为基础设施,而不是便利工具。harness 保存 API 密钥和模型设置的位置 是下移一层后的同一个问题。
Harness 在 VPS 上运行时的变化
当 Harness 从笔记本迁移到租用的服务器后,会有 4 点变化。
合上笔记本盖后它仍会运行。 长时间任务不会因通勤或电池耗尽而中断。在 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.serviceloginctl enable-linger 是很多人会漏掉的部分。如果没有它,systemd 会在您的最后一个 SSH(安全 Shell)会话关闭后立即停止用户服务。因此,您注销后 agent 就会退出,而且不会输出任何错误。在 systemd 下无终端运行 dsh 中包含该单元文件。当一个会话已经在服务器上运行后,再启动第二个会话不会增加额外成本;同一台服务器上的两个 Claude Code 会话可以相互发送消息,因此您早上启动的会话可以将任务交给另一个会话,而无需手动转发。
它会保存您的密钥。 Provider key 现在存储在该服务器上的配置文件中。检查哪些用户可以读取该文件:
ls -l ~/.config以您的用户身份运行的任何进程都可以读取该文件,包括 agent 以及 agent 选择运行的任何程序。
它可以访问您的其他计算机。 如果 VPS 与其他服务器位于同一私有网络中,agent 就可以通过网络路由访问这些服务器。这正是使用 VPS 的目的,同时也构成了影响范围。
无论您身在何处都可以访问它。 大多数 Harness 会提供 Web UI,并且出于安全原因,通常会将其绑定到 loopback。检查您的配置:
ss -tlnp | grep 3080127.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 才开始体现价值。
这一领域的大多数项目都还很新。截至 August 2026,dsh 在自己的 README 中仍标注为 developer preview;其他项目的变化也很快,你今天编写的配置文件下个月可能就需要修改。因此,应保持设置小型且可复现,并记录所做的更改。同样的克制也适用于循环内部:将 agent 引导到可行的最小更改的 skill,可以让你在无人值守运行结束时实际读懂 diff。先在一台服务器上部署一个 harness,只给它一项任务和一个权限范围狭窄的 key。等这项任务连续一周都稳定运行后,再扩大其访问权限。当前值得运行的自托管 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 都可以在笔记本电脑上运行。服务器会带来四个变化:合上笔记本盖后,agent 仍会继续运行;密钥可以保存在一台始终开机的机器上;agent 可以访问您的其他服务器;您可以从任何设备返回同一个会话。每一点也都涉及安全问题,因此应为 agent 分配独立的用户账户,并让任何 Web UI 仅绑定到 127.0.0.1。
可以在同一个 harness 中使用其他模型吗?
通常可以,这正是 harness 的定义性特征。大多数 harness 都允许您在配置中指定模型名称和 base URL,因此将其指向另一个提供商只需修改配置,无需重写程序。如果 harness 不支持直接切换,本地路由器(例如 Claude Code Router)可以放在 harness 和提供商之间,负责转换请求,并默认绑定到 127.0.0.1:3456。请谨慎配置此代理,因为它可以看到每个提示词并持有所有密钥。