Hermes Flightplan #1:打造全天候运行的 Telegram AI Agent(附完整代码)

@witcheer
英语3周前 · 2026年6月22日
111K
232
34
5
759

TL;DR

本指南详细介绍了如何在 VPS 或 Mac 上部署 Hermes AI Agent,内容涵盖 Telegram 集成、崩溃后自动恢复机制,以及使用 Nous Portal 进行安全设置。

你想要一个可以在手机上发消息的 AI Agent,一个在你合上笔记本电脑后仍在运行、重启后还能自动回来的 Agent?Hermes Agent 就能做到:它作为一个网关运行,你可以通过 Telegram 与它对话,一旦正确配置,它就能在崩溃或断电后自动重启。

我在两台机器上搭建了相同的环境:一台便宜的云 VPS 和桌面上的 Mac Mini,这样我就能完整地记录下整个过程,不遗漏任何步骤。这是一条固定的路线。你只需要在两个地方根据机器类型修改命令:安装命令,以及保持网关运行的部分。中间的所有步骤都是完全相同的。

以下所有内容都在我自己的硬件上运行过。Linux 路径使用的是 Hetzner CX23(x86,2 vCPU,4GB RAM,40GB 磁盘),运行 Ubuntu 24.04.4 LTS;Mac 路径使用的是 Mac Mini M4,运行 macOS 15。两者都运行 Hermes Agent v0.16.0。

最终你将拥有

  • 已安装的 Hermes Agent,以普通用户身份运行,而非 root
  • 一个你可以通过手机发送消息的 Telegram 机器人,仅限你的账户使用
  • 作为托管服务运行的网关,因此能在崩溃或重启后自动恢复
  • 在 VPS 上,一个加固的服务器:仅密钥 SSH 登录,禁止 root 登录,配置了防火墙

选择你的服务器

VPS 是最便宜的入门方式。任何拥有 4GB RAM 和大约 20GB 可用磁盘的 x86 机器都能运行;我使用的是 Hetzner CX23,每月 7.79 美元(Hetzner 美国定价,2026-06-18)。租用它,它就能始终保持在线。

另一种选择是你已经拥有的 Mac。任何保持通电的 Apple Silicon Mac 都能工作,除了机器本身外,运行成本为零。代价是 macOS 上的持久化层配置更繁琐,我会在最后部分介绍。

你需要在自己机器上有一个 SSH 密钥(如果没有,运行 ssh-keygen -t ed25519),一个 Telegram 账户,以及一个供 Agent 使用的模型。本指南指向 Nous Portal,它使用 OAuth 认证,因此无需在文件中保存 API 密钥。Hermes 需要一个至少拥有 64k 上下文的模型。

步骤 1:准备服务器

在 VPS 上

在你的服务商处创建服务器:Ubuntu 24.04,一个 x86 实例(不要用 Arm,参见成本说明),并在创建时粘贴你的 SSH 公钥。

一个全新的公网服务器在部署 Agent 之前需要几分钟的加固。本指南中的 secure-box.sh 脚本可以一次性完成:apt 升级、创建 2GB 交换文件、创建一个带有你密钥的非 root sudo 用户、仅密钥 SSH 登录并禁止 root 登录,以及一个仅允许 SSH 的防火墙。编辑脚本顶部的两个变量,将其复制到服务器,然后以 root 身份运行:

bash
1scp secure-box.sh root@<你的VPS-IP>:
2ssh root@<你的VPS-IP> 'bash secure-box.sh'

这个 Ubuntu 镜像默认启用了密码认证,尽管我在创建服务器时使用了 SSH 密钥。脚本会将其关闭。在关闭 root 会话之前,打开第二个终端并确认新用户可以登录,这样即使出错也不会把你锁在外面:

bash
1ssh hermes@<你的VPS-IP>

从现在开始,你将以 hermes 用户身份操作,而不是 root。

在 Mac 上

无需加固步骤。这是你自己网络上的机器,不是公网服务器。如果你还没有安装 Homebrew,请先安装(安装程序在下一步会用到它),然后就可以开始了。

步骤 2:安装 Hermes

安装只需一条命令,在两台机器上相同,以普通用户身份运行:

bash
1curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash
2source ~/.bashrc
3hermes --version

安装程序会检测你的操作系统,并将自己的工具链(uv、Python 3.11、Node.js 22、ripgrep、ffmpeg、用于浏览器工具的 Playwright Chromium)下载到 ~/.hermes 目录中,因此它绝不会影响你的系统 Python。在我的 Hetzner 服务器上,它安装了 Hermes Agent v0.16.0 和 Python 3.11.15。

这是最耗时的步骤。在 VPS 上,磁盘使用量从 1.2GB 增加到 7.8GB,大约增加了 6.6GB,其中大部分是浏览器引擎和 Node。计划预留 20GB 的可用空间,就不用担心了。如果通过没有终端的纯 SSH 命令运行,安装程序会显示“设置向导已跳过(无可用终端)”,这没问题,设置是下一步。

在 Mac 上运行相同的命令,但有一个小问题:先安装 Homebrew。有了 Homebrew,安装程序会拉取 git 及其依赖项,无需提示。如果没有 Homebrew,它会回退到 Apple 的命令行工具,这可能会弹出一个需要你点击的 macOS 对话框,而对话框在 SSH 会话中是无法处理的(这是安装程序 macOS 分支中的情况)。之后,流程与上面相同。

步骤 3:指向一个模型

bash
1hermes setup --portal

这是针对 Nous Portal 的 OAuth 认证:它会打印一个 URL 和一个代码,你在浏览器中批准后,服务器就能与模型通信,而无需将 API 密钥保存在文件中。Nous Portal 有免费套餐,我整个操作都在免费模型上运行。如果你想使用自己的提供商,运行 hermes model 并选择一个;密钥随后会保存在 ~/.hermes/.env 中。

步骤 4:与它对话

在 VPS 上

一旦你的 SSH 连接断开,前台会话也会随之终止。tmux 可以保持会话存活:在 tmux 中启动,分离后,它就会持续运行。

bash
1sudo apt-get install -y tmux
2tmux new -s hermes # 然后,在 tmux 内部:hermes

使用 Ctrl-b 然后按 d 分离,之后可以从任何地方重新连接:

bash
1ssh hermes@<你的VPS-IP>
2tmux attach -t hermes

交互式 Agent 首次启动需要一些时间。我的大约花了 30 秒加载模型和技能,然后才出现提示符。一旦启动,斜杠命令就可以使用了。

/goal 是一个值得展示的命令:它设置一个长期目标,Agent 会在多次对话中持续努力,并且每次对话后都会有一个评判模型检查目标是否完成。

bash
1/goal 使用 shell 工具检查这台机器的总 RAM 和可用磁盘空间,然后在一行中报告两者,并标记目标完成

我的 Agent 自己运行了 shell 命令,并在大约 15 秒后返回了结果:VPS 总 RAM:3.7Gi,可用磁盘空间:28G。这就是 Agent 使用自身工具的能力。

请区分两个概念:tmux 可以在 SSH 连接断开后保持交互式会话,但不能在重启后保持。对于需要重启后仍然存活的无值守网关,你需要一个托管服务,也就是步骤 6。

在 Mac 上

你正坐在机器前,所以可以直接在终端中运行 hermes。如果你通过笔记本电脑 SSH 连接,tmux 仍然有用,但在这里是可选的。

步骤 5:Telegram 网关

这部分在两台机器上是完全相同的。创建一个机器人:在 Telegram 上给 @BotFather 发消息,发送 /newbot,然后复制令牌。从 @userinfobot 获取你的数字用户 ID。然后配置网关:

bash
1hermes gateway setup

选择 Telegram,粘贴令牌,并将允许的用户设置为你自己的数字 ID,这样只有你能与它对话。令牌会保存在 ~/.hermes/.env 中,其余配置保存在 ~/.hermes/gateway.json 中。

设置只写入配置,不会启动任何东西,所以机器人保持静默,这常常让人困惑:此时还没有任何东西在轮询 Telegram。先在前台启动一次,检查它是否能连接:

bash
1hermes gateway run

你需要在日志中看到:

bash
1gateway.run: Connecting to telegram...
2[Telegram] Connected to Telegram (polling mode)
3gateway.run: ✓ telegram connected

轮询模式意味着网关主动连接 Telegram;没有任何东西会连接到你的服务器,这就是为什么防火墙除了 SSH 之外不需要开放任何入站端口。给你的机器人发消息;它应该会回复。然后按 Ctrl-C 停止前台网关,因为你不能同时有两个东西轮询同一个令牌,下一步会把它作为服务运行。

步骤 6:让它能在重启后存活

这是两台机器唯一不同的地方。

在 VPS 上:systemd

hermes gateway install 将网关注册为一个 systemd 服务,这样它就能在崩溃后重启,并在重启后自动恢复。在这个版本中,安装程序会询问两个 [Y/n] 问题,并且没有跳过它们的标志。如果通过非交互式 SSH 命令运行(这在编写脚本时很常见),它得不到回答,就会中止,什么也不安装。通过标准输入提供答案:

bash
1printf 'n\nY\n' | hermes gateway install

这两个问题是“现在启动网关吗?”和“在登录/启动时自动启动?”。n 然后 Y 的意思是:现在不要启动,但要在启动时启用它。安装程序还会启用用户会话驻留,这允许用户服务在你登录之前运行。确认一下,因为这是实现“重启后存活”而不是仅仅“注销后存活”的关键:

bash
1loginctl show-user $USER -p Linger # 期望:Linger=yes

启动它并检查状态:

bash
1hermes gateway start
2systemctl --user status hermes-gateway

你期望看到 active (running)NRestarts=0。在我的服务器上,网关使用了大约 280MB,整个机器大约使用了 556MB,在 4GB 内存下很轻松。

现在进行真正的测试。重启,然后不要碰它:

bash
1sudo reboot

我的服务器大约在 15 秒后恢复,网关自动启动,重新连接到 Telegram,并回复了下一条消息,且保留了重启前的完整对话历史。这就是全部意义所在。

在 Mac 上:launchd 和看门狗

macOS 使用 launchd,而不是 systemd,并且有一个陷阱。在 macOS 15 和 Hermes v0.16.0 上,hermes gateway start 可能无法注册 launchd 服务,并会静默回退到一个无人监管的后台进程。你会看到:

bash
1Bootstrap failed: 5: Input/output error
2⚠ launchd cannot manage the gateway on this macOS version (launchctl exit 5)
3✓ Started gateway as a background process instead
4 It will NOT auto-start at login or auto-restart on crash.

如果你之前有一个正常工作的 launchd 任务,这个命令会卸载它,而回退方案在第一次崩溃或重启之前都能正常运行,之后你的 Agent 就会消失,没有任何通知。原始的 launchctl 命令在 CLI 失败时仍然有效,包括通过 SSH:

bash
1launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/ai.hermes.gateway.plist
2launchctl print gui/$(id -u)/ai.hermes.gateway | grep state # 期望:state = running

plist 文件会在登录时启动网关,但不会在崩溃后重启。一个 cron 看门狗可以弥补这两个缺陷,而且 cron 可以在无需登录的情况下在启动时运行。本指南提供了 gateway-watchdog.sh 脚本;它每 5 分钟检查一次网关进程是否存活,如果不在就重新启动它。将其安装到计划任务中:

bash
1(crontab -l 2>/dev/null; echo '*/5 * * * * $HOME/scripts/gateway-watchdog.sh >/dev/null 2>&1') | crontab -

我亲眼目睹了这个流程在我自己的 Mac Mini 上恢复了一个降级的网关。重启它,并确认网关在五分钟内无需登录就能恢复。

验证你的设置

  1. 服务已启动:在 Linux 上运行 systemctl --user status hermes-gateway(应显示 active (running)),或在 macOS 上运行 launchctl print gui/$(id -u)/ai.hermes.gateway | grep state(应显示 state = running
  2. 给你的机器人发消息:它会回复你,并忽略任何不在你允许用户列表中的人
  3. 在 Linux 上,运行 loginctl show-user [$USER](https://x.com/search?q=%24USER&src=cashtag_click) -p Linger 应显示 Linger=yes
  4. 重启服务器,等待,然后在不重新登录的情况下再次给你的机器人发消息:它应该会回复

成本

在 VPS 上,服务器是唯一的开销。我的是 Hetzner CX23,每小时 0.012 美元,每月上限 7.79 美元(Hetzner 美国定价,2026-06-18;欧盟的 CX22 配置相同且更便宜)。

在 Mac 上,这是你已经拥有的机器,无需额外服务。在这两种情况下,模型都可以免费使用 Nous Portal 的免费套餐。

这里,内存不是限制因素:网关使用了大约 280MB,整个服务器大约 556MB,所以 1GB 内存绰绰有余。磁盘才是真正的限制:安装大约需要 6.6GB,所以 1GB 或 10GB 的镜像会很紧张,给它 20GB。并且使用 x86,这是最安全的选择。

自己动手运行,以及下一步

两台机器都有完整的指南和确切的脚本,可以直接运行:

现在,你拥有了一个在 Telegram 上始终在线、并且能在重启后存活的 Agent。

下一个 Flightplan 将在此基础上构建:定时任务,只在有重要事情时才给你发消息;一个由 Agent 读写、并通过 Git 同步的工作区;以及一个草稿与审批流程,确保每个公开操作都有人类参与。

感谢阅读

一键保存

使用 YouMind AI 深度阅读爆款文章

保存原文、追问细节、总结观点,并在一个 AI 工作空间里把爆款文章沉淀成可复用笔记。

了解 YouMind
写给创作者

把你的 Markdown 变成干净的 𝕏 文章

图片上传、表格、代码块,往 𝕏 上手动重排太痛苦。YouMind 把整篇 Markdown 一键转成干净、可直接发布的 𝕏 文章草稿。

试试 Markdown 转 𝕏

更多可拆解样本

近期爆款文章

探索更多爆款文章