在 VPS 上用 Claude 构建 AI 智能体
把 Claude 当作大脑,把您的 VPS 当作躯干。了解 Messages API、工具调用和 MCP 如何协作,构建一个由您自己运行的 AI 智能体。
用 Claude 构建智能体意味着什么
用 Claude 构建智能体,意味着把 Claude 当作推理核心,而循环、工具和数据都放在您自己的服务器上。Claude 负责决定做什么,您的 VPS 负责执行。您把任务和当前状态发给 Claude,Claude 回复的要么是一个答案,要么是使用您某个工具的请求;您的代码运行该工具并把结果发回,如此循环,直到任务完成。这里的智能是您通过互联网调用的一项服务,围绕它的一切都归您所有。
这种分工正是它的魅力所在。您无需自己运行模型,就能获得前沿级别的推理能力,同时又完全掌控智能体能接触到什么,因为工具运行在您自己拥有的硬件上。如果您已经写过第一个 Claude 程序,在 VPS 上构建第一个 Claude 应用的指南介绍了本文所依赖的基础。
Claude 是大脑:Messages API
每一次对 Claude 的调用都经过同一个接口,也就是 Messages API。您把到目前为止的对话和智能体可用的工具列表发过去,Claude 把它的下一条消息发回来。那条消息要么是最终答案,要么是调用某个工具的请求。在自己动手搭建这条路上,并没有一个单独的“智能体 API”:工具调用只是这个接口的一项功能,而围绕它的循环由您自己来运行。
Claude 在两次调用之间是无状态的,也就是说它自己什么都不记得。每个请求都携带完整的对话。您的代码保存历史记录,并在每一轮都把它发过去。与其说这是一种限制,不如说是一种设计选择:因为状态存放在您的服务器上,您可以精确决定 Claude 看到什么,而任务的任何内容都不会被存放在您无法掌控的地方。
工具调用就是智能体循环
Claude 的智能体循环说起来很简单。您发出一个包含您工具的请求。Claude 读取任务,如果需要采取行动,就回复一个工具调用请求,指明一个工具并填好它的输入。您的代码运行该工具,然后在下一个请求中把结果发回给 Claude。Claude 读取结果,要么再请求一个工具,要么写出它的最终回复。当它不再请求工具时,任务就完成了。
您可以用几行代码手写这个循环,很多人也确实这么做,因为它一目了然、易于掌控。官方 SDK 也提供了一个工具运行器来替您驱动这个循环:您提供工具函数,SDK 负责调用 Claude、运行您的工具、把结果喂回去这一来一回,直到 Claude 完成。无论哪种方式,形态都是一样的。运行器只是省去了您自己写循环的工夫。
三种构建方式,以及哪些适合 VPS
构建 Claude 智能体有三种方式,它们的区别在于您要自己运行多少机器部件。
第一种是您自己的代码用您自己的工具去调用 Claude API。您编写循环,或者使用 SDK 的工具运行器,并把整套东西托管在您的 VPS 上。这是常见的选择,因为它让您完全掌控工具、数据和安全,而且它作为一个普通程序运行在您的服务器上。本文大部分内容都假定采用这条路。
第二种是 Claude Agent SDK。这就是编程智能体 Claude Code,被打包成一个供您在其上构建的库。它自带一个完整的智能体循环,以及用于读写文件、运行 shell 命令和搜索的内置工具,因此您不必从头拼装这些。它同样运行在您自己的服务器上,当您想要一个能干的文件与 shell 智能体、又不想自己搭建框架时,它非常适合 VPS。一个会读文件、运行 shell 命令的智能体,在无人值守运行之前需要有约束,在服务器上安全运行 Claude Code介绍了权限系统、沙箱以及各种隔离方案。
第三种是托管智能体(Managed Agents),由 Anthropic 运行循环,并托管一个供智能体工具执行的沙箱。这是最省心的选项:您需要运维的东西少得多,但智能体的工作区位于 Anthropic 的基础设施上,而不是您的 VPS 上。当您想把运维工作降到最低、又不需要工具运行在自己机器上时,就选它。至于另外两种,您的服务器就是智能体的家园,这正是本文其余部分要讲的。
用 MCP 连接工具
无论您选择哪条路,您都会想把智能体连接到真实系统,而模型上下文协议(Model Context Protocol,MCP)是干净利落的做法。MCP 是一个开放标准,用于把工具和数据暴露给智能体。您不必为每个服务手写集成,而是把 Claude 指向一个已经把这些能力呈现为工具的 MCP 服务器。您可以把 MCP 服务器作为小型服务运行在同一台 VPS 上,每个只拥有它所需的访问权限,这一点我在在 VPS 上运行 MCP 服务器中有介绍。
选择一个模型
Claude 提供了多个模型,选择哪一个是在能力、速度和成本之间的权衡。在撰写本文时,主流选择有 Claude Opus 4.8(claude-opus-4-8),面向高难度推理和长时间智能体运行的能干的默认选项;Claude Sonnet 5(claude-sonnet-5),一个更便宜、更快的均衡选项,在许多任务上都接近 Opus;以及 Claude Haiku 4.5(claude-haiku-4-5),最快也最便宜,适合简单、高频的步骤。它们之上是 Claude Fable 5(claude-fable-5),能力最强的模型,面向最苛刻的工作。请在代码中使用准确的模型标识符,不要在后面加上日期。
一个实用的模式是把它们混用。让更便宜的模型处理例行的工具调用,让更强的模型处理艰难的决策。因为模型在您的请求里只是一个字符串,切换只是改一行的事,所以不妨从一个能干的默认选项起步,再在速度或成本比最后一点质量更重要的地方向下调整。
在 VPS 上把它作为加固服务运行
一个智能体只有持续运行才有用,只有被约束住才安全。在 VPS 上,这两点都来自把智能体作为一个加固的系统服务来运行,而不是您在终端里手动启动的程序。作为服务,它开机自启,崩溃后自动重启,并把日志写入 journal。加固之后,它以一个只拥有所需访问权限的非特权用户身份运行,这样一个 bug 或一条糟糕的指令就有了上限。
最重要的一条规则,是把您的 Claude API 密钥保留在服务器端。这个密钥为每一次调用付费并授权,因此它应放在一个只有智能体所属用户可读的文件里,作为环境变量加载进服务,而绝不放进代码、放进仓库,或任何浏览器能触及的地方。在这里为您的智能体生成一个完整、加固的服务单元:
然后把服务器本身收尾。把 SSH 设为仅密钥登录,并锁定您用于管理的账户,做法见在 VPS 上加固 SSH。如果您更愿意在搭建过程中通过一个交互式会话来驱动智能体,在 VPS 上用 tmux 运行 Claude Code是个不错的搭配。而如果您想了解这一切背后的概念,又不把它们绑定到某一个模型上,姊妹指南在 VPS 上构建您自己的 AI 智能体梳理了这些基础。
如果您想要的是一个终端里的编程助手,在 VPS 上运行编程 AI 智能体介绍了 Aider 和 Goose。
FAQ
构建智能体应该用哪个 Claude 模型?
从 Claude Opus 4.8(claude-opus-4-8)这个能干的默认选项起步,再从那里调整。Claude Sonnet 5(claude-sonnet-5)对大多数工作更便宜、更快,Claude Haiku 4.5(claude-haiku-4-5)最适合简单、高频的步骤,而 Claude Fable 5(claude-fable-5)是应对最难任务的最强模型。一个常见做法是用更便宜的模型处理例行步骤,用更强的模型处理艰难决策,因为切换只是改一行的事。
整个智能体是运行在我的 VPS 上,还是运行在 Anthropic 那边?
这取决于所采用的方式。如果您对着 Claude API 编写自己的循环,或者使用 Claude Agent SDK,智能体就完全运行在您的 VPS 上,只有模型调用会发往 Anthropic。如果您使用托管智能体,Anthropic 运行循环并托管工具执行的沙箱,那么运行在您服务器上的部分就更少。要让智能体运行在您自己的机器上,请选前两种之一。
Claude API 和 Claude Agent SDK 有什么区别?
Claude API 就是原始的 Messages 接口:您发送一段对话和一些工具,然后由您来编写围绕它的智能体循环,或者用 SDK 的工具运行器来驱动它。Claude Agent SDK 是一个更高层的库,是为在其上构建而打包的 Claude Code,自带一个完整的循环以及内置的文件、shell 和搜索工具。当您想自己定义一切时用 API,当您想要一个能干的智能体又不必自己拼装框架时用 Agent SDK。
我如何在服务器上保护好 Claude API 密钥的安全?
把它保留在服务器端,并让它远离您的代码。把它存放在一个只有智能体运行所用账户可读的文件里,作为环境变量加载进服务,绝不把它提交到仓库或暴露给浏览器。因为每个对 Claude 的请求都是从您的服务器发出的,密钥无需送达用户的设备,这正是服务器端运行的智能体比嵌入客户端应用的智能体更容易保护的原因。
用 Claude 构建智能体需要我自己托管模型吗?
不需要。用 Claude 时,模型是您通过 API 调用的一项托管服务,因此没有什么需要跑在 GPU 上。您的 VPS 运行智能体循环、工具和数据,而推理发生在 Anthropic 那边。这正是让一台不起眼的服务器也能运行一个能干智能体的原因。如果您想要一个完全本地的模型,那是姊妹指南《在 VPS 上构建您自己的 AI 智能体》所介绍的自托管路线。