1. 飞牛EVO2 上跑 Hermes-Agent,为什么值得折腾
飞牛EVO2 是一台很适合放在家里角落长期开机的 NAS 小主机,fnOS 自带 Docker 应用中心,点几下就能把容器引擎装好。Hermes-Agent 是一个能长期驻留、带记忆和工具调用能力的智能体框架,把它跑在 EVO2 上,相当于给家里添了一个随时在线的 AI 助手:可以接微信、飞书,也能自己读写工作目录里的文件。
但真正动手时,很多人会卡在同一个地方:模型 Key 太散。OpenAI 一个 Key、DeepSeek 一个 Key、通义千问又一个 Key,每个都要写进环境变量,容器一多就乱成一锅粥,改一个模型要翻好几个配置文件。这篇就聚焦飞牛EVO2(fnOS)上用 Docker 部署 Hermes-Agent 的完整落地路径,重点解决多模型 Key 分散、环境变量混乱的问题,给出可复制的 docker-compose.yml 与 config.toml 骨架,并用 TaoToken 统一 Key/API 通道接入,最后附上容器启动后验证 Agent 连通性的具体命令和报错排查动作。
适合谁看:手里有飞牛EVO2、已经装好 Docker、想跑一个长期在线 Agent 但被 Key 管理劝退的人。全程小白友好,命令可以直接抄。
2. 前置准备:TaoToken 统一 Key 与 fnOS 环境
2.1 为什么用 TaoToken 收口 Key
传统做法是把每个厂商的 Key 分别塞进环境变量,比如OPENAI_API_KEY、DASHSCOPE_API_KEY、DEEPSEEK_API_KEY。问题是 Hermes-Agent 的 config.toml 里每换一个模型就要改一处 base_url 和 key,容器重建后环境变量还得重新对一遍。
TaoToken 的思路是提供一个统一的 API 通道,你只需要一个 Key,就能在同一个入口下切换不同模型。对 Hermes-Agent 来说,config.toml 里只认一个base_url和一个api_key,模型名换一下就行,环境变量从五六个压缩成一个。官网入口在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 基址是 https://taotoken.net/api 。
2.2 拿 Key 与确认环境
登录后进入控制台,在 API Keys 页面新建一个 Key,复制保存。这个 Key 后面会写进 config.toml,不要直接贴在 docker-compose 的 environment 里明文暴露,建议放.env文件。
fnOS 这边确认三件事:Docker 容器引擎已在应用中心安装并运行;/docker共享文件夹可写;EVO2 预留 ≥8GB 空闲内存、≥10GB 磁盘空间。内存不够时 Hermes-Agent 加载模型工具链会 OOM,这点别省。
注意:TaoToken 是合规的 API 聚合通道,本文所有配置都走官方 API 地址,不涉及任何网络代理类操作。
3. 可复制配置:docker-compose.yml 与 config.toml 骨架
3.1 目录结构
先在 fnOS 文件管理里进入/docker共享文件夹,新建hermes-agent,里面再建data和config两个子目录:
/docker/hermes-agent ├── docker-compose.yml ├── .env ├── data/ # 持久化记忆、数据库、工作目录 └── config/ └── config.tomldata挂给容器的/opt/data,config挂给配置目录,这样容器重建数据不丢。
3.2 docker-compose.yml
version: "3.8" services: hermes: image: nousresearch/hermes-agent:latest container_name: hermes-agent restart: always ports: - "58000:8000" volumes: - ./data:/opt/data - ./config:/opt/config env_file: - .env environment: - TZ=Asia/Shanghai - USER_ID=0 - GROUP_ID=0 user: "root:root" command: gateway run network_mode: bridge关键点:env_file把 Key 从 compose 里剥离出来,user: "root:root"解决 fnOS 上挂载目录的 Permission denied,command: gateway run让容器起来就跑网关。
3.3 .env 文件
TAOTOKEN_API_KEY=sk-你的TaoToken密钥 TAOTOKEN_BASE_URL=https://taotoken.net/api3.4 config.toml 骨架
这是 Hermes-Agent 的主配置,模型、API、端口都在这里。统一走 TaoToken 后,结构清爽很多:
[gateway] host = "0.0.0.0" port = 8000 [model] provider = "openai_compatible" base_url = "https://taotoken.net/api" api_key = "${TAOTOKEN_API_KEY}" model_name = "gpt-4o-mini" temperature = 0.7 max_tokens = 4096 [memory] db_path = "/opt/data/state.db" workspace = "/opt/data/workspace" [logging] level = "info" path = "/opt/data/logs"provider用openai_compatible是因为 TaoToken 的接口兼容 OpenAI 格式,Hermes-Agent 直接认。想换模型只改model_name一行,比如换成deepseek-chat或qwen-plus,Key 和 base_url 都不用动,这就是统一通道的价值。
4. 启动容器与验证 Agent 连通性
4.1 启动
在 fnOS 桌面打开 Docker,切到 Compose,新增项目,名称hermes-agent,路径选/docker/hermes-agent,粘贴上面的 compose 内容,勾选创建后立即启动。或者直接 SSH 进 EVO2:
cd /docker/hermes-agent docker compose up -d docker logs -f hermes-agent日志里看到gateway listening on 0.0.0.0:8000就说明网关起来了。
4.2 验证连通性
先测容器内到 TaoToken 的通道是否通:
docker exec -it hermes-agent curl -s https://taotoken.net/api/models \ -H "Authorization: Bearer $TAOTOKEN_API_KEY"返回模型列表 JSON 就说明 Key 和网络都正常。再测 Agent 本身:
curl -s http://127.0.0.1:58000/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-4o-mini", "messages": [{"role": "user", "content": "你好,报一下你的模型名"}] }'能返回一段正常回复,说明 Hermes-Agent 已经通过 TaoToken 打通了模型。如果要在浏览器里直接对话调试,可以用模型对话页面快速验证同一个 Key 是否可用。
4.3 初始化配置
首次启动后进容器终端跑一次初始化脚本:
docker exec -it hermes-agent bash ./setup-hermes.sh脚本会引导你确认模型和网关配置。因为 config.toml 已经写好,这里直接选跳过或确认即可。完成后data目录下会生成state.db、SOUL.md、workspace等文件,这些就是 Agent 的记忆和人格载体。
5. 本篇常见报错排查
5.1 bash: hermes: command not found
setup-hermes.sh是单独建的环境,直接敲hermes找不到。进虚拟环境即可:
source /opt/hermes/venv/bin/activate或者关掉当前终端重开一个,默认会加载该环境。
5.2 Permission denied: '/opt/data/.env'
fnOS 挂载出来的文件权限和容器内用户不一致。两种解法,一是给目录放权:
chmod -R 777 /docker/hermes-agent/data二是像上面 compose 那样强制user: "root:root",从根上避免。
5.3 网关配置好微信后不回答
多半是旧网关进程没退干净,端口被占。强制重启:
hermes gateway run --replace5.4 识别不了中文文件夹或文件名
在.env里补上编码环境变量:
LANG=C.UTF-8 LC_ALL=C.UTF-8然后docker compose down && docker compose up -d重建容器。
5.5 模型返回 401 或 404
401 一般是 Key 没读到,检查.env里变量名和 config.toml 的${TAOTOKEN_API_KEY}是否一致;404 多半是base_url写成了带/v1的路径,TaoToken 的基址就是https://taotoken.net/api,不要自己加后缀。
6. 长期跑 Agent,Key 管理这样收口
把 Hermes-Agent 跑在飞牛EVO2 上,真正的省心点不在部署那十分钟,而在后面几个月的维护。多模型 Key 分散时,每次换模型都要动环境变量、重建容器、重新对配置,出错概率极高。用 TaoToken 统一通道后,config.toml 里只有一处 base_url 和一处 api_key,换模型就是改一行model_name,容器都不用重启。
如果你打算长期跑编码类或 Agent 类任务,可以了解下 Coding Plan,它更适合高频调用的场景;日常接入和排障的细节都在接入文档里,遇到报错先翻文档比瞎试快得多。Key 统一了,剩下的就是让 Agent 安安静静在 EVO2 上干活。