第五册:安装部署全攻略 —— 保姆级部署指南,让 Hermes 在你的机器上跑起来

本章你将学到:

  • 部署 Hermes 之前需要做的全部准备工作,像买电器前检查插座一样简单明了
  • 四种部署方式(本地常规部署、Docker 容器化部署、VPS 云服务器部署、无服务器部署)的完整步骤
  • ~/.hermes/ 目录结构的详细解读,搞清楚每个文件是干什么的
  • 安装后的自检、排障和基础配置方法
  • 如何安全地卸载、重装和升级 Hermes

注意

这一册是全书最「动手」的章节。建议你在阅读时打开电脑,跟着步骤一步步操作。遇到任何问题,都可以直接跳到第 7 章「运行状态自检与排障」查找解决方案。


1. 安装前的准备工作

1.1 系统要求总览

在把 Hermes 请进你的电脑之前,我们先来确认一下你的「房子」够不够大、够不够好。这就好比你要养一匹马,总得先有个马厩吧?

Hermes 对硬件的要求其实非常友好。它不像那些动辄需要 64GB 显存的本地大模型那样「挑食」,也不像某些企业级软件一样需要专用服务器。只要你有一台近五年内购买的电脑,基本上都能跑得起来。

最低配置要求

以下是运行 Hermes 的最低配置要求。达到这个配置,你就能顺畅地使用所有基础功能:

操作系统最低内存最低磁盘空间网络要求
macOS 12+ (Intel / Apple Silicon)4 GB RAM2 GB 可用空间稳定互联网连接
Linux (Ubuntu 20.04+ / Debian 11+ / Fedora 35+)4 GB RAM2 GB 可用空间稳定互联网连接
Windows 10/11 (通过 WSL2)8 GB RAM5 GB 可用空间稳定互联网连接

Tips

为什么 Windows 要求的内存和磁盘空间更高?因为 WSL2 本身需要额外运行一个轻量级的 Linux 虚拟机,所以会比原生 Linux 多占用一些资源。如果你的 Windows 电脑内存只有 8GB,建议关闭其他占用内存的大型软件后再运行 Hermes。

推荐配置

如果你想要更流畅的体验,尤其是在同时运行多个技能或处理大量文件时,建议达到以下配置:

操作系统推荐内存推荐磁盘空间备注
macOS 14+8 GB RAM5 GB 可用空间Apple Silicon (M1/M2/M3/M4) 体验最佳
Linux8 GB RAM5 GB 可用空间原生运行,性能最佳
Windows 11 + WSL216 GB RAM10 GB 可用空间确保 WSL2 分配至少 8GB 内存

注意

Hermes 本身并不在本地运行大语言模型(除非你接入 Ollama 等本地模型服务)。它主要是作为 Agent 的「大脑指挥官」,实际的推理计算是在你配置的远程 LLM 提供商(如 OpenAI、DeepSeek 等)的服务器上完成的。所以你的电脑主要负责运行 Hermes 的核心逻辑和工具调用,不需要特别强大的 GPU。

类比理解

你可以把 Hermes 想象成一个「智能电话总机」:

  • 你的电脑 = 总机设备本身(不需要特别高端,稳定运行就行)
  • 远程 LLM = 电话线另一端的客服专家(计算在对方那边完成)
  • 网络连接 = 电话线路质量(决定了你和专家沟通是否顺畅)

所以,只要你有一台能流畅上网的电脑,就能运行 Hermes。

1.2 网络环境检查与代理配置

网络环境是安装和使用 Hermes 的关键因素。因为 Hermes 需要连接到多个外部服务(LLM API、GitHub、Docker Hub 等),所以一个稳定的网络环境至关重要。

网络连通性自检

在安装之前,请先确认你的网络环境是否满足以下基本要求:

  1. 能够正常访问互联网(访问百度、谷歌等网站无障碍)
  2. 能够访问 GitHubgithub.com
  3. 能够访问 Python 包管理仓库pypi.org
  4. 能够访问 Node.js 包管理仓库registry.npmjs.org

你可以通过以下命令快速检查网络连通性:

# 测试 GitHub 访问
ping -c 3 github.com
 
# 测试 PyPI 访问
ping -c 3 pypi.org
 
# 测试 npm 仓库访问
ping -c 3 registry.npmjs.org

常见问题

Q:ping 不通 GitHub,怎么办?

A:如果你在国内,GitHub 访问不稳定是常见问题。有以下三种解决方案:

  1. 使用代理工具(VPN/Clash/Shadowsocks 等)并配置终端代理
  2. 修改 hosts 文件,使用 GitHub 的镜像 IP
  3. 使用国内的 Git 镜像源(如 Gitee)克隆仓库

国内用户的代理配置指南

对于国内用户,配置代理是确保安装顺利的重要步骤。以下是几种常见的代理配置方式:

方式一:终端临时代理(推荐安装时使用)

如果你使用的是 Clash 等代理工具,通常在本地会开启一个 HTTP/SOCKS5 代理端口(默认可能是 7890)。你可以在终端中临时设置代理:

# macOS / Linux - 临时设置 HTTP 代理(仅当前终端窗口有效)
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
 
# 如果你使用的是 SOCKS5 代理
export ALL_PROXY=socks5://127.0.0.1:7890
 
# Windows PowerShell - 临时设置代理
$env:http_proxy="http://127.0.0.1:7890"
$env:https_proxy="http://127.0.0.1:7890"

Tips

设置代理后,你可以用 curl -I https://github.com 测试代理是否生效。如果返回 HTTP 200 状态码,说明代理配置成功。

方式二:Git 配置代理

# 配置 Git 使用代理
git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890
 
# 验证 Git 代理配置
git config --global --get http.proxy
git config --global --get https.proxy
 
# 取消 Git 代理(安装完成后建议取消)
git config --global --unset http.proxy
git config --global --unset https.proxy

方式三:pip 配置代理

# 临时使用代理安装 Python 包
pip install --proxy http://127.0.0.1:7890 <package_name>
 
# 或者配置 pip 全局代理
pip config set global.proxy http://127.0.0.1:7890
 
# 使用国内镜像源(更推荐长期方案)
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

注意

安装完成后,建议取消全局代理配置,只在需要时使用临时代理。长期开启全局代理可能会影响某些国内服务的访问速度。

npm/yarn 镜像源配置

对于 Node.js 相关的依赖安装,国内用户强烈建议切换到淘宝镜像源:

# 查看当前 npm 源
npm config get registry
 
# 切换到淘宝镜像源
npm config set registry https://registry.npmmirror.com
 
# 验证切换成功
npm config get registry
# 应输出: https://registry.npmmirror.com
 
# 恢复官方源(如需)
npm config set registry https://registry.npmjs.org
 
# 如果你使用 yarn
yarn config set registry https://registry.npmmirror.com
 
# 如果你使用 pnpm
pnpm config set registry https://registry.npmmirror.com

Tips

淘宝镜像源(registry.npmmirror.com)是国内最稳定的 npm 镜像之一,与官方源同步频率很高。在 2022 年之后,原 registry.npm.taobao.org 已重定向到 registry.npmmirror.com,请使用新域名。

1.3 必备前置软件清单

Hermes 的安装依赖于几个核心软件。在开始安装之前,请确保你的系统上已经安装或准备安装以下软件。

前置软件总览

软件最低版本作用检查命令
Python3.11+Hermes 的核心运行环境python3 --version
Node.jsv22+前端界面和部分工具依赖node --version
Git2.30+克隆仓库和管理版本git --version
pip23.0+Python 包管理器pip3 --version

Python 3.11+ 的安装与验证

Python 是 Hermes 的运行基础。Hermes 的代码大量使用了 Python 3.11 引入的新特性(如 typing.SelfExceptionGroup 等),因此 Python 3.11 是硬性要求,3.10 及更低版本无法运行。

检查现有 Python 版本:

# macOS / Linux
python3 --version
 
# 某些系统可能需要使用 python 而不是 python3
python --version
 
# Windows (PowerShell)
python --version

如果你看到的版本号低于 3.11(如 Python 3.10.12),你需要升级 Python。

常见问题

Q:我的系统自带 Python 3.10,可以直接升级吗?

A:强烈建议不要直接覆盖系统自带的 Python!macOS 和 Linux 的系统工具依赖特定版本的 Python,直接覆盖可能导致系统不稳定。推荐使用 pyenv 或官方安装包来安装新版本的 Python,这样多个版本可以共存。

安装 Python 3.11+ 的推荐方式:

我们将在下一节的 macOS 和 Linux 安装流程中详细介绍 Python 的安装。这里先给出快速参考:

# macOS (使用 Homebrew)
brew install [email protected]
 
# Ubuntu/Debian
sudo apt update
sudo apt install python3.11 python3.11-venv python3.11-dev python3-pip
 
# Fedora
sudo dnf install python3.11 python3.11-devel

Node.js v22+ 的安装与验证

Node.js 主要用于 Hermes 的部分前端界面和工具链。虽然不像 Python 那样是核心依赖,但某些功能(如 Web 网关界面)需要 Node.js 支持。

检查现有 Node.js 版本:

node --version

如果版本低于 v22,建议升级。我们将在各平台的安装流程中介绍具体方法。

Git 的安装与验证

Git 用于克隆 Hermes 的代码仓库以及后续的更新操作。

git --version

如果系统提示找不到 git 命令,请按以下方式安装:

# macOS
xcode-select --install
 
# Ubuntu/Debian
sudo apt update
sudo apt install git
 
# Fedora
sudo dnf install git
 
# Windows
# 下载安装程序:https://git-scm.com/download/win

1.4 安装前自检清单(Checklist)

在正式开始安装之前,请逐项确认以下清单。这就像飞行员起飞前的检查单,每一项都关系到后续安装的顺利与否。

硬件与环境检查

  • 电脑剩余磁盘空间大于 5GB
  • 电脑内存大于 4GB(Windows 用户大于 8GB)
  • 操作系统版本符合要求(macOS 12+ / Ubuntu 20.04+ / Windows 10+)
  • 网络连接稳定,可以访问 GitHub

软件检查

  • Python 版本为 3.11 或更高(运行 python3 --version 确认)
  • Node.js 版本为 v22 或更高(运行 node --version 确认)
  • Git 已安装并可正常使用(运行 git --version 确认)
  • pip 可用(运行 pip3 --version 确认)

权限检查

  • 对主目录(~C:\Users\你的用户名)有写入权限
  • 可以运行 sudo/admin 命令(安装系统级依赖时可能需要)

国内用户额外检查

  • 已配置好代理工具(如 Clash/V2Ray/Shadowsocks)
  • 已配置 npm 国内镜像源(如淘宝镜像)
  • 已配置 pip 国内镜像源(如清华源)
  • 已测试代理可以正常访问 GitHub

信息准备

  • 已决定使用哪种部署方式(本地 / Docker / VPS / 无服务器)
  • 已准备好至少一个 LLM 提供商的 API Key(可以先准备 OpenRouter 的免费 Key)
  • 已注册好 GitHub 账号(用于后续的技能同步)

Tips

强烈建议在安装前把上述清单打印出来或抄在便签纸上,每完成一项就打一个勾。这样做看似多余,但能帮你避免 80% 的安装失败问题。我见过太多人因为「Python 版本不对」或「网络连不上 GitHub」而在安装第一步就卡住半天。

安装前环境检查脚本:

为了方便你快速完成自检,可以使用以下脚本:

#!/bin/bash
# save as: check-env.sh
 
echo "🔍 Hermes 安装前环境检查"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
 
# 检查 Python 版本
PYTHON_VERSION=$(python3 --version 2>/dev/null || python --version 2>/dev/null)
if [ -n "$PYTHON_VERSION" ]; then
    echo "✓ Python: $PYTHON_VERSION"
else
    echo "✗ Python: 未安装"
fi
 
# 检查 Node.js
NODE_VERSION=$(node --version 2>/dev/null)
if [ -n "$NODE_VERSION" ]; then
    echo "✓ Node.js: $NODE_VERSION"
else
    echo "✗ Node.js: 未安装"
fi
 
# 检查 Git
GIT_VERSION=$(git --version 2>/dev/null)
if [ -n "$GIT_VERSION" ]; then
    echo "✓ Git: $GIT_VERSION"
else
    echo "✗ Git: 未安装"
fi
 
# 检查磁盘空间
DISK_AVAILABLE=$(df -h ~ | awk 'NR==2 {print $4}')
echo "✓ 磁盘可用空间: $DISK_AVAILABLE"
 
# 检查内存
if command -v free &> /dev/null; then
    MEM_AVAILABLE=$(free -h | awk '/^Mem:/ {print $7}')
    echo "✓ 内存可用: $MEM_AVAILABLE"
fi
 
# 检查网络
echo ""
echo "🌐 网络检查:"
ping -c 1 github.com > /dev/null 2>&1 && echo "✓ GitHub 可访问" || echo "✗ GitHub 无法访问"
ping -c 1 pypi.org > /dev/null 2>&1 && echo "✓ PyPI 可访问" || echo "✗ PyPI 无法访问"
 
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "检查完成!如果有 ✗ 项,请先解决后再安装 Hermes。"

保存为 check-env.sh,然后运行:

chmod +x check-env.sh
./check-env.sh

2. 方式一:本地常规部署(推荐小白起步)

本地常规部署是最直接、最符合直觉的安装方式。它就是把 Hermes 直接安装在你的电脑上,就像安装微信或浏览器一样。对于刚接触 Hermes 的新手,我强烈推荐从这个方式开始。

注意

本地部署需要你的电脑在安装过程中保持联网状态,因为安装脚本会自动下载所需的 Python 包和依赖。

2.1 macOS 安装全流程

macOS 是 Hermes 开发团队主要使用的操作系统,因此 macOS 上的安装体验通常是最顺畅的。下面我会像手把手教你做一道菜一样,一步一步带你完成安装。

第一步:安装或更新 Homebrew

Homebrew 是 macOS 上最流行的包管理器,相当于 macOS 的「应用商店」。它让你可以用简单的命令安装各种软件,而不需要去官网下载安装包。

检查是否已安装 Homebrew:

brew --version

如果返回类似 Homebrew 4.x.x 的版本号,说明已经安装。如果提示命令不存在,则需要安装。

安装 Homebrew:

打开终端(Terminal),复制粘贴以下命令,按回车执行:

# 官方安装脚本
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

注意

安装 Homebrew 需要输入你的 macOS 用户密码(输入时不会显示字符,这是正常的)。安装过程可能需要 5-15 分钟,取决于你的网络速度。如果下载速度很慢,可能是网络问题,建议先配置好代理再执行。

安装完成后,根据终端提示,你可能需要运行以下命令来将 Homebrew 添加到你的 PATH:

# Apple Silicon Mac (M1/M2/M3/M4)
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
 
# Intel Mac
echo 'eval "$(/usr/local/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/usr/local/bin/brew shellenv)"

更新 Homebrew(如已安装):

# 更新 Homebrew 本身和软件包列表
brew update
 
# 升级已安装的软件包(可选,建议执行)
brew upgrade

Tips

Homebrew 就像是 macOS 的软件管家。以后你想安装任何开发工具(如 Python、Node.js、Git 等),都可以用 brew install 软件名 一键安装,再也不用去官网找下载链接了。

第二步:安装 Python 3.11

如前所述,Hermes 需要 Python 3.11 或更高版本。在 macOS 上,我们用 Homebrew 来安装。

# 安装 Python 3.11
brew install [email protected]
 
# 将 Python 3.11 链接到 PATH
brew link [email protected] --force
 
# 验证安装
python3 --version
# 应输出: Python 3.11.x

注意

如果你的系统上已经通过其他方式安装了 Python(如 Anaconda、pyenv 等),可能会出现版本冲突。建议使用 pyenv 来管理多个 Python 版本(见下文「进阶:使用 pyenv 管理 Python 版本」)。

进阶:使用 pyenv 管理 Python 版本(强烈推荐)

pyenv 是一个 Python 版本管理工具,让你可以在同一台电脑上安装和切换多个 Python 版本。这就像你手机里的「双卡双待」,不同的应用可以用不同的 Python 版本。

安装 pyenv:

# 通过 Homebrew 安装 pyenv
brew install pyenv
 
# 将 pyenv 初始化代码添加到 shell 配置文件
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
 
# 重新加载 shell 配置
source ~/.zshrc

使用 pyenv 安装 Python 3.11:

# 查看可安装的 Python 版本
pyenv install --list | grep "3.11"
 
# 安装 Python 3.11.9(选择最新的 3.11.x 版本)
pyenv install 3.11.9
 
# 设置全局默认 Python 版本
pyenv global 3.11.9
 
# 验证
python --version
# 应输出: Python 3.11.9

pyenv 常用命令速查:

# 查看已安装的 Python 版本
pyenv versions
 
# 在当前目录使用特定 Python 版本(仅当前文件夹有效)
pyenv local 3.11.9
 
# 在当前终端会话使用特定 Python 版本
pyenv shell 3.11.9
 
# 卸载某个 Python 版本
pyenv uninstall 3.10.12

Tips

强烈建议所有开发者都使用 pyenv 管理 Python 版本。它不仅能避免系统 Python 被污染,还能让你在不同项目中使用不同的 Python 版本。比如你的老项目需要 Python 3.10,而 Hermes 需要 3.11,用 pyenv 可以轻松切换。

第三步:安装 Node.js v22

# 通过 Homebrew 安装 Node.js
brew install node
 
# 验证安装
node --version
# 应输出: v22.x.x 或更高
 
# 同时验证 npm(Node.js 的包管理器)
npm --version

第四步:安装 Git

macOS 通常已经预装了 Git,但版本可能较老。建议通过 Homebrew 安装最新版:

# 安装/更新 Git
brew install git
 
# 验证
git --version

第五步:运行 Hermes 一键安装脚本

好了,前置软件都准备就绪,现在到了最激动人心的时刻——安装 Hermes 本身!

# 方式一:使用官方推荐的一键安装脚本(推荐)
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | sh
 
# 方式二:如果方式一网络不通,可以先克隆仓库再手动安装
git clone https://github.com/NousResearch/hermes.git ~/hermes
cd ~/hermes
pip install -e .

安装脚本执行过程详解:

当你运行安装脚本时,屏幕上会滚动显示大量信息。不要被这些密密麻麻的文字吓到,它们其实只是在告诉你「我正在做什么」。下面是每个阶段的含义:

阶段 1:环境检查(约 5 秒)

[INFO] 正在检查系统环境...
[INFO] Python 版本: 3.11.9 ✓
[INFO] Node.js 版本: v22.3.0 ✓
[INFO] Git 版本: 2.43.0 ✓

如果这一阶段报错,说明你的前置软件有问题。请根据错误信息回到前面的步骤检查。

阶段 2:创建目录结构(约 2 秒)

[INFO] 正在创建 ~/.hermes 目录...
[INFO] 创建子目录: database, skills, cron, logs, cache

阶段 3:安装依赖(约 2-5 分钟,取决于网络)

[INFO] 正在安装 Python 依赖...
  下载 package-a-1.0.0...
  下载 package-b-2.1.3...
  安装 package-a-1.0.0...

这一阶段最耗时,因为需要下载几十个 Python 包。如果网络不稳定,可能会出现超时或下载失败。遇到问题时,先检查网络连接,然后重新运行安装脚本(脚本支持断点续传)。

阶段 4:安装 CLI(约 10 秒)

[INFO] 正在安装 Hermes CLI...
[INFO] 安装路径: ~/.hermes/bin/hermes
[INFO] 已添加到 PATH: ~/.bashrc

阶段 5:生成配置(约 5 秒)

[INFO] 正在生成默认配置...
[INFO] 配置文件: ~/.hermes/config.yaml
[INFO] 人设文件: ~/.hermes/SOUL.md

安装完成后,建议新开一个终端窗口(或运行 source ~/.bashrc),然后验证 hermes 命令是否可用。

注意

一键安装脚本会自动完成以下操作:

  1. 检查系统环境(Python 版本、Node.js 版本等)
  2. 创建 ~/.hermes/ 目录结构
  3. 安装所需的 Python 依赖包
  4. 将 Hermes 二进制文件安装到 ~/.hermes/bin/,并自动加入系统 PATH
  5. 生成默认配置文件

安装完成后,Hermes 的可执行文件位于 ~/.hermes/bin/hermes。安装脚本会自动修改你的 shell 配置文件(~/.bashrc~/.zshrc)将 ~/.hermes/bin 加入 PATH。如果新开终端后仍提示找不到命令,请手动执行 source ~/.bashrc(bash 用户)或 source ~/.zshrc(zsh 用户)使配置生效。

整个过程通常需要 3-10 分钟,取决于你的网络速度。安装过程中请保持终端窗口打开,不要中断。

安装过程中的典型输出:

[INFO] 正在检查系统环境...
[INFO] Python 版本: 3.11.9 ✓
[INFO] Node.js 版本: v22.3.0 ✓
[INFO] 正在创建 ~/.hermes 目录...
[INFO] 正在安装 Python 依赖...
  正在下载 package-name-1.2.3...
  正在安装 package-name-1.2.3...
  ...
[INFO] 正在安装 Hermes CLI...
[INFO] 正在生成默认配置...
[SUCCESS] Hermes 安装完成!
[SUCCESS] 运行 `hermes setup` 开始初始配置。

看到 SUCCESS 字样,恭喜你,Hermes 已经成功安装到你的 Mac 上了!

第六步:验证安装

# 检查 Hermes 版本
hermes --version
 
# 或者
hermes -v
 
# 运行系统诊断
hermes doctor

如果 hermes doctor 显示所有检查项都是绿色通过,说明安装完全成功。如果有黄色警告或红色错误,请参考第 7 章进行排查。

2.2 Linux 安装全流程(Ubuntu 22.04 为例)

Linux 是服务器部署的首选操作系统,也是很多开发者日常使用的系统。以下以 Ubuntu 22.04 LTS 为例,其他 Debian 系发行版步骤类似。如果你使用的是 Fedora/CentOS/RHEL,部分命令会有所不同(如 apt 换成 dnfyum)。

第一步:系统更新与依赖安装

# 更新软件包列表
sudo apt update
 
# 升级已安装的软件包
sudo apt upgrade -y
 
# 安装必要的构建工具和依赖
sudo apt install -y \
    curl \
    wget \
    git \
    build-essential \
    libssl-dev \
    zlib1g-dev \
    libbz2-dev \
    libreadline-dev \
    libsqlite3-dev \
    llvm \
    libncursesw5-dev \
    xz-utils \
    tk-dev \
    libxml2-dev \
    libxmlsec1-dev \
    libffi-dev \
    liblzma-dev

Tips

上面安装的一堆 lib*-dev 包是编译 Python 时需要的依赖。如果你使用 pyenv 从源码编译安装 Python,这些依赖必须提前装好,否则编译会失败。这就好比你要盖房子,得先把砖头和水泥准备好。

不同 Linux 发行版的依赖包名可能略有不同。如果你使用的是 Fedora/RHEL,对应的包名通常是 openssl-develzlib-devellibffi-devel 等。

第二步:安装 Python 3.11

Ubuntu 22.04 默认自带 Python 3.10,我们需要额外安装 Python 3.11。

# 添加 deadsnakes PPA(提供最新 Python 版本的第三方仓库)
sudo apt install -y software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa -y
sudo apt update
 
# 安装 Python 3.11 及配套工具
sudo apt install -y python3.11 python3.11-venv python3.11-dev python3.11-distutils
 
# 验证安装
python3.11 --version
# 应输出: Python 3.11.x
 
# 安装 pip for Python 3.11
curl -sS https://bootstrap.pypa.io/get-pip.py | python3.11
 
# 验证 pip
python3.11 -m pip --version

注意

在 Ubuntu 上,同时存在 python3(系统默认版本)和 python3.11(我们新安装的版本)。建议明确使用 python3.11pip(对应 Python 3.11 的 pip)来避免混淆。你也可以通过创建符号链接或别名来简化命令。

# 创建别名(添加到 ~/.bashrc)
alias python311='python3.11'
alias pip311='python3.11 -m pip'

第三步:安装 pyenv(推荐)

# 安装 pyenv
curl https://pyenv.run | bash
 
# 将 pyenv 添加到 ~/.bashrc
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo '[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
 
# 重新加载配置
source ~/.bashrc
 
# 使用 pyenv 安装 Python 3.11.9
pyenv install 3.11.9
pyenv global 3.11.9
 
# 验证
python --version

第四步:安装 Node.js v22

# 使用 NodeSource 安装脚本安装 Node.js 22
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs
 
# 验证
node --version
npm --version

第五步:运行 Hermes 安装脚本

# 一键安装
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | sh
 
# 或者手动安装
git clone https://github.com/NousResearch/hermes.git ~/hermes
cd ~/hermes
python3.11 -m pip install -e .

第六步:验证安装

hermes --version
hermes doctor

Fedora/RHEL 用户的差异说明:

如果你使用的是 Fedora、CentOS Stream 或 RHEL,以下命令需要调整:

Ubuntu/DebianFedora/RHEL
sudo apt updatesudo dnf update
sudo apt installsudo dnf install
libssl-devopenssl-devel
libffi-devlibffi-devel
build-essential@development-tools
ppa:deadsnakes/ppa使用 dnf module install python311

其余步骤(安装 Node.js、运行 Hermes 安装脚本)基本一致。

2.3 Windows WSL2 安装全流程

Windows 用户不能直接安装 Hermes(Hermes 不支持原生 Windows 环境),但可以通过 WSL2(Windows Subsystem for Linux)在 Windows 上运行一个完整的 Linux 环境,然后在其中安装 Hermes。

第一步:安装 WSL2

WSL2 是 Windows 10/11 内置的 Linux 子系统,让你可以在 Windows 上原生运行 Linux 程序,性能几乎和原生 Linux 一样。

自动安装(推荐 Windows 10 2004+ / Windows 11):

以管理员身份打开 PowerShell,运行:

# 自动安装 WSL2 和默认的 Ubuntu 发行版
wsl --install

运行后,系统会自动下载并安装 WSL2 和 Ubuntu。安装完成后,需要重启电脑

注意

如果命令提示 "WSL 需要更新其内核组件",请访问微软官方文档下载 WSL2 Linux 内核更新包: https://docs.microsoft.com/zh-cn/windows/wsl/install-manual#step-4---download-the-linux-kernel-update-package

手动安装(旧版 Windows):

# 启用 WSL
wsl --set-default-version 2
 
# 查看可用的 Linux 发行版
wsl --list --online
 
# 安装 Ubuntu 22.04
wsl --install -d Ubuntu-22.04

第二步:配置 Ubuntu 22.04

重启后,从开始菜单打开 "Ubuntu 22.04"。首次启动会要求你设置用户名和密码:

Enter new UNIX username: yourname
New password: [输入密码,不会显示]
Retype new password: [再次输入]

Tips

这个用户名和密码是你 Ubuntu 子系统的凭证,和 Windows 登录密码无关。请牢记这个密码,因为后续执行 sudo 命令时需要输入它。

更新 Ubuntu 系统:

sudo apt update && sudo apt upgrade -y

第三步:在 WSL 中安装 Hermes

WSL 中的 Ubuntu 就是一个完整的 Linux 系统,接下来的步骤和 2.2 节「Linux 安装全流程」完全一样:

# 安装依赖
sudo apt install -y curl wget git build-essential libssl-dev zlib1g-dev \
    libbz2-dev libreadline-dev libsqlite3-dev llvm libncursesw5-dev \
    xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
 
# 安装 Python 3.11
sudo apt install -y software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa -y
sudo apt update
sudo apt install -y python3.11 python3.11-venv python3.11-dev python3.11-distutils
curl -sS https://bootstrap.pypa.io/get-pip.py | python3.11
 
# 安装 Node.js 22
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs
 
# 安装 Hermes
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | sh
 
# 验证
hermes --version

第四步:Windows 文件系统访问与权限处理

WSL2 的一个强大之处在于,你可以无缝访问 Windows 的文件系统。Windows 的各个盘符在 WSL 中挂载在 /mnt/ 目录下:

# 访问 C 盘
cd /mnt/c
ls
 
# 访问 D 盘
cd /mnt/d
ls
 
# 访问你的 Windows 用户目录
cd /mnt/c/Users/你的Windows用户名/Desktop

注意

虽然 WSL 可以访问 Windows 文件,但 不建议在 /mnt/c 等 Windows 挂载目录下直接运行 Hermes。因为 Windows 和 Linux 的文件权限系统不同,可能会导致一些奇怪的问题。推荐的做法是:

  1. 在 WSL 的 Linux 主目录(~,即 /home/你的用户名)下运行 Hermes
  2. 如果需要处理 Windows 上的文件,可以把文件复制到 WSL 中,或者在 Hermes 中指定 Windows 路径

从 Windows 访问 WSL 文件:

在 Windows 文件资源管理器的地址栏输入 \\wsl$\Ubuntu-22.04\home\你的用户名,就可以直接浏览 WSL 中的文件。

最佳实践:创建共享工作目录

# 在 WSL 中创建一个工作目录
mkdir -p ~/workspace
 
# 同时在 Windows 的文档目录也创建一个快捷方式
# 在 Windows PowerShell 中执行:
# New-Item -ItemType SymbolicLink -Path "$env:USERPROFILE\workspace" -Target "\\wsl$\Ubuntu-22.04\home\你的用户名\workspace"

常见问题

Q:WSL2 占用内存太多,怎么限制?

A:WSL2 默认可以使用你电脑的大部分内存。如果你的电脑内存有限,可以在 Windows 用户目录下创建 .wslconfig 文件来限制内存使用:

# 文件路径: C:\Users\你的用户名\.wslconfig
[wsl2]
memory=8GB
processors=4
swap=2GB

保存后运行 wsl --shutdown 重启 WSL2 生效。


3. 方式二:Docker 容器化部署

Docker 是一种「集装箱化」技术,它把应用程序和它所有的依赖打包成一个标准化的「集装箱」(容器),无论你把这个集装箱运到哪台机器上,它都能以完全相同的方式运行。

这就好比搬家:传统方式是把你家里的每件家具分别搬过去,到了新家还要重新组装;Docker 方式则是把整个房子连地基一起打包运过去,到了目的地直接放下就能住。

3.1 Docker Desktop 安装

要使用 Docker 部署 Hermes,首先需要在你的电脑上安装 Docker Desktop。

macOS 安装 Docker Desktop

# 方式一:通过 Homebrew 安装(推荐)
brew install --cask docker
 
# 方式二:手动下载安装
# 访问 https://www.docker.com/products/docker-desktop/
# 下载 macOS 版本并安装

安装完成后,从「应用程序」中启动 Docker Desktop。首次启动可能需要你输入系统密码来授权。当 Docker 状态栏图标显示鲸鱼图标且没有警告标记时,说明 Docker 已经就绪。

Tips

Docker Desktop for Mac 在 Apple Silicon (M1/M2/M3/M4) 上运行时需要 Rosetta 2 支持。如果你的 Mac 是 Apple Silicon 且没有安装 Rosetta 2,系统会在第一次运行时自动提示安装。请点击「安装」并输入密码。

Windows 安装 Docker Desktop

  1. 访问 https://www.docker.com/products/docker-desktop/
  2. 下载 Windows 版本安装包
  3. 运行安装程序,按向导完成安装
  4. 安装过程中可能会要求启用 WSL2 集成,请勾选该选项
  5. 安装完成后重启电脑
  6. 启动 Docker Desktop,等待 Docker 引擎启动完成

注意

Windows 上的 Docker Desktop 依赖 WSL2 后端。如果你还没有安装 WSL2,请参考 2.3 节先安装 WSL2,或者在 Docker Desktop 安装过程中选择自动安装。

Linux 安装 Docker Desktop

# 以 Ubuntu 为例
# 1. 卸载旧版本(如有)
sudo apt remove docker docker-engine docker.io containerd runc
 
# 2. 安装依赖
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
 
# 3. 添加 Docker 官方 GPG 密钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
 
# 4. 添加 Docker 软件源
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
 
# 5. 安装 Docker Engine
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
 
# 6. 将当前用户加入 docker 组(免 sudo 使用 docker)
sudo usermod -aG docker $USER
 
# 7. 验证安装
docker --version
docker compose version

注意

将用户加入 docker 组后,需要 退出并重新登录(或重启电脑)才能免 sudo 使用 docker 命令。

3.2 拉取 Hermes 官方镜像

Docker 安装完成后,拉取 Hermes 的官方镜像:

# 拉取最新版本的 Hermes 镜像
docker pull nousresearch/hermes:latest
 
# 或者拉取特定版本
docker pull nousresearch/hermes:v1.2.0
 
# 查看已拉取的镜像
docker images | grep hermes

常见问题

Q:拉取镜像时速度很慢或超时,怎么办?

A:国内用户访问 Docker Hub 速度可能较慢。解决方案:

  1. 配置 Docker 使用国内镜像加速站。编辑 ~/.docker/daemon.json
{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ]
}

保存后重启 Docker Desktop。2. 使用代理拉取:

docker pull nousresearch/hermes:latest --proxy http://127.0.0.1:7890

镜像版本选择指南:

标签说明适用场景
latest最新稳定版大多数用户
v1.2.3特定版本需要版本锁定
nightly每日构建版想体验最新功能
slim精简版(无额外工具)资源受限环境

注意

latest 标签会随着新版本发布而更新。如果你需要稳定的生产环境,建议锁定到具体版本号(如 v1.2.3),避免自动更新带来的不兼容性。

3.3 容器运行与数据持久化

基础运行命令

# 运行 Hermes 容器
docker run -it --rm \
  --name hermes \
  -v ~/.hermes:/opt/data \
  -e OPENAI_API_KEY="your-api-key-here" \
  nousresearch/hermes:latest

让我们逐行解析这个命令:

  • docker run: 启动一个新容器
  • -it: 以交互式终端模式运行(i = interactive, t = tty)
  • --rm: 容器停止后自动删除(适合临时运行)
  • --name hermes: 给容器起个名字叫 hermes
  • -v ~/.hermes:/opt/data: 这是最关键的部分,将主机的 ~/.hermes 目录挂载到容器的 /opt/data 目录。这样容器里的数据会保存到你的主机上,即使删除容器也不会丢失。
  • -e OPENAI_API_KEY=...: 设置环境变量,传入 API Key
  • nousresearch/hermes:latest: 使用的镜像名称

数据持久化详解

-v ~/.hermes:/opt/data 这个参数是 Docker 部署中最需要理解的概念。让我用一个类比来解释:

想象容器是一个「临时办公室」,容器里的文件就像办公室里的便利贴。如果你不贴到墙上(挂载卷),容器一关,便利贴就全没了。-v 参数就是一面「魔法墙」,你把便利贴贴到这面墙上,即使办公室拆了重建,墙上的便利贴还在。

所以,一定要加 -v 参数,否则你的所有配置、对话记录、记忆数据都会在容器删除后消失。

# 先创建主机上的数据目录
mkdir -p ~/.hermes
 
# 运行容器并挂载数据卷
docker run -it --rm \
  --name hermes \
  -v ~/.hermes:/opt/data \
  nousresearch/hermes:latest

3.4 Docker Compose 方式(适合多服务编排)

如果你打算同时运行 Hermes 和其他服务(比如本地数据库、Web 界面等),使用 Docker Compose 会更方便。Docker Compose 让你可以用一个 YAML 文件定义和管理多个容器。

创建 docker-compose.yml 文件:

# docker-compose.yml
version: "3.8"
 
services:
  hermes:
    image: nousresearch/hermes:latest
    container_name: hermes
    restart: unless-stopped
    volumes:
      - ~/.hermes:/opt/data
      - ~/workspace:/workspace
    environment:
      - OPENAI_API_KEY=${OPENAI_API_KEY}
      - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
    stdin_open: true
    tty: true
    networks:
      - hermes-network
 
networks:
  hermes-network:
    driver: bridge

使用 Docker Compose 启动:

# 在 docker-compose.yml 所在目录执行
 
# 启动服务(后台运行)
docker compose up -d
 
# 查看运行状态
docker compose ps
 
# 查看日志
docker compose logs -f hermes
 
# 进入容器内部
docker compose exec hermes bash
 
# 停止服务
docker compose down
 
# 停止服务并删除数据卷(慎用!)
docker compose down -v

Tips

Docker Compose 是管理多容器应用的利器。上面的配置中:

  • restart: unless-stopped 表示容器会在 Docker 启动时自动运行(除非手动停止)
  • $&#123;OPENAI_API_KEY&#125; 会从环境变量或同目录的 .env 文件中读取
  • stdin_open: truetty: true 保证交互式终端正常工作

创建 .env 文件存储敏感信息:

# .env 文件(放在 docker-compose.yml 同目录,不要提交到 Git!)
OPENAI_API_KEY=sk-your-openai-key
ANTHROPIC_API_KEY=sk-your-anthropic-key
DEEPSEEK_API_KEY=sk-your-deepseek-key

注意

务必在 .gitignore 中添加 .env,防止 API Key 泄露!

3.5 容器管理常用命令

# 查看正在运行的容器
docker ps
 
# 查看所有容器(包括已停止的)
docker ps -a
 
# 停止容器
docker stop hermes
 
# 启动已停止的容器
docker start hermes
 
# 重启容器
docker restart hermes
 
# 删除容器
docker rm hermes
 
# 强制删除运行中的容器
docker rm -f hermes
 
# 查看容器日志
docker logs hermes
 
# 实时查看日志
docker logs -f hermes
 
# 进入运行中的容器
docker exec -it hermes bash
 
# 从容器内复制文件到主机
docker cp hermes:/opt/data/config.yaml ~/.hermes/config.yaml
 
# 从主机复制文件到容器
docker cp ~/.hermes/config.yaml hermes:/opt/data/config.yaml
 
# 查看容器资源使用情况
docker stats hermes

3.6 容器化的优缺点分析

优点

优点说明
环境隔离Hermes 的依赖不会和你的系统环境冲突
一键部署一条命令就能启动完整环境
便于迁移在任何支持 Docker 的机器上都能以相同方式运行
易于清理不想用了直接删除容器,不留痕迹
版本管理可以轻松切换 Hermes 的不同版本
多实例运行可以同时运行多个 Hermes 实例

缺点

缺点说明
学习成本需要了解 Docker 的基本概念和命令
资源开销Docker 本身会占用一些额外的系统资源
文件访问容器内外文件共享需要额外配置
GUI 限制某些图形界面功能在容器中可能受限
调试复杂出问题时的调试比本地部署复杂一些

Tips

对于新手,我建议先从「本地常规部署」开始,等熟悉 Hermes 的基本操作后再尝试 Docker 部署。但如果你已经有 Docker 使用经验,或者需要在一台机器上管理多个项目的环境,Docker 部署会是更好的选择。


4. 方式三:VPS 云服务器部署

VPS(Virtual Private Server,虚拟专用服务器)部署适合以下场景:

  • 你需要 Hermes 24/7 不间断运行
  • 你想从任何地方(手机、公司电脑等)访问你的 Agent
  • 你的本地电脑性能有限或网络不稳定
  • 你想搭建一个团队共享的 Hermes 实例

4.1 推荐 VPS 提供商

海外 VPS 推荐

提供商入门价格特点适合人群
Hetzner€4.51/月性价比极高、性能稳定、德国/芬兰机房预算有限但追求性能的用户
DigitalOcean$4/月界面友好、文档完善、全球多机房新手入门
Linode (Akamai)$5/月老牌厂商、网络稳定追求稳定性的用户
Vultr$2.50/月按小时计费、可一键部署多种应用短期使用或测试
AWS Lightsail$5/月AWS 生态、与其他 AWS 服务集成方便已有 AWS 经验的用户

国内云服务器推荐

提供商入门价格特点适合人群
阿里云 ECS¥99/年(学生/新用户)生态完善、文档丰富国内用户、需要备案
腾讯云 CVM¥99/年(新用户)性价比高、活动多国内用户
华为云 ECS¥99/年(新用户)企业级稳定性企业用户

Tips

如果你主要使用 Hermes 来处理中文内容和对接国内 API(如 DeepSeek、Kimi),强烈建议选择国内云服务器。网络延迟会显著影响对话体验。如果你主要对接 OpenAI、Anthropic 等海外 API,海外 VPS 的延迟反而更低。

对于个人学习和轻度使用,Hetzner 的 CPX11(1 vCPU / 2GB RAM / 40GB SSD)或 DigitalOcean 的 Basic Droplet(1 vCPU / 1GB RAM / 25GB SSD)完全够用,月费不到一杯奶茶钱。

4.2 服务器选型指南

Hermes 对服务器配置的要求很低:

最低配置(个人使用):

  • 1 vCPU
  • 1 GB RAM
  • 20 GB SSD 磁盘
  • 1 TB 月流量

推荐配置(多人使用或重度使用):

  • 2 vCPU
  • 4 GB RAM
  • 40 GB SSD 磁盘
  • 2 TB 月流量

注意

Hermes 本身的资源占用很低(空闲时内存占用通常小于 100MB)。服务器的配置主要取决于:

  1. 你同时运行多少个 Agent 实例
  2. 你是否在服务器上同时运行本地大模型(如 Ollama)
  3. 你的日志和数据存储量

如果不在服务器上跑本地模型,1GB 内存绰绰有余。

4.3 SSH 连接与安全配置

购买 VPS 后,你会收到一封包含服务器 IP 地址、用户名(通常是 root)和初始密码的邮件。这就像是收到了新房的钥匙——兴奋之余,别忘了先换锁、装监控。

首次连接服务器

# macOS / Linux 终端直接连接
ssh root@你的服务器IP
 
# 示例
ssh [email protected]
 
# 如果指定了非标准端口(如 2222)
ssh -p 2222 root@你的服务器IP

Windows 用户可以使用 PowerShell(Windows 10/11 自带 OpenSSH 客户端)或下载 PuTTY。

首次连接时会提示是否确认主机的指纹,输入 yes 即可:

The authenticity of host '123.456.789.0' can't be established.
Are you sure you want to continue connecting (yes/no)? yes

Tips

SSH 密钥指纹是服务器的「身份证」。第一次连接时,你的电脑会把服务器的指纹记录下来。如果将来连接时指纹变了,SSH 会警告你,这可能意味着服务器被中间人攻击了。所以第一次记录指纹时,请确保你连接的是正确的服务器。

基础安全配置

连接到服务器后,强烈建议立即进行以下安全加固:

1. 修改 root 密码(如果使用的是密码登录):

passwd

2. 创建普通用户(避免日常使用 root):

# 创建新用户
useradd -m -s /bin/bash hermes
 
# 设置密码
passwd hermes
 
# 将用户加入 sudo 组
usermod -aG sudo hermes
 
# 切换到新用户
su - hermes

注意

root 用户就像房子的万能钥匙,权力太大,一旦被盗用,攻击者可以为所欲为。日常使用普通用户 + sudo,就像平时用普通钥匙开门,只有需要的时候才用万能钥匙——这样即使普通钥匙丢了,损失也有限。

3. 配置 SSH 密钥登录(更安全):

在你的本地电脑生成 SSH 密钥对(如果还没有):

# 本地电脑执行
ssh-keygen -t ed25519 -C "[email protected]"
 
# 将公钥复制到服务器
ssh-copy-id hermes@你的服务器IP

然后在服务器上禁用密码登录:

# 编辑 SSH 配置文件
sudo nano /etc/ssh/sshd_config
 
# 修改以下配置
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
 
# 重启 SSH 服务
sudo systemctl restart sshd

注意

在禁用密码登录之前,务必确认密钥登录已经正常工作!否则你可能会把自己锁在服务器外面。建议新开一个终端窗口测试密钥登录,确认无误后再禁用密码登录。

4. 配置防火墙:

# Ubuntu/Debian
sudo apt install ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
 
# 查看防火墙状态
sudo ufw status

5. 安装 fail2ban 防止暴力破解:

# 安装 fail2ban
sudo apt install fail2ban
 
# 启动服务
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
 
# 查看封禁状态
sudo fail2ban-client status sshd

fail2ban 会自动监控 SSH 登录尝试,如果某个 IP 在短时间内多次登录失败,就会自动将其封禁一段时间。这就像是给大门装了一个智能保安,看到可疑人员反复尝试开锁就会自动报警。

4.4 在 VPS 上安装 Hermes

VPS 上的安装步骤和 2.2 节「Linux 安装全流程」基本一致:

# 1. 系统更新
sudo apt update && sudo apt upgrade -y
 
# 2. 安装依赖
sudo apt install -y curl wget git build-essential libssl-dev \
    zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev \
    llvm libncursesw5-dev xz-utils tk-dev libxml2-dev \
    libxmlsec1-dev libffi-dev liblzma-dev software-properties-common
 
# 3. 安装 Python 3.11
sudo add-apt-repository ppa:deadsnakes/ppa -y
sudo apt update
sudo apt install -y python3.11 python3.11-venv python3.11-dev python3.11-distutils
curl -sS https://bootstrap.pypa.io/get-pip.py | python3.11
 
# 4. 安装 Node.js 22
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs
 
# 5. 安装 Hermes
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | sh
 
# 6. 验证
hermes --version
hermes doctor

4.5 后台运行配置

在 VPS 上,你需要让 Hermes 在 SSH 断开后继续运行。以下是几种方式:

方式一:screen(最简单)

screen 是一个终端复用工具,可以让你在断开 SSH 后保持程序运行。

# 安装 screen
sudo apt install -y screen
 
# 创建一个新的 screen 会话
screen -S hermes
 
# 在 screen 中启动 Hermes
hermes
 
# 按 Ctrl+A,然后按 D, detach 会话(程序继续在后台运行)
# 注意:是先按 Ctrl+A,松开后再按 D
 
# 重新连接会话
screen -r hermes
 
# 查看所有 screen 会话
screen -ls
 
# 终止会话
screen -X -S hermes quit

Tips

screen 非常适合新手。它的学习成本几乎为零,几个命令就能满足基本的后台运行需求。唯一的缺点是如果服务器重启,screen 会话不会自动恢复。

方式二:tmux(功能更强大)

tmux 是 screen 的现代化替代品,功能更强大,界面更美观。

# 安装 tmux
sudo apt install -y tmux
 
# 创建新会话
tmux new -s hermes
 
# 在 tmux 中启动 Hermes
hermes
 
# 分离会话:按 Ctrl+B,然后按 D
 
# 重新连接会话
tmux attach -t hermes
 
# 查看所有会话
tmux ls
 
# 终止会话
tmux kill-session -t hermes

tmux 常用快捷键:

快捷键功能
Ctrl+B, D分离当前会话
Ctrl+B, C创建新窗口
Ctrl+B, N切换到下一个窗口
Ctrl+B, P切换到上一个窗口
Ctrl+B, 数字切换到指定窗口
Ctrl+B, %垂直分屏
Ctrl+B, "水平分屏

Tips

tmux 的分屏功能特别实用。你可以左边窗口运行 Hermes,右边窗口查看系统日志或编辑配置文件,一个终端窗口搞定所有操作。

4.6 域名绑定与反向代理(可选)

如果你想通过域名访问 Hermes 的 Web 界面,可以配置 Nginx 反向代理。这就好比你在一个大型写字楼里租了一间办公室(服务器),Nginx 就是前台——访客只需要知道公司名字(域名),前台会帮他们找到正确的办公室。

前提条件

  • 你已经购买了一个域名(如 yourdomain.com
  • 已经将域名解析到服务器的 IP 地址(在域名服务商的 DNS 管理中添加 A 记录)

安装和配置 Nginx

# 安装 Nginx
sudo apt install -y nginx
 
# 创建 Nginx 配置文件
sudo nano /etc/nginx/sites-available/hermes

在文件中写入:

server {
    listen 80;
    server_name yourdomain.com;
 
    location / {
        proxy_pass http://localhost:8080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_cache_bypass $http_upgrade;
    }
}

注意

上面的配置假设 Hermes 的 Web 界面运行在本地的 8080 端口。请根据你的实际配置调整 proxy_pass 的端口号。如果你不确定端口,可以查看 ~/.hermes/config.yaml 中的 gateway.web_port 配置项。

# 启用配置
sudo ln -s /etc/nginx/sites-available/hermes /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
 
# 安装 Certbot 获取免费 SSL 证书
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com
 
# 按照提示完成证书申请

配置完成后,你就可以通过 https://yourdomain.com 访问 Hermes 的 Web 界面了。

Tips

Certbot 的 SSL 证书有效期为 90 天,但会自动续期。你可以用以下命令测试续期是否正常:

sudo certbot renew --dry-run

如果你使用的是 Cloudflare 等 CDN 服务,需要在 Cloudflare 控制台中将 SSL/TLS 加密模式设为「完全(严格)」,并在源服务器上正确配置证书。

4.7 自动启动配置(systemd)

如果你希望 Hermes 在服务器重启后自动启动,可以使用 systemd 来管理。

创建 systemd 服务文件:

sudo nano /etc/systemd/system/hermes.service

写入以下内容:

[Unit]
Description=Hermes Agent
After=network.target
 
[Service]
Type=simple
User=hermes
WorkingDirectory=/home/hermes
Environment="HOME=/home/hermes"
Environment="PATH=/home/hermes/.local/bin:/usr/local/bin:/usr/bin:/bin"
ExecStart=/home/hermes/.local/bin/hermes chat
Restart=on-failure
RestartSec=5
 
[Install]
WantedBy=multi-user.target

注意

请根据你的实际安装路径调整 ExecStartEnvironment 中的路径。你可以用 which hermes 查看 hermes 命令的实际路径。

启用和启动服务:

# 重新加载 systemd 配置
sudo systemctl daemon-reload
 
# 设置开机自启
sudo systemctl enable hermes
 
# 启动服务
sudo systemctl start hermes
 
# 查看服务状态
sudo systemctl status hermes
 
# 查看日志
sudo journalctl -u hermes -f
 
# 停止服务
sudo systemctl stop hermes
 
# 重启服务
sudo systemctl restart hermes

日志轮转配置(防止日志占满磁盘)

Hermes 运行时间长了会产生大量日志。如果不加管理,日志文件可能占满整个磁盘。使用 Linux 自带的 logrotate 工具可以轻松解决这个问题。

# 创建 logrotate 配置
sudo nano /etc/logrotate.d/hermes

写入:

/var/log/hermes/*.log {
    daily
    rotate 14
    compress
    delaycompress
    missingok
    notifempty
    create 0644 hermes hermes
    sharedscripts
    postrotate
        systemctl reload hermes > /dev/null 2>&1 || true
    endscript
}

参数说明:

参数含义
daily每天轮转一次
rotate 14保留最近 14 天的日志
compress轮转后压缩旧日志
delaycompress延迟一天压缩,方便查看昨天日志
missingok日志不存在时不报错
notifempty空日志不轮转
# 测试配置是否正确
sudo logrotate -d /etc/logrotate.d/hermes
 
# 手动执行一次轮转
sudo logrotate -f /etc/logrotate.d/hermes

Tips

日志轮转就像定期清理房间——每天把旧报纸(日志)打包归档,只保留最近两周的。这样既不会丢失重要信息,又不会因为报纸堆满房间而无处下脚。对于长期运行的 VPS,这一步绝对不能省略。


5. 方式四:无服务器部署(进阶)

无服务器(Serverless)部署是近年来兴起的一种部署模式。它的核心理念是:你不需要管理服务器,只需上传代码,平台会自动为你分配计算资源并按实际使用量计费。

这就好比传统部署是你买一辆车(服务器),无论开不开都要付油费和停车费;无服务器部署则是打车,需要时叫车,用完即走,按里程付费。

5.1 Modal 部署方式

Modal 是一个专为 AI/ML 工作负载设计的无服务器平台。它特别适合部署像 Hermes 这样的 Agent 应用,因为它支持:

  • 快速启动的容器环境
  • 按需计费(按秒计费,不用时不花钱)
  • 内置的 GPU 支持(如果你需要运行本地模型)
  • 简单的 Python SDK

准备工作

  1. 注册 Modal 账号:https://modal.com/
  2. 安装 Modal CLI:
pip install modal
  1. 登录 Modal:
modal token new

这会打开浏览器让你授权,按提示完成即可。

部署 Hermes 到 Modal

创建一个 deploy_modal.py 文件:

import modal
 
# 定义 Modal 应用
app = modal.App("hermes-agent")
 
# 定义容器镜像
image = (
    modal.Image.debian_slim()
    .apt_install("git", "curl", "build-essential")
    .pip_install("hermes-agent")
)
 
# 定义持久化卷
volume = modal.Volume.from_name("hermes-data", create_if_missing=True)
 
@app.function(
    image=image,
    volumes={"/opt/data": volume},
    secrets=[modal.Secret.from_name("hermes-secrets")],
    timeout=3600,  # 1小时超时
)
def run_hermes(prompt: str):
    """运行 Hermes Agent"""
    import subprocess
    import os
 
    # 设置数据目录
    os.environ["HERMES_DATA_DIR"] = "/opt/data"
 
    # 运行 Hermes 命令
    result = subprocess.run(
        ["hermes", "-c", prompt],
        capture_output=True,
        text=True,
        timeout=300
    )
 
    return {
        "stdout": result.stdout,
        "stderr": result.stderr,
        "returncode": result.returncode
    }
 
@app.local_entrypoint()
def main():
    # 本地测试入口
    response = run_hermes.remote("Hello, what can you do?")
    print(response["stdout"])

配置 secrets:

# 创建 Modal Secret 存储 API Keys
modal secret create hermes-secrets \
  OPENAI_API_KEY=sk-your-key \
  ANTHROPIC_API_KEY=sk-your-key

部署:

# 部署到 Modal
modal deploy deploy_modal.py
 
# 调用函数
modal run deploy_modal.py

注意

Modal 的免费额度 generous(每月 $30 的额度),对于个人轻度使用完全够用。但如果你的 Agent 需要长时间运行(如监控任务),Modal 的超时限制可能不适合,此时应考虑 VPS 部署。

5.2 Daytona 部署方式

Daytona 是一个开源的开发环境管理平台,可以让你一键创建标准化的开发环境,并在任何地方访问。

准备工作

  1. 注册 Daytona 账号:https://www.daytona.io/
  2. 安装 Daytona CLI:
# macOS
brew install daytona
 
# Linux
curl -fsSL https://download.daytona.io/daytona/install.sh | bash
  1. 登录 Daytona:
daytona login

创建 Hermes 开发环境

# 创建新的工作区
daytona create hermes-workspace
 
# 选择基础镜像(推荐 Ubuntu 22.04)
# 然后 Daytona 会自动创建一个配置好的开发环境
 
# 进入工作区
daytona ssh hermes-workspace
 
# 在工作区内安装 Hermes(按 Linux 安装流程)
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | sh
 
# 配置 API Keys
hermes setup

Tips

Daytona 的优势在于它为你管理了所有环境配置。你可以在办公室电脑上开始工作,回家后在笔记本上继续,所有状态和文件都是同步的。它特别适合需要在多台设备间切换的开发者。

5.3 适用场景与成本分析

各种部署方式的成本对比

部署方式月成本(个人使用)适用场景运维复杂度
本地部署¥0个人学习、开发测试
Docker 本地¥0环境隔离、多版本管理
VPS (Hetzner)~¥3524/7 运行、远程访问
VPS (国内云)~¥8(新用户)国内 API 低延迟访问
Modal¥0-$30按需运行、AI 推理
Daytona¥0-$20多设备开发环境

选择建议

  • 纯新手入门:选择「本地常规部署」,零额外成本,遇到问题好排查
  • 开发者日常:选择「本地 + Docker」,兼顾开发便利和环境一致性
  • 需要远程访问:选择「VPS 云服务器」,DigitalOcean 或 Hetzner 性价比最高
  • 间歇性使用:选择「Modal 无服务器」,不用时完全免费
  • 团队协作:选择「VPS + systemd + Nginx」,稳定可控

Tips

对于绝大多数个人用户,我建议的搭配是:本地安装用于日常开发和测试,再配一台最便宜的 VPS(如 Hetzner CPX11,月费约 €4.51)用于 24/7 运行的自动化任务。这样一年的成本不到 500 元人民币,却拥有了完整的 Agent 工作流。

部署方式选择决策树:

如果你还是不确定该选哪种部署方式,可以用下面的决策树来快速判断:

你是第一次使用 Hermes 吗?
├─ 是 → 选择「本地常规部署」✓
└─ 否 → 你需要 24/7 不间断运行吗?
    ├─ 是 → 你有技术运维能力吗?
    │   ├─ 是 → 选择「VPS + systemd」✓
    │   └─ 否 → 选择「Docker + 托管平台」✓
    └─ 否 → 你需要多设备同步吗?
        ├─ 是 → 选择「Daytona」✓
        └─ 否 → 你需要环境隔离吗?
            ├─ 是 → 选择「Docker 本地」✓
            └─ 否 → 选择「本地常规部署」✓

各部署方式的优缺点总结:

部署方式最大优点最大缺点最佳用户
本地常规零成本、易调试电脑关机即停止新手、开发者
Docker环境隔离、易迁移需要学习 Docker有容器经验的用户
VPS24/7 在线、远程访问需要服务器运维知识需要长期运行的用户
Modal按需付费、零运维有冷启动延迟间歇性任务用户
Daytona多设备同步依赖第三方平台跨设备开发者

注意

无论选择哪种部署方式,数据目录 ~/.hermes/ 的结构和内容是完全一致的。这意味着你可以随时在不同部署方式之间迁移——比如在本地开发调试完成后,把整个 ~/.hermes/ 目录复制到 VPS 上,Hermes 会保持完全相同的状态和配置。


6. ~/.hermes/ 目录结构详解

Hermes 安装完成后,会在你的用户主目录下创建一个 ~/.hermes/ 文件夹。这个文件夹就像是 Hermes 的「家」,所有的配置、记忆、技能和数据都存放在这里。理解这个目录结构,对于后续的配置优化和故障排查至关重要。

6.1 完整目录树

安装完成后,~/.hermes/ 的默认结构如下:

~/.hermes/
├── config.yaml              # 主配置文件
├── SOUL.md                  # Agent 人设定义
├── MEMORY.md                # 全局记忆文件
├── USER.md                  # 用户信息文件
├── database/
│   ├── hermes.db            # SQLite 主数据库
│   └── vector.db            # 向量数据库(用于语义搜索)
├── skills/
│   ├── built-in/            # 内置技能
│   ├── custom/              # 自定义技能
│   └── downloaded/          # 从 Skills Hub 下载的技能
├── cron/
│   ├── jobs.yaml            # 定时任务定义
│   └── logs/                # 定时任务执行日志
├── logs/
│   ├── hermes.log           # 主日志文件
│   └── error.log            # 错误日志
├── cache/
│   ├── embeddings/          # 嵌入向量缓存
│   └── web/                 # 网页缓存
├── backups/
│   └── auto/                # 自动备份目录
├── sessions/
│   └── 2026-04/
│       └── session_*.json   # 会话历史文件
└── tmp/
    └── *.tmp                # 临时文件

6.2 每个文件和文件夹的用途详解

config.yaml —— 主配置文件

config.yaml 是 Hermes 的「中枢神经」,几乎所有的核心配置都在这里。安装完成后,会生成一个带有注释的默认配置文件。

# ~/.hermes/config.yaml
# Hermes 主配置文件
 
# === 核心设置 ===
core:
  # Agent 名称
  name: "Hermes"
 
  # 默认使用的模型提供者
  default_provider: "openrouter"
 
  # 默认模型
  default_model: "anthropic/claude-3.5-sonnet"
 
  # 对话语言
  language: "zh"
 
  # 日志级别: debug, info, warn, error
  log_level: "info"
 
# === 模型配置 ===
models:
  # 分层模型配置(详见第六册第 6 章)
  reasoning:
    provider: "anthropic"
    model: "claude-3.5-sonnet"
 
  execution:
    provider: "openrouter"
    model: "google/gemini-flash-1.5"
 
  fallback:
    - provider: "deepseek"
      model: "deepseek-chat"
    - provider: "openai"
      model: "gpt-4o-mini"
 
# === API Key 配置 ===
# 建议通过环境变量设置,不要在配置文件中硬编码
providers:
  openai:
    api_key: "${OPENAI_API_KEY}"
    base_url: "https://api.openai.com/v1"
 
  anthropic:
    api_key: "${ANTHROPIC_API_KEY}"
    base_url: "https://api.anthropic.com"
 
  deepseek:
    api_key: "${DEEPSEEK_API_KEY}"
    base_url: "https://api.deepseek.com"
 
  openrouter:
    api_key: "${OPENROUTER_API_KEY}"
    base_url: "https://openrouter.ai/api/v1"
 
  # Nous Portal:Nous Research 官方提供的统一订阅服务
  # 一个月费涵盖所有接入模型,无需单独购买各平台 Key
  nous:
    api_key: "${NOUS_API_KEY}"
    base_url: "https://portal.nousresearch.com/api/v1"
 
  # 智谱 GLM-5:国产大模型,中文理解优秀
  zhipu:
    api_key: "${ZHIPU_API_KEY}"
    base_url: "https://open.bigmodel.cn/api/paas/v4"
 
  # MiniMax M2.7:国产模型,性价比出色
  minimax:
    api_key: "${MINIMAX_API_KEY}"
    base_url: "https://api.minimax.chat/v1"
 
# === 记忆系统配置 ===
memory:
  # 会话记忆条数
  session_limit: 50
 
  # 持久化记忆开关
  persistent: true
 
  # 向量搜索 Top-K
  vector_top_k: 5
 
# === 工具配置 ===
tools:
  # 启用的工具列表
  enabled:
    - web_search
    - file_read
    - file_write
    - execute_shell
    - github
 
  # 禁用工具(优先级高于 enabled)
  disabled: []
 
# === 技能系统配置 ===
skills:
  # 自动技能发现
  auto_discover: true
 
  # 技能搜索路径
  paths:
    - "~/.hermes/skills/custom"
    - "~/.hermes/skills/downloaded"
 
# === 消息网关配置 ===
gateway:
  # Web 界面端口
  web_port: 8080
 
  # 启用平台
  platforms:
    - telegram
    - discord
 
# === 定时任务配置 ===
cron:
  # 定时任务开关
  enabled: true
 
  # 任务文件路径
  jobs_file: "~/.hermes/cron/jobs.yaml"

注意

YAML 文件对缩进非常敏感!必须使用空格(不能用 Tab),且同级别的配置项缩进必须一致。如果你的 config.yaml 格式有误,Hermes 启动时会报错。建议使用 VS Code 等编辑器的 YAML 插件来检查格式。

SOUL.md —— Agent 人设定义

SOUL.md 是 Hermes 最具特色的功能之一。它定义了你的 Agent 的「灵魂」——它的性格、说话方式、专业领域、行为准则等。

你可以把 SOUL.md 想象成演员拿到手的「角色剧本」。同一个 Hermes 程序,配上不同的 SOUL.md,可以变成完全不同的角色:一个严谨的程序员、一个耐心的老师、一个幽默的聊天伙伴……

# SOUL.md
 
# 这是 Hermes Agent 的人设定义文件
 
# 修改此文件后,Hermes 的行为和回答风格会随之改变
 
## 身份
 
你是一位名叫「墨离」的 AI 助手。
 
## 性格
 
- 沉稳、耐心、善于倾听
- 回答问题时先思考再开口,不急于给出结论
- 喜欢用类比和故事来解释复杂概念
- 偶尔会用温和的幽默调节气氛
 
## 专业领域
 
- Python 编程与软件架构
- 数据分析与可视化
- AI Agent 技术
- 中文写作与编辑
 
## 说话风格
 
- 使用中文回答,除非用户明确要求使用其他语言
- 避免使用过于学术化的术语,尽量通俗易懂
- 重要观点会用「>」引用格式强调
- 分点说明时喜欢用表格整理信息
 
## 行为准则
 
- 不确定的事情会坦诚告知,不编造信息
- 涉及代码时,总是提供完整的可运行示例
- 尊重用户隐私,不主动询问敏感信息
- 当用户情绪激动时,先安抚再解决问题
 
## 禁忌
 
- 不使用机器人口吻(如「作为一个人工智能助手」)
- 不重复用户的问题作为回答开头
- 不过度道歉

Tips

SOUL.md 的强大之处在于它是动态可更新的。在对话中,你可以直接对 Hermes 说「更新你的 SOUL.md,添加一个新的专业领域」,Hermes 会自动修改这个文件。这意味着你的 Agent 可以随着使用不断进化和个性化。

详细的 SOUL.md 编写指南请参阅第六册第 7 章。

MEMORY.md —— 全局记忆文件

MEMORY.md 是一个全局的、跨会话的记忆存储。与数据库存储的结构化记忆不同,MEMORY.md 是以纯文本 Markdown 格式存储的,方便你直接阅读和编辑。

# MEMORY.md
 
# 这是 Hermes 的全局记忆文件
 
# 这里存储的信息会在每次对话开始时自动加载
 
## 用户偏好
 
- 用户喜欢简洁的回答,不喜欢冗长的解释
- 用户是程序员,熟悉 Python 和 JavaScript
- 用户通常在晚上 9-11 点使用 Hermes
- 用户对 AI 伦理话题感兴趣
 
## 重要信息
 
- 用户的项目目录:`~/projects/my-startup`
- 用户常用的 API Key 别名:`openai_main``deepseek_backup`
- 用户的时区:Asia/Shanghai
 
## 待办事项
 
- [ ] 帮用户调研 MCP 协议的最新进展
- [ ] 记得提醒用户下周的代码评审会议

USER.md —— 用户信息文件

USER.md 存储关于你的基本信息,帮助 Hermes 更好地理解你的背景和需求。

# USER.md
 
# 用户信息
 
## 基本信息
 
- 称呼:王先生
- 职业:全栈开发者 / 独立创业者
- 所在地:中国,上海
 
## 技术栈
 
- 主要语言:Python、TypeScript
- 框架:React、FastAPI、Django
- 工具:VS Code、Docker、Git
 
## 使用场景
 
- 日常编程辅助和代码审查
- 技术文章写作
- 项目需求分析和文档撰写
- 学习新技术和框架

skills/ 目录

skills/ 目录存放所有的技能文件。技能是 Hermes 的功能扩展单元,每个技能定义了一组相关的工具和知识。

skills/
├── built-in/          # 内置技能(随 Hermes 安装)
│   ├── web_search/
│   ├── file_operations/
│   └── code_execution/
├── custom/            # 自定义技能(你自己创建的)
│   └── my_company_ops/
└── downloaded/        # 从 Skills Hub 下载的
    └── stock_analysis/

每个技能文件夹通常包含:

  • skill.yaml —— 技能元数据和配置
  • README.md —— 技能说明文档
  • tools/ —— 技能包含的工具定义
  • prompts/ —— 技能的提示词模板

cron/ 目录

cron/ 目录存放定时任务的配置和执行日志。

# ~/.hermes/cron/jobs.yaml
jobs:
  - name: "daily-news-summary"
    description: "每天早上 8 点总结科技新闻"
    schedule: "0 8 * * *"
    command: "搜索今天的科技新闻并总结要点"
    enabled: true
 
  - name: "weekly-report"
    description: "每周五下午生成周报"
    schedule: "0 17 * * 5"
    command: "读取本周的会议纪要,生成周报"
    enabled: false

database/ 目录

database/
├── hermes.db       # SQLite 主数据库
│   ├── sessions    # 会话表
│   ├── messages    # 消息表
│   ├── memories    # 记忆表
│   └── skills      # 技能元数据表
└── vector.db       # 向量数据库(Chroma 或 SQLite-vec)
    └── embeddings  # 文本嵌入向量

注意

这两个数据库文件包含了你的所有对话历史和记忆数据。在备份或迁移 Hermes 时,务必备份整个 database/ 目录。单个 hermes.db 文件在长期使用后可能会增长到几百 MB,这是正常现象。

logs/ 目录

logs/
├── hermes.log      # 主运行日志(INFO 级别及以上)
└── error.log       # 错误日志(ERROR 级别)

你可以用以下命令实时查看日志:

# 实时查看主日志
tail -f ~/.hermes/logs/hermes.log
 
# 实时查看错误日志
tail -f ~/.hermes/logs/error.log
 
# 搜索特定关键词
grep "ERROR" ~/.hermes/logs/hermes.log

6.3 目录结构总结表

路径类型用途是否必须备份
config.yaml文件主配置
SOUL.md文件人设定义
MEMORY.md文件全局记忆
USER.md文件用户信息
database/目录数据库是(最重要)
skills/custom/目录自定义技能
skills/downloaded/目录下载的技能否(可重新下载)
cron/jobs.yaml文件定时任务
logs/目录日志文件
cache/目录缓存文件
tmp/目录临时文件

目录结构类比理解:

你可以把 ~/.hermes/ 想象成一个人的「家」:

  • config.yaml = 这个人的「身份证和户口本」,记录了所有基本信息
  • SOUL.md = 这个人的「性格和职业设定」,决定了他说话的方式和专业领域
  • MEMORY.md = 这个人的「日记本」,记录了他记得的重要事情
  • USER.md = 这个人的「通讯录」,记录了他服务对象的信息
  • database/ = 这个人的「记忆宫殿」,存储了所有对话历史的完整细节
  • skills/ = 这个人的「工具箱」,里面各种技能就是他的各种工具
  • cron/ = 这个人的「闹钟和日程表」,提醒他什么时候该做什么
  • logs/ = 这个人的「工作日志」,记录了每天的工作情况
  • cache/ = 这个人的「便利贴墙」,随手记的东西,不重要但方便查阅

Tips

建议设置一个自动备份脚本,定期将 config.yamlSOUL.mdMEMORY.mdUSER.mddatabase/ 备份到云盘。详细的备份方法请参阅第 9 章「卸载与重装」。

一个实用的技巧:将 ~/.hermes/ 用 Git 进行版本控制(排除 database/logs/cache/tmp/ 目录),这样你可以追踪 SOUL.md 和 config.yaml 的变更历史,随时回滚到之前的配置。


7. 运行状态自检与排障

安装完成后,不要急着开始用,先运行一遍系统自检,确保一切正常。这就像买了新车要先检查一下轮胎和油表一样。

7.1 hermes version 版本检查

# 查看 Hermes 版本
hermes --version
 
# 查看详细版本信息(包含 Python 版本、操作系统等)
hermes --version --verbose

预期输出:

Hermes Agent v1.2.3
Python: 3.11.9
Platform: macOS-14.4-arm64
Install path: /Users/username/.local/lib/python3.11/site-packages/hermes

7.2 hermes doctor 系统诊断详解

hermes doctor 是 Hermes 内置的「全身体检」工具。它会检查所有关键的系统依赖和配置项,并给出颜色-coded 的诊断结果:

  • 绿色 = 一切正常
  • 黄色 = 有警告,但不会影响核心功能
  • 红色 = 有问题,需要修复
hermes doctor

典型输出示例:

╔══════════════════════════════════════════╗
║       Hermes Doctor - 系统诊断报告        ║
╚══════════════════════════════════════════╝

[检查项]                [状态]    [详情]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Python 版本              ✅ 通过    3.11.9
Node.js 版本             ✅ 通过    v22.3.0
Git 版本                 ✅ 通过    2.43.0
pip 版本                 ✅ 通过    24.0

目录权限                 ✅ 通过    ~/.hermes/ 可读写
配置文件                 ✅ 通过    config.yaml 格式正确
数据库连接               ✅ 通过    hermes.db 可正常访问

API Key 配置             ⚠️ 警告    只配置了 1 个 provider,建议配置 fallback
模型可达性               ✅ 通过    OpenRouter 连接正常
网络连接                 ✅ 通过    互联网访问正常

内存使用                 ✅ 通过    当前使用 128MB / 8GB
磁盘空间                 ✅ 通过    剩余 245GB

Skills 目录              ✅ 通过    发现 12 个技能
Cron 配置                ✅ 通过    发现 2 个定时任务

════════════════════════════════════════════
诊断结果:11 项通过,1 项警告,0 项失败
整体状态:🟢 健康(有轻微警告)
════════════════════════════════════════════

每个检查项说明

检查项检查内容失败影响
Python 版本是否为 3.11+核心功能无法运行
Node.js 版本是否为 v22+Web 界面可能不可用
Git 版本是否能正常执行 git 命令技能同步功能受影响
pip 版本包管理器是否可用无法安装新依赖
目录权限~/.hermes/ 是否可读写数据无法保存
配置文件config.yaml 格式是否正确配置无法加载
数据库连接SQLite 数据库是否正常记忆功能不可用
API Key 配置是否配置了至少一个 provider无法连接 LLM
模型可达性能否连接到配置的 LLM API对话功能不可用
网络连接基本网络连通性所有网络功能受影响
内存使用剩余内存是否充足系统可能变慢或崩溃
磁盘空间剩余空间是否充足无法保存新数据
Skills 目录技能文件是否完整部分工具不可用
Cron 配置定时任务配置是否有效自动化任务不执行

7.3 常见错误与解决方案

以下是安装和使用 Hermes 过程中最常见的 15 个问题及其解决方案。

问题 1:Python 版本冲突

错误现象:

ERROR: Hermes requires Python 3.11 or higher.
Current version: 3.10.12

原因分析:

你的系统默认 Python 版本低于 3.11,或者虽然安装了 3.11 但默认调用的还是旧版本。

解决方案:

# 1. 确认 Python 3.11 已安装
python3.11 --version
 
# 2. 如果已安装但 hermes 调用的是旧版本,创建别名
alias hermes="python3.11 -m hermes"
 
# 3. 或者使用 pyenv 设置全局版本
pyenv global 3.11.9
 
# 4. 如果未安装,参考 2.1 节安装 Python 3.11

问题 2:Node.js 版本不对

错误现象:

WARN: Node.js v18.17.0 detected. Hermes recommends v22 or higher.
Some features may not work correctly.

解决方案:

# macOS
brew upgrade node
 
# Ubuntu/Debian
# 先卸载旧版本
sudo apt remove nodejs
# 然后重新安装(参考 2.2 节的 NodeSource 安装脚本)
 
# 或者使用 nvm 管理 Node 版本
nvm install 22
nvm use 22
nvm alias default 22

问题 3:网络连接失败 / GitHub 无法访问

错误现象:

fatal: unable to access 'https://github.com/...':
Failed to connect to github.com port 443: Connection refused

解决方案:

# 方案 1:配置终端代理
export https_proxy=http://127.0.0.1:7890
 
# 方案 2:配置 Git 使用代理
git config --global https.proxy http://127.0.0.1:7890
 
# 方案 3:使用国内镜像加速 Git 克隆
git clone https://ghproxy.com/https://github.com/NousResearch/hermes.git
 
# 方案 4:修改 hosts(临时方案)
# 在 /etc/hosts 中添加 GitHub 的 IP(IP 会变动,需自行查找最新 IP)
sudo sh -c 'echo "140.82.114.4 github.com" >> /etc/hosts'

问题 4:权限问题(Permission Denied)

错误现象:

PermissionError: [Errno 13] Permission denied: '/Users/username/.hermes/config.yaml'

原因分析:

~/.hermes/ 目录或其内部文件的权限不正确,可能是用 sudo 运行过 Hermes 导致文件所有者变成了 root。

解决方案:

# 修复权限(macOS / Linux)
# 将 ~/.hermes 目录的所有者改回当前用户
sudo chown -R $(whoami):$(whoami) ~/.hermes
 
# 修复权限位
chmod -R u+rw ~/.hermes
 
# 如果 hermes 命令本身权限不够
chmod +x $(which hermes)

注意

永远不要用 sudo hermes 运行 Hermes! 这会导致所有数据文件的权限被改成 root,之后非 sudo 运行就会报权限错误。如果已经这样做了,用上面的 chown 命令修复权限。

问题 5:依赖安装失败

错误现象:

ERROR: Could not build wheels for xxx, which is required to install pyproject.toml-based projects

原因分析:

某些 Python 包需要从源码编译,而你的系统缺少编译工具或头文件。

解决方案:

# macOS
xcode-select --install
brew install gcc
 
# Ubuntu/Debian
sudo apt install -y build-essential python3.11-dev libffi-dev
 
# Fedora
sudo dnf install -y gcc python3.11-devel libffi-devel
 
# 然后重新安装依赖
pip install --force-reinstall hermes-agent

问题 6:API Key 配置错误(Provider error: invalid key)

错误现象:

ERROR: Authentication failed for provider 'openai'
Details: Invalid API key provided

Provider error: invalid key

原因分析:

根据官方文档,这是最常见的配置错误之一,通常由以下原因导致:

  1. API Key 有尾随空格 —— 复制 Key 时不小心带上了空格或换行符
  2. 选错了提供者 —— 把 OpenAI 的 Key 填到了 Anthropic 的配置里
  3. Key 已过期或已被撤销
  4. 配置文件中的格式有误

解决方案:

# 1. 检查 API Key 是否正确(特别注意是否有尾随空格!)
echo "$OPENAI_API_KEY" | cat -A
# 如果末尾有 "$" 之外的符号(如 " $"),说明有空格
 
# 2. 清理 Key 中的空白字符
export OPENAI_API_KEY=$(echo "$OPENAI_API_KEY" | xargs)
 
# 3. 确认 Key 和提供者匹配
# OpenAI 的 Key 必须以 "sk-" 开头
# Anthropic 的 Key 必须以 "sk-ant-" 开头
# DeepSeek 的 Key 格式为 "sk-xxxxxxxx"
# OpenRouter 的 Key 格式为 "sk-or-v1-xxxxxxxx"
 
# 4. 验证 API Key 是否有效
curl https://api.openai.com/v1/models \
  -H "Authorization: Bearer $OPENAI_API_KEY"
 
# 5. 重新运行 setup 配置
hermes setup
 
# 6. 如果通过环境变量设置,检查环境变量是否生效
# 在 .zshrc 或 .bashrc 中添加:
export OPENAI_API_KEY="sk-your-actual-key"
# 然后运行 source ~/.zshrc 生效

注意

官方排障指南中特别指出:"key 有尾随空格" 是排名前三的安装后问题。很多用户在复制粘贴 Key 时会不小心带上空格,而空格在终端中不可见,导致验证失败。验证时一定要用 echo "$KEY" | cat -A 检查末尾是否有额外字符。

问题 7:端口占用

错误现象:

ERROR: Port 8080 is already in use by another process

解决方案:

# 查找占用端口的进程
lsof -i :8080
 
# macOS / Linux
# 终止占用进程(将 <PID> 替换为实际的进程 ID)
kill -9 <PID>
 
# 或者修改 Hermes 的端口
# 编辑 ~/.hermes/config.yaml
gateway:
  web_port: 8081  # 改成其他端口

问题 8:磁盘空间不足

错误现象:

WARN: Disk space is below 10%. Hermes may not function correctly.

解决方案:

# 查看磁盘使用情况
df -h
 
# 清理 pip 缓存
pip cache purge
 
# 清理 Docker 缓存(如果使用 Docker)
docker system prune -a
 
# 清理 Hermes 日志
rm ~/.hermes/logs/*.log
 
# 压缩数据库(如果数据库文件过大)
sqlite3 ~/.hermes/database/hermes.db "VACUUM;"

问题 9:数据库损坏

错误现象:

sqlite3.DatabaseError: database disk image is malformed

解决方案:

# 1. 先备份损坏的数据库
cp ~/.hermes/database/hermes.db ~/.hermes/database/hermes.db.bak
 
# 2. 尝试修复
sqlite3 ~/.hermes/database/hermes.db ".recover" | sqlite3 ~/.hermes/database/hermes_fixed.db
 
# 3. 替换原数据库
mv ~/.hermes/database/hermes_fixed.db ~/.hermes/database/hermes.db
 
# 4. 如果修复失败,可以从备份恢复或重置数据库
# 重置(会丢失所有历史数据):
rm ~/.hermes/database/hermes.db
hermes doctor

问题 10:Hermes 命令找不到(Command not found)

错误现象:

zsh: command not found: hermes
bash: hermes: command not found

原因分析:

官方安装脚本将 Hermes 二进制文件安装在 ~/.hermes/bin/ 目录下,并自动修改你的 shell 配置文件(~/.bashrc~/.zshrc)将其加入 PATH。但如果以下情况发生,PATH 可能未生效:

  1. 没有重启终端或 source 配置文件 —— shell 配置修改后需要重新加载
  2. 使用了非标准 shell —— 安装脚本可能未覆盖你当前使用的 shell
  3. PATH 被其他配置覆盖 —— 某些工具(如 conda、pyenv)可能重置了 PATH

解决方案:

# 方案 1:重新加载 shell 配置(官方推荐第一步)
source ~/.bashrc      # bash 用户
source ~/.zshrc       # zsh 用户
source ~/.config/fish/config.fish  # fish 用户
 
# 方案 2:手动将 ~/.hermes/bin 加入 PATH
echo 'export PATH="$HOME/.hermes/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
 
# 方案 3:在当前终端中临时添加 PATH
export PATH="$HOME/.hermes/bin:$PATH"
 
# 方案 4:查找 hermes 安装位置
ls -la ~/.hermes/bin/hermes
# 或者
find ~ -name "hermes" -type f 2>/dev/null
 
# 方案 5:如果还是找不到,尝试用 Python 模块方式运行
python3 -m hermes --version

Tips

官方文档强调:新开一个终端窗口 是最简单的解决方法。安装脚本修改的是 shell 的启动配置文件,只有新启动的终端才会读取这些配置。如果你不想开新窗口,运行 source ~/.bashrcsource ~/.zshrc 即可。

问题 11:Windows 上提示 "bad interpreter"(未使用 WSL2)

错误现象:

bad interpreter: /bin/sh^M: no such file or directory

': not a valid identifier

原因分析:

这是 Windows 用户未使用 WSL2 而直接在 Windows 命令提示符或 PowerShell 中运行安装脚本的典型错误。Hermes 的安装脚本使用 Unix 风格的行尾符(LF)和 shebang(#!/bin/sh),在 Windows 原生环境中无法正确解析。

注意

Hermes 不支持原生 Windows 环境。Windows 用户必须通过 WSL2 运行。

解决方案:

  1. 安装 WSL2(如果尚未安装):
# 在管理员 PowerShell 中运行
wsl --install

然后重启电脑。

  1. 在 WSL2 Ubuntu 中重新运行安装脚本
# 打开 WSL2 终端(Ubuntu)
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | sh
  1. 确保所有后续操作都在 WSL2 环境中进行,包括运行 hermes 命令、编辑配置文件等。

常见问题

Q:我安装了 Git Bash,可以在 Git Bash 中运行 Hermes 吗?

A:不可以。 Git Bash 虽然提供了一些 Unix 工具,但它仍然运行在 Windows 上,无法完全模拟 Linux 环境。Hermes 依赖的某些 Python 包和系统调用在 Git Bash 中无法正常工作。请务必使用 WSL2。

问题 12:WSL2 中文件权限混乱

错误现象:

在 WSL2 中访问 Windows 文件时,所有文件都显示为 777 权限。

解决方案:

# 在 /etc/wsl.conf 中添加配置
sudo nano /etc/wsl.conf

写入:

[automount]
enabled = true
mountFsTab = false
root = /mnt/
options = "metadata,umask=22,fmask=11"

然后重启 WSL2:

# 在 Windows PowerShell 中执行
wsl --shutdown

问题 12:Docker 容器无法访问主机文件

错误现象:

ERROR: File not found: /workspace/myfile.txt

解决方案:

# 确认挂载路径正确
# 主机路径必须写绝对路径
 
# 正确的做法
docker run -v /home/username/workspace:/workspace nousresearch/hermes
 
# 错误的做法(~ 在 Docker 中不会被展开)
docker run -v ~/workspace:/workspace nousresearch/hermes
 
# 如果使用 Docker Compose,确保 volumes 配置正确

Docker 挂载路径常见错误对照表:

错误写法正确写法问题说明
-v ~/workspace:/workspace-v /home/user/workspace:/workspace~ 不会被 shell 展开
-v ./data:/data-v $(pwd)/data:/data相对路径可能指向错误位置
-v /data:/data-v /home/user/data:/data可能挂载到系统目录而非用户目录
-v workspace:/workspace-v /home/user/workspace:/workspace缺少前导斜杠会被当作命名卷

Tips

如果不确定挂载是否生效,可以在运行容器后执行 docker inspect hermes | grep -A 10 Mounts 查看实际的挂载配置。

问题 13:定时任务不执行

错误现象:

配置的 cron 任务到了设定时间没有执行。

解决方案:

# 1. 检查 cron 服务是否启用
hermes cron status
 
# 2. 检查 jobs.yaml 格式是否正确
hermes cron validate
 
# 3. 查看 cron 日志
hermes cron logs
 
# 4. 手动测试任务
hermes cron run daily-news-summary
 
# 5. 确认 Hermes 进程在后台运行(VPS 部署时)
ps aux | grep hermes

问题 14:代理配置导致国内服务访问慢

错误现象:

配置了全局代理后,访问国内 API(如 DeepSeek)反而变慢了。

解决方案:

# 配置代理排除规则(以 Clash 为例)
# 在 Clash 配置中添加:
# - DOMAIN-SUFFIX,deepseek.com,DIRECT
# - DOMAIN-SUFFIX,moonshot.cn,DIRECT
 
# 或者在终端只代理特定域名
export no_proxy="localhost,127.0.0.1,deepseek.com,moonshot.cn"
 
# 更优雅的方式:配置代理 PAC 规则
# 让浏览器/系统根据域名自动选择是否走代理

常见需要直连的国内域名:

服务域名说明
DeepSeek*.deepseek.com国内服务器
Kimi*.moonshot.cn国内服务器
智谱*.bigmodel.cn国内服务器
阿里云*.aliyun.com国内服务器
腾讯云*.tencentcloudapi.com国内服务器

问题 15:升级后配置不兼容

错误现象:

升级 Hermes 后启动报错,提示配置文件格式不兼容。

解决方案:

# 1. 备份当前配置
cp ~/.hermes/config.yaml ~/.hermes/config.yaml.bak
 
# 2. 运行配置迁移
hermes migrate
 
# 3. 如果迁移失败,可以重置配置并重新 setup
mv ~/.hermes/config.yaml ~/.hermes/config.yaml.old
hermes setup
 
# 4. 然后手动把旧配置中的 API Key 和自定义设置复制到新配置中

Tips

跨大版本升级前,建议先阅读官方的升级日志(hermes changelog),了解是否有破坏性变更。如果有,官方通常会提供迁移脚本或详细的手动迁移步骤。

Tips

遇到任何不在上述列表中的问题时,建议按以下顺序排查:

  1. 运行 hermes doctor 看诊断结果
  2. 查看日志 tail -n 100 ~/.hermes/logs/error.log
  3. 在 GitHub Issues 搜索类似问题
  4. 在 Discord 社区求助

8. 安装后的基本配置

8.1 初次运行 Quick Setup 向导详解

安装完成后,运行以下命令启动初始配置向导:

hermes setup

向导会一步步引导你完成核心配置。下面是每个步骤的详细说明:

步骤 1:选择语言

🌍 欢迎使用 Hermes 配置向导
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

请选择你的首选语言:
1. 中文 (简体)
2. English

> 1

选择后会自动配置 config.yaml 中的 language 字段。

步骤 2:选择 LLM 后端

🤖 选择默认 LLM 提供商
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

请选择一个提供商作为默认后端:

  1. OpenAI (GPT-4o / o1)         - 功能最强,费用较高
  2. Anthropic (Claude 3.5)       - 推理出色,代码能力强
  3. DeepSeek                     - 国产之光,性价比高
  4. Kimi (Moonshot)              - 长文本处理优秀
  5. OpenRouter                   - 一个 Key 用多个模型
  6. 本地模型 (Ollama)            - 完全免费,需本地 GPU
  7. 其他...

> 3

Tips

如果你是第一次使用,我强烈建议选择 OpenRouterDeepSeek。OpenRouter 提供免费额度的模型(如 Google Gemini),适合零成本入门;DeepSeek 的 API 价格低到惊人(每百万 token 仅几块钱),效果却媲美 GPT-4。

步骤 3:输入 API Key

🔑 配置 API Key
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

请输入你的 DeepSeek API Key:
(不会显示在屏幕上,直接粘贴后按回车)

> ******************************

✓ API Key 格式验证通过
✓ 连接测试成功

注意

API Key 不会以明文存储在配置文件中,而是通过环境变量或加密方式管理。你可以放心输入。

步骤 4:选择默认模型

🎯 选择默认模型
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

可用的 DeepSeek 模型:

  1. deepseek-chat              - 通用对话,推荐日常使用
  2. deepseek-reasoner          - 推理增强,适合复杂问题

> 1

✓ 已设置默认模型: deepseek-chat

步骤 5:配置分层模型(可选)

⚙️  分层模型配置(省钱秘笈)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

是否启用分层模型配置?
核心逻辑用强模型,基础执行用便宜模型,可节省 50%-70% 费用。

启用? (y/n) > y

请选择推理模型(处理复杂问题):
1. deepseek-reasoner
2. deepseek-chat

> 1

请选择执行模型(处理简单任务):
1. deepseek-chat
2. deepseek-chat (轻量)

> 2

✓ 分层模型配置完成

步骤 6:完成配置

🎉 配置完成!
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

你的 Hermes 已经准备就绪。接下来你可以:

  • 运行 `hermes` 开始对话
  • 运行 `hermes chat` 进入交互模式
  • 运行 `hermes doctor` 检查系统状态

配置文件保存在: ~/.hermes/config.yaml

8.2 配置完成后的额外优化

配置向导完成后,建议进行以下几项额外优化,让你的 Hermes 体验更上一层楼:

1. 配置分层模型(强烈建议)

编辑 ~/.hermes/config.yaml,添加分层模型配置:

models:
  reasoning:
    provider: "deepseek"
    model: "deepseek-reasoner"
  execution:
    provider: "deepseek"
    model: "deepseek-chat"
  fallback:
    - provider: "openrouter"
      model: "google/gemini-flash-1.5"

2. 编写基础 SOUL.md

cat > ~/.hermes/SOUL.md << 'EOF'
# SOUL.md
 
## 身份
 
你是一位专业、友好的 AI 助手。
 
## 说话风格
 
- 使用中文回答
- 简洁明了,不啰嗦
- 技术问题给出可运行的代码示例
EOF

3. 配置自动备份

mkdir -p ~/scripts
cat > ~/scripts/backup-hermes.sh << 'EOF'
#!/bin/bash
BACKUP_DIR="$HOME/hermes-backups"
mkdir -p "$BACKUP_DIR"
tar -czf "$BACKUP_DIR/hermes-$(date +%Y%m%d).tar.gz" -C "$HOME" .hermes/config.yaml .hermes/SOUL.md .hermes/MEMORY.md .hermes/USER.md .hermes/database .hermes/skills/custom .hermes/cron
EOF
chmod +x ~/scripts/backup-hermes.sh

4. 运行首次诊断

hermes doctor

确保所有检查项都是绿色通过。

8.3 环境变量配置

除了通过 hermes setup 配置,你也可以直接通过环境变量设置 API Keys。这在 Docker 部署和 CI/CD 环境中特别有用。

常用环境变量

# LLM API Keys
export OPENAI_API_KEY="sk-your-openai-key"
export ANTHROPIC_API_KEY="sk-your-anthropic-key"
export DEEPSEEK_API_KEY="sk-your-deepseek-key"
export OPENROUTER_API_KEY="sk-your-openrouter-key"
export MOONSHOT_API_KEY="sk-your-moonshot-key"
 
# Hermes 配置
export HERMES_DATA_DIR="/custom/path/to/hermes/data"
export HERMES_CONFIG_PATH="/custom/path/config.yaml"
export HERMES_LOG_LEVEL="debug"
 
# 代理配置
export HTTP_PROXY="http://127.0.0.1:7890"
export HTTPS_PROXY="http://127.0.0.1:7890"
export NO_PROXY="localhost,127.0.0.1"

永久设置环境变量

macOS (zsh):

# 编辑 ~/.zshrc
nano ~/.zshrc
 
# 在文件末尾添加环境变量
export OPENAI_API_KEY="sk-your-key"
export DEEPSEEK_API_KEY="sk-your-key"
 
# 保存后生效
source ~/.zshrc

Linux (bash):

# 编辑 ~/.bashrc
nano ~/.bashrc
 
# 添加环境变量
export OPENAI_API_KEY="sk-your-key"
 
# 保存后生效
source ~/.bashrc

WSL (从 Windows 传递环境变量):

在 Windows 用户目录创建 .wslconfig

[automount]
enabled = true
 
[interop]
enabled = true
appendWindowsPath = true
 
# 传递特定环境变量到 WSL
[boot]
systemd = true

或者在 WSL 的 /etc/profile.d/ 中创建脚本:

sudo nano /etc/profile.d/hermes-env.sh

写入:

export OPENAI_API_KEY="sk-your-key"
export DEEPSEEK_API_KEY="sk-your-key"

8.3 代理/镜像源配置(国内用户必看)

对于国内用户,除了前面提到的网络代理配置,还有几个重要的优化点:

pip 国内镜像源

# 清华源(推荐)
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
 
# 或阿里云源
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
 
# 验证
pip config get global.index-url

npm 国内镜像源

# 淘宝源(已更新域名)
npm config set registry https://registry.npmmirror.com
 
# 验证
npm config get registry

GitHub 加速

# 方式 1:使用 ghproxy 镜像
git clone https://ghproxy.com/https://github.com/owner/repo.git
 
# 方式 2:配置 Git 使用代理
git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890
 
# 方式 3:使用 SSH 协议(通常比 HTTPS 更稳定)
git clone [email protected]:owner/repo.git

LLM API 国内直连优化

提供商国内访问情况优化建议
OpenAI需代理配置代理或使用中转 API
Anthropic需代理配置代理
DeepSeek直连流畅无需代理
Kimi直连流畅无需代理
OpenRouter部分需代理配置代理
阿里云百炼直连流畅无需代理

Tips

建议国内用户优先使用 DeepSeek 和 Kimi 作为主力模型,这两个平台的 API 服务器在国内,访问速度快且稳定。OpenAI 和 Anthropic 可以通过代理或中转服务访问,OpenRouter 则提供了「一个 Key 用多个模型」的便利。

8.4 性能调优与资源限制

Hermes 默认配置适用于大多数场景,但在资源受限的环境(如低配 VPS 或旧电脑)中,适当调优可以显著提升体验。

数据库性能优化

# 定期压缩数据库(清理已删除数据占用的空间)
sqlite3 ~/.hermes/database/hermes.db "VACUUM;"
 
# 添加数据库索引(如果查询变慢)
sqlite3 ~/.hermes/database/hermes.db "CREATE INDEX IF NOT EXISTS idx_sessions_created ON sessions(created_at);"
 
# 查看数据库大小
ls -lh ~/.hermes/database/hermes.db

建议每月执行一次 VACUUM,就像给数据库「瘦身」。

内存使用控制

如果你的系统内存紧张,可以通过环境变量限制 Hermes 的内存占用:

# 启动 Hermes 时限制最大内存为 512MB
ulimit -v 524288 && hermes
 
# 或者在 systemd 服务中添加限制
# 在 hermes.service 的 [Service] 段添加:
# MemoryMax=512M
# MemorySwapMax=0

并发任务限制

config.yaml 中限制同时运行的任务数:

core:
  max_concurrent_tasks: 3 # 默认可能是 5,低配机器可改为 2-3
  request_timeout: 30 # API 请求超时时间(秒)

Tips

性能调优的核心思路是「量力而行」。一台 1 核 1G 的 VPS 就不要指望同时跑 5 个任务,把并发限制在 2 以内,给系统留足喘息空间。Hermes 是 Agent,不是赛车——稳定运行比极速响应更重要。


9. 卸载与重装

9.1 完整卸载步骤

如果你需要卸载 Hermes,请按以下步骤操作。这就像「搬家」——先打包重要物品,再清空房子,最后检查有没有落下东西。

步骤 1:备份数据(强烈建议)

# 创建备份目录
mkdir -p ~/hermes-backup-$(date +%Y%m%d)
 
# 备份核心数据
cp -r ~/.hermes/config.yaml ~/hermes-backup-$(date +%Y%m%d)/
cp -r ~/.hermes/SOUL.md ~/hermes-backup-$(date +%Y%m%d)/
cp -r ~/.hermes/MEMORY.md ~/hermes-backup-$(date +%Y%m%d)/
cp -r ~/.hermes/USER.md ~/hermes-backup-$(date +%Y%m%d)/
cp -r ~/.hermes/database ~/hermes-backup-$(date +%Y%m%d)/
cp -r ~/.hermes/skills/custom ~/hermes-backup-$(date +%Y%m%d)/
cp -r ~/.hermes/cron ~/hermes-backup-$(date +%Y%m%d)/
 
echo "备份完成,保存在: ~/hermes-backup-$(date +%Y%m%d)/"

注意

卸载前务必备份!很多用户在卸载后才发现某个配置文件或一段对话历史很重要,但为时已晚。备份只占用几 MB 空间,却能避免不可挽回的损失。

步骤 2:卸载 Hermes 包

# 卸载 Python 包
pip uninstall hermes-agent -y
 
# 或者如果你使用 pipx 安装
pipx uninstall hermes-agent
 
# 或者如果你从源码安装
cd ~/hermes
pip uninstall -e .

步骤 3:删除数据目录

# 删除 Hermes 数据目录
rm -rf ~/.hermes
 
# 从 PATH 中移除 ~/.hermes/bin
# 编辑 ~/.zshrc 或 ~/.bashrc,删除以下行:
# export PATH="$HOME/.hermes/bin:$PATH"
nano ~/.zshrc
 
# 删除环境变量(从 ~/.zshrc 或 ~/.bashrc 中删除相关行)
# 手动删除 export HERMES_... 和 export OPENAI_API_KEY 等行

步骤 4:清理残留

# 查找并删除残留的 hermes 相关文件
find ~ -name "*hermes*" -type f 2>/dev/null
find ~ -name "*hermes*" -type d 2>/dev/null
 
# 清理 pip 缓存
pip cache purge
 
# 如果使用了 systemd 服务,删除服务文件
sudo rm -f /etc/systemd/system/hermes.service
sudo systemctl daemon-reload
 
# 如果使用了 Docker,删除镜像和容器
docker stop hermes 2>/dev/null
docker rm hermes 2>/dev/null
docker rmi nousresearch/hermes:latest 2>/dev/null

9.2 数据备份与恢复

自动备份脚本

创建一个每天自动备份的脚本:

# 创建备份脚本
mkdir -p ~/scripts
cat > ~/scripts/backup-hermes.sh << 'EOF'
#!/bin/bash
 
# Hermes 自动备份脚本
BACKUP_DIR="$HOME/hermes-backups"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_NAME="hermes-backup-$DATE"
 
# 创建备份目录
mkdir -p "$BACKUP_DIR"
 
# 执行备份
tar -czf "$BACKUP_DIR/$BACKUP_NAME.tar.gz" \
    -C "$HOME" \
    .hermes/config.yaml \
    .hermes/SOUL.md \
    .hermes/MEMORY.md \
    .hermes/USER.md \
    .hermes/database \
    .hermes/skills/custom \
    .hermes/cron
 
# 保留最近 30 天的备份,删除旧备份
find "$BACKUP_DIR" -name "hermes-backup-*.tar.gz" -mtime +30 -delete
 
echo "备份完成: $BACKUP_DIR/$BACKUP_NAME.tar.gz"
EOF
 
chmod +x ~/scripts/backup-hermes.sh
 
# 添加到 crontab(每天凌晨 3 点自动备份)
(crontab -l 2>/dev/null; echo "0 3 * * * $HOME/scripts/backup-hermes.sh") | crontab -

恢复备份

# 解压备份文件
tar -xzf ~/hermes-backups/hermes-backup-20260415_030000.tar.gz -C ~/
 
# 确保权限正确
chmod -R u+rw ~/.hermes
 
# 运行诊断
hermes doctor

9.3 版本升级方法

通过 pip 升级

# 升级到最新版本
pip install --upgrade hermes-agent
 
# 升级到特定版本
pip install hermes-agent==1.3.0

通过 Git 升级(如果从源码安装)

cd ~/hermes
git pull origin main
pip install -e . --upgrade

通过 Docker 升级

# 拉取最新镜像
docker pull nousresearch/hermes:latest
 
# 停止并删除旧容器
docker stop hermes
docker rm hermes
 
# 用新镜像启动容器
docker run -d \
  --name hermes \
  -v ~/.hermes:/opt/data \
  -e OPENAI_API_KEY="$OPENAI_API_KEY" \
  nousresearch/hermes:latest

升级前检查

# 1. 备份当前配置和数据
~/scripts/backup-hermes.sh
 
# 2. 查看当前版本
hermes --version
 
# 3. 查看新版本更新日志
pip index versions hermes-agent
 
# 4. 升级后运行诊断
hermes doctor
 
# 5. 如有配置迁移提示,执行迁移
hermes migrate

版本升级的最佳实践:

1. 先读更新日志

每次升级前,先查看更新日志了解新版本的变更:

hermes changelog

重点关注:

  • 是否有破坏性变更(Breaking Changes)
  • 是否有配置格式变化
  • 是否有新的依赖要求

2. 在测试环境先升级

如果你在生产环境使用 Hermes,建议先在本地或测试 VPS 上升级,确认没有问题后再升级生产环境。

# 本地测试升级
pip install --upgrade hermes-agent --user
hermes doctor

3. 保留回滚方案

升级前备份整个 ~/.hermes/ 目录,如果升级后出现问题,可以快速回滚:

# 回滚到上一版本
pip install hermes-agent==$(cat ~/.hermes/version.bak)
# 恢复配置
cp ~/.hermes/config.yaml.bak ~/.hermes/config.yaml

注意

跨大版本升级时(如从 v1.x 到 v2.x),请务必先阅读官方的升级指南。大版本升级可能会引入不兼容的配置变更,需要手动调整。


本章小结

恭喜!你已经完成了 Hermes Agent 安装部署的完整学习。让我们回顾一下本章的核心要点:

  1. 安装前准备 至关重要。检查清单上的每一项,确保 Python 3.11+、Node.js v22+、Git 等前置软件已就绪,网络环境畅通。

  2. 四种部署方式 各有适用场景:

    • 本地常规部署:新手入门首选,零额外成本
    • Docker 部署:环境隔离,便于迁移和多版本管理
    • VPS 部署:24/7 运行,支持远程访问和团队协作
    • 无服务器部署:按需计费,适合间歇性任务
  3. ~/.hermes/ 目录 是 Hermes 的「家」。config.yaml 是中枢神经,SOUL.md 定义 Agent 的灵魂,MEMORY.md 存储全局记忆,database/ 保存所有历史数据。

  4. hermes doctor 是最好的排障工具。遇到问题时先运行它,80% 的问题都能直接定位。

  5. 数据备份 不可忽视。设置自动备份脚本,定期将核心数据备份到安全位置。

Tips

如果你在安装过程中遇到了本章未覆盖的问题,建议:

  1. 先运行 hermes doctor 查看诊断
  2. 检查 ~/.hermes/logs/error.log 获取详细错误信息
  3. 在 GitHub Issues 中搜索类似问题
  4. 加入 Hermes Discord 社区寻求帮助

现在,你的 Hermes 应该已经顺利运行起来了。下一章,我们将进入「基础使用入门」,学习如何与你的 Agent 进行第一次对话、掌握常用命令、接入各种大模型,以及配置分层模型来节省费用。让我们继续「养马之旅」!