1. 为什么要把 Hermes Agent 常驻在 NAS 上很多人第一次接触 AI Agent都是在浏览器里开一个网页问几句关掉下次再重新打开。这种用法本身没问题但它有个前提你得主动去找它。而真正让 Agent 变得有用的转折点是它变成一个常驻服务——你不需要专门打开某个页面它就在那里随时能通过你日常用的聊天工具触达。Hermes 就是这样一个开源 AI Agent 项目。它支持终端、Web 控制台和消息平台三种交互入口可以长期运行在一台在线设备上把来自不同入口的消息交给同一个 Agent 处理。而 NAS 恰好是家里最适合承担这个角色的设备它本来就 24 小时在线已经具备 Docker、网络服务和远程管理能力不需要你再单独准备一台专用电脑。我这次用的是一台刷好飞牛 NAS ARM 版的 RK3566 小主机。它的性能不算强但正好可以用来验证一个很实际的问题像这种低功耗小主机能不能稳定承担 Agent 的常驻入口角色。整个落地路径我拆成四层来验证——Hermes 本体能不能跑起来、模型能不能接上、微信能不能变成日常入口、人在外面能不能远程管理 Web 控制台。这四层相互配合但每一层都可以单独验证出问题时也容易定位。这篇文章会给出可复制的 Hermes 配置片段、TaoToken 统一 Key 与 API 通道的 endpoint 和鉴权填写方式以及用微信收发消息验证 Agent 常驻的完整检查清单。如果你手上已经有 NAS、小主机或 N1 这类长期在线的设备希望把 AI Agent 变成日常服务这套路径可以直接跟做。2. TaoToken 统一 Key 与 API 通道前置准备在把 Hermes 跑起来之前有一个容易被忽略但很关键的点模型接入的通道。原文里用的是 DeepSeek 官方 Key这当然可以但如果你后续想换模型、想在多个 Agent 之间共用一套鉴权、或者想让本地和远程管理走同一条 API 通道那么用一个统一的 Key 管理入口会省很多事。我这次用的是 TaoToken 来做这件事。TaoToken 的定位是统一的大模型 API 通道官网地址是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 入口是 https://taotoken.net/api 。它的价值在于你只需要维护一套 Key就能在 Hermes、Cline、Claude Code 等不同工具之间复用同一套鉴权配置不用每换一个工具就重新申请一遍 Key、重新填一遍 endpoint。具体到 Hermes 这边你需要准备三样东西Base URL、API Key、Model ID。这三件套是后面所有配置的基础缺一不可。Base URL 填 TaoToken 的 API 入口地址API Key 在控制台的 API Keys 页面生成Model ID 则根据你想用的模型来填。如果你还没生成 Key可以先到 https://taotoken.net/api-keys 创建一个生成后复制保存好后面配置 Hermes 时会用到。这里有个细节值得提前说清楚Hermes 初始化向导里会让你选择 provider。如果你直接用 DeepSeek 官方就选 DeepSeek 并填官方 Key如果你想走 TaoToken 统一通道就在自定义 provider 里填 TaoToken 的 Base URL 和 Key。两种方式都能跑通区别在于后续换模型时走统一通道只需要改 Model ID不用重新申请 Key。对于打算长期跑、可能会换模型的场景统一通道更省心。另外如果你后续打算用 Coding Plan 做长期编码或 Agent 任务可以在 https://taotoken.net/coding-plan 了解套餐如果只是想先验证模型对话效果可以直接用模型对话页面 https://taotoken.net/chat 试一下。接入文档在 https://taotoken.net/doc 里面有各工具的详细配置说明遇到不确定的字段可以对照查。3. 可复制的 Hermes 配置片段与部署命令这一节给出可以直接复制的配置片段和部署命令。整个部署分两步先用脚本把 Hermes 本体跑起来并完成初始化再配置消息平台接入微信。先确认飞牛 NAS 的 Docker 服务已经开启然后在【系统设置】→【SSH】里把 SSH 打开。接着在电脑上按 Win X 选择终端管理员打开 PowerShell用 ssh 连上 NASssh n1192.168.50.212连上后切换到 root 用户输入密码时不显示sudo -i然后执行部署脚本完成 Hermes 本体安装并进入初始化向导curl -fsSL https://gitee.com/jun-wan/script/raw/master/fnos-hermes/fnos-hermes.sh -o /tmp/fnos-hermes.sh chmod x /tmp/fnos-hermes.sh /tmp/fnos-hermes.sh脚本启动后直接回车进入初始化向导等待镜像拉取完成。拉取完成后选择快速开始Quick setup。进入 Select provider 后如果你走 TaoToken 统一通道选择自定义 provider 并填入以下三件套{ base_url: https://taotoken.net/api, api_key: sk-你的TaoToken密钥, model: deepseek-chat }如果你直接用 DeepSeek 官方就在 provider 里选 DeepSeek然后到 https://platform.deepseek.com/api_keys 创建一个 Key 填进去模型保持默认的 deepseek-chat。消息平台这一步先选第二项暂时跳过这样可以先把模型与 Hermes 本体单独验证不把微信配置问题混进来。初始化完成后运行 Hermes 做一次实际对话hermes启动后用一条简单问题确认它能否正常回答你好你是谁你当前运行在什么操作系统上接入的是什么模型如果它能返回当前运行在 Docker 容器中并识别到接入的模型说明容器运行 模型接入 基础对话这一段已经跑通。输入/exit退出然后打开 Web 控制台验证http://192.168.50.212:9119终端能聊天只是一个入口9119 页面能否打开决定了后面远程管理是否有意义。到这里Hermes 本体和模型接入就完成了。接下来配置微信消息平台重新执行同一套部署脚本curl -fsSL https://gitee.com/jun-wan/script/raw/master/fnos-hermes/fnos-hermes.sh -o /tmp/fnos-hermes.sh chmod x /tmp/fnos-hermes.sh /tmp/fnos-hermes.sh输入 6 进入配置聊天平台网关选择 WeiXin 后回车提示是否开始扫码登录时直接回车。扫码连接完成后使用默认的配对审批模式禁用群聊消息然后使用当前连接账号。最后回到消息平台选择菜单选择 Done 退出。回到主菜单选择 8 重启 Hermes 服务。服务重启后先直接给 Hermes 发一条消息验证微信侧是否已经能触达 Agent。此时消息已经能触达但当前用户还需要完成配对审批。这个步骤说明微信连接成功和用户获得使用权限是两件事。回到菜单选择选项 10 执行容器内 Hermes 原生命令输入审批授权命令hermes pairing approve weixin QKHBWHAJ审批命令执行成功后这个微信用户就获得了配对授权。再发一条消息验证完整链路你好你是谁请你介绍一下你自己你都能干什么如果消息能正常返回说明 微信 → Hermes → 模型 → 微信回复 这条链已经跑通。4. 验证请求与成功结果检查清单配置完成后怎么确认整条链路真的通了我整理了一份检查清单按顺序逐项验证哪一步卡住就停在哪一步排查不要跳步。第一项容器运行状态。在 SSH 终端执行docker ps确认 Hermes 容器处于 Up 状态。如果容器没起来先看docker logs里的报错常见的是镜像拉取失败或端口占用。第二项终端对话。运行hermes后发一条消息确认能收到回复。如果终端里能对话说明模型接入没问题如果终端里就不通先排查 Base URL 和 Key 是否正确。第三项Web 控制台。浏览器打开http://你的NAS_IP:9119确认页面能正常加载。如果页面打不开但终端能对话检查 9119 端口是否被防火墙拦截或者容器端口映射是否正确。第四项微信触达。给 Hermes 发一条微信消息确认消息能到达 Agent。如果消息发出后没有任何反应检查微信网关是否配置成功、服务是否重启过。第五项配对审批。如果消息能到达但收不到回复大概率是用户还没完成配对审批。执行hermes pairing approve weixin 你的配对码完成授权。第六项完整链路。审批通过后再发一条消息确认能收到回复。到这里微信 → Hermes → 模型 → 微信回复 这条链就完整了。第七项公网 WebUI可选。如果你配置了 cpolar用公网地址访问 9119 页面确认能打开。注意这一项不影响微信消息链微信本身不依赖公网隧道。实测下来最容易卡住的是第五项配对审批。很多人看到消息发出去了、Agent 没回复就以为微信没连上其实只是用户权限没批。把连接成功和获得权限分开看排查思路会清晰很多。5. 常见报错排查401、local proxy failed、reading choices配置过程中会遇到几类典型报错这里逐个说清楚原因和排查方向。401 Unauthorized。这个最常见基本是 Key 的问题。先确认 API Key 有没有复制完整前后有没有多余空格。如果你走 TaoToken 统一通道确认 Base URL 填的是https://taotoken.net/api不要多加路径。如果 Key 是在别的工具里能用的、在 Hermes 里报 401检查一下是不是把 Key 填到了错误的 provider 字段里。还有一种情况是 Key 过期或被禁用到控制台重新生成一个再试。local proxy failed。这个报错通常出现在网络请求发不出去的时候。先确认 NAS 本身能正常访问外网在终端里curl https://taotoken.net/api看能不能通。如果 NAS 网络正常但 Hermes 容器里不通检查容器的网络模式是不是 bridge以及 DNS 配置是否正确。有些 NAS 的 Docker 默认 DNS 有问题可以在容器配置里手动指定 DNS。reading choices 相关报错。这类报错一般出现在模型返回格式不符合预期的时候。常见原因是 Model ID 填错了比如填了一个不存在的模型名或者填了带路径的完整名称。确认 Model ID 只填模型标识本身比如deepseek-chat不要带前缀。如果换了模型后出现这个报错先换回默认模型验证通道是否正常再逐步排查新模型的兼容性。OAuth 相关报错。如果你用的是需要 OAuth 授权的 provider报错通常和 token 刷新有关。检查授权是否过期重新走一遍授权流程。如果用的是 API Key 方式一般不会遇到 OAuth 问题。微信消息无回复。前面说过先区分消息没到达和到达了没权限。消息没到达就查网关配置到达了没回复就查配对审批。还有一个容易忽略的点群聊消息默认是禁用的如果你在群里 它没反应那是正常的私聊测试。排查时有个通用思路把链路拆成容器 → 模型 → 微信 → 公网四段每段单独验证。终端能对话说明容器和模型没问题微信能触达说明网关没问题公网能打开说明隧道没问题。哪一段断了就查哪一段不要一上来就怀疑整个配置。6. 远程管理与长期常驻的落地建议本地部署和微信接入完成后对于只打算通过微信调用 Agent 的人来说其实已经可以停下了。公网访问属于后续管理需求不是必须项。但如果你需要人在外面时打开 Web 控制台查看状态、调整设置可以再加一层内网穿透。这里用 cpolar 把 NAS 本地的 9119 端口映射到公网。在 SSH 终端执行安装命令sudo curl https://get.cpolar.sh | sh安装完成后查看服务状态sudo systemctl status cpolar状态显示 active (running) 就说明正常启动。浏览器访问http://你的NAS_IP:9200打开 cpolar Web UI登录后进入隧道管理把隧道指向 Hermes 的 9119 页面。创建完成后在在线隧道列表里能看到生成的公网地址。如果只是临时进入控制台随机地址够用如果准备长期保存书签可以配置固定二级子域名。在 cpolar 的预留页面保留一个二级子域名然后回到隧道编辑页把域名类型改为二级子域名填入保留的名称更新即可。地址越稳定越适合长期使用但也越应该考虑谁能打开这个控制台所以建议再加一层 HttpAuth。在隧道编辑页展开高级选项找到 HttpAuth 配置项填写用户名和密码格式是用户名:密码中间用英文冒号。设置完成后再次访问公网地址会先弹出认证窗口认证通过才能进入 Hermes WebUI。安全提醒HttpAuth 只是基础访问认证适合给个人测试环境增加一层保护。公网访问地址不要随意公开密码尽量设置复杂一些不要用 admin:123456 这类弱密码。回到常驻这件事本身整条链可以拆成四层Hermes 负责 Agent 本身和任务处理模型提供能力微信把 Agent 变成日常消息入口cpolar 只负责把 9119 Web 控制台提供到外部网络。这几层相互配合但不互相替代。先在终端确认 Hermes 能正常运行并识别模型再打开 9119 Web 控制台随后接入微信并通过配对审批完成真实对话。到了这一步即使不做公网穿透Hermes 已经可以作为一个常驻 AI 助手使用。如果你后续想扩展重点不应该是再接更多平台而是根据自己真正会反复使用的任务逐步增加值得长期保留的能力。一台原本就 24 小时在线的小设备多了一个持续运行、可以从微信随时调用的 Agent这才是这套方案真正的价值所在。需要生成 Key 或查看接入文档可以到 https://taotoken.net/api-keys 和 https://taotoken.net/doc 对照操作。