收起左侧

让你的agent永不失忆! Hermes + Hindsight 飞牛NAS 纯图形界面部署指南

1
回复
46
查看
[ 复制链接 ]

1

主题

0

回帖

0

牛值

江湖小虾

🚀 Hermes + Hindsight 记忆系统
[size=1.2]飞牛NAS 纯图形界面部署指南(小白专用)
📖 目录
1. 系统简介
一键部署 AI 助手 + 长期记忆大脑,对接微信/QQ 等消息平台。
  • [color=var(--accent)][size=0.8em]Hermes Agent AI 助手核心,调用 DeepSeek 大模型对话,并自动记忆你的偏好。
  • [color=var(--accent)][size=0.8em]Hindsight 记忆引擎,自动提取、整理对话记忆,支持语义搜索。
架构很简单:微信/QQ → Hermes ↔ Hindsight 记忆库
Hindsight 的长期记忆功能必须使用 Chat 模型(如 deepseek-v4-pro),绝对不能填纯 Embedding 模型。

2. 前期准备
项目
说明
飞牛NAS确保已安装 Docker 应用(系统自带或应用商店安装)
可用空间建议至少剩余 20 GB
内存至少 4 GB(推荐 8 GB 以上)
DeepSeek API Key点击注册,在“API Keys”页面创建并复制密钥
一台电脑用于创建配置文件并上传到 NAS


3. 文件目录搭建(纯鼠标操作)
打开飞牛NAS的“文件管理”,进入你的 Docker 工作目录(例如 /vol1/1000/Docker),新建文件夹并命名为 hermes-hindsight。然后进入该文件夹,再新建以下四个子文件夹:
datahindsight_datapostgres_databackups
最终结构如下(你只需确保这几个文件夹存在即可):
/vol1/1000/Docker/hermes-hindsight/**── data/**── hindsight_data/**── postgres_data/**── backups/💡 路径可以自定义,但后续所有操作都要使用你设定的路径,本指南以 /vol1/1000/Docker/hermes-hindsight 为例。

4. 本地创建必要文件并上传⚠️ 重要说明:飞牛NAS 文件管理器无法直接新建 .sh、.yml 等格式的脚本文件,**所有配置文件必须在你的电脑上创建,再通过文件管理上传到 NAS 的对应目录**。同时,请务必使用专业文本编辑器(如 VS Code、Notepad++)并保存为 UTF-8 无 BOM 编码,否则可能导致脚本执行失败或中文乱码。
4.1 创建启动脚本 start-hermes.sh
第一步:在你的电脑上新建一个文本文档,重命名为 start-hermes.sh(注意扩展名是 .sh,不是 .txt)。
第二步:用编辑器打开,粘贴以下内容,并确保编码为 UTF-8 无 BOM:
#!/bin/bash# Hermes 启动后自动维护脚本set -eecho ">>> 正在执行启动后维护..."# 修复可能被 root 占用的技能文件find /opt/data/skills -user root -exec chown hermes:hermes {} \; 2>/dev/null || true# 安装记忆客户端依赖PACKAGES_DIR="/opt/data/.python_packages"mkdir -p "$PACKAGES_DIR"if [ ! -d "$PACKAGES_DIR/hindsight_client" ]; then    echo ">>> 安装 hindsight-client..."    pip install --target="$PACKAGES_DIR" hindsight-clientelse    echo ">>> 客户端已存在,跳过安装。"fiecho ">>> 维护完成。"
第三步:上传文件。打开飞牛文件管理,进入 /vol1/1000/Docker/hermes-hindsight/,点击上传,选择刚保存的 start-hermes.sh。
第四步:设置执行权限。文件上传后,右键该文件 → 属性 → 权限,勾选“执行”复选框,或者将权限数值设为 755。

4.2 创建 Docker Compose 配置文件
第一步:在电脑上新建文本文档,重命名为 docker-compose.yml(注意扩展名是 .yml,不是 .txt)。
第二步:用编辑器打开,粘贴以下完整内容,并确保编码为 UTF-8 无 BOM:
services:  # ========== Hermes AI 核心 ==========  hermes:    image: hermes-agent-custom:latest    container_name: hermes    restart: unless-stopped    network_mode: host    dns:      - 114.114.114.114      - 223.5.5.5    stdin_open: true    tty: true    user: "1000:1000"    volumes:      - ./data:/opt/data      - ./start-hermes.sh:/opt/hermes/start-hermes.sh:ro    environment:      - TZ=Asia/Shanghai      - DEEPSEEK_API_KEY=${DEEPSEEK_API_KEY}      - DEEPSEEK_BASE_URL=https://api.deepseek.com/v1      - DEEPSEEK_MODEL=deepseek-v4-pro      - PYTHONPATH=/opt/data/.python_packages      - HERMES_POST_START=/bin/bash /opt/hermes/start-hermes.sh    deploy:      resources:        limits:          memory: 4G          cpus: "2.0"  # ========== 管理面板 ==========  hermes-dashboard:    image: hermes-agent-custom:latest    container_name: hermes-dashboard    restart: unless-stopped    command: dashboard --host 0.0.0.0 --insecure    network_mode: host    user: "1000:1000"    volumes:      - ./data:/opt/data    environment:      - GATEWAY_HEALTH_URL=http://127.0.0.1:8642      - TZ=Asia/Shanghai      - DEEPSEEK_API_KEY=${DEEPSEEK_API_KEY}      - DEEPSEEK_BASE_URL=https://api.deepseek.com/v1      - DEEPSEEK_MODEL=deepseek-v4-pro    depends_on:      - hermes  # ========== 记忆大脑 ==========  hindsight:    image: ghcr.io/vectorize-io/hindsight:latest    container_name: hindsight    restart: unless-stopped    networks:      - internal    ports:      - "127.0.0.1:8888:8888"      - "127.0.0.1:9999:9999"    environment:      HINDSIGHT_DB_HOST: hindsight-postgres      HINDSIGHT_DB_PORT: "5432"      HINDSIGHT_DB_NAME: hindsight      HINDSIGHT_DB_USER: hindsight      HINDSIGHT_DB_PASSWORD: ${HINDSIGHT_DB_PASSWORD:-ChangeMe123!}      HINDSIGHT_DB_BACKEND: external      HINDSIGHT_API_LLM_PROVIDER: openai      HINDSIGHT_API_LLM_API_KEY: ${DEEPSEEK_API_KEY}      HINDSIGHT_API_LLM_MODEL: deepseek-v4-pro      HINDSIGHT_API_LLM_BASE_URL: https://api.deepseek.com/v1      API_BASE_URL: http://127.0.0.1:8888      HINDSIGHT_CORS_ORIGINS: "http://localhost:9999,http://127.0.0.1:9999"      HINDSIGHT_API_LISTEN_HOST: 0.0.0.0      HF_ENDPOINT: https://hf-mirror.com    volumes:      - ./hindsight_data:/home/hindsight/.pg0    depends_on:      - hindsight-postgres  # ========== 数据库 ==========  hindsight-postgres:    image: pgvector/pgvector:pg16    container_name: hindsight-postgres    restart: unless-stopped    networks:      - internal    environment:      POSTGRES_USER: hindsight      POSTGRES_PASSWORD: ${HINDSIGHT_DB_PASSWORD:-ChangeMe123!}      POSTGRES_DB: hindsight    volumes:      - ./postgres_data:/var/lib/postgresql/datanetworks:  internal:    driver: bridge
第三步:上传文件。将 docker-compose.yml 上传到 NAS 的 /vol1/1000/Docker/hermes-hindsight/ 目录下。
⚠️ 关于镜像标签:我们使用了 :latest 标签,这能让你随时获得最新版,但也可能包含未充分测试的变更。如果你追求绝对稳定,可将 latest 手动改为具体版本号(例如 :v0.13.0 和 :0.6)。后续升级章节会教你如何安全切换。

5. 设置目录权限
容器内的 AI 用户 UID 是 1000,因此必须将 data 文件夹的拥有者改为 1000。在飞牛文件管理器中,右键点击 data 文件夹 → 属性 → 权限,将“所有者”和“组”都改为 1000,并勾选“应用到子文件夹及文件”。
如果文件管理器无法直接修改数字 UID,可以打开飞牛的“终端”应用,执行下面这一条命令(复制粘贴回车即可):
sudo chown -R 1000:1000 /vol1/1000/Docker/hermes-hindsight/data⚠️ 千万不要修改 hindsight_data 和 postgres_data 的权限!

6. 在 Docker 中部署应用
  • 打开飞牛NAS的 Docker 管理界面,找到“堆栈”或“应用”菜单,点击“添加堆栈”。
  • 命名堆栈为 hermes-hindsight,然后在配置框中将刚才创建的 docker-compose.yml 内容全选复制进去。
  • 设置环境变量(密钥填在这里最安全)。在“环境变量”区域添加两行:
    DEEPSEEK_API_KEY=你的DeepSeek密钥
    HINDSIGHT_DB_PASSWORD=数据库密码,可自定,默认ChangeMe123!
  • 存储卷映射部分检查是否已自动识别当前目录下的 data、hindsight_data、postgres_data 以及 start-hermes.sh,如没有自动识别,手动添加上面 compose 中对应的映射关系。
  • 点击部署,系统将自动拉取镜像并创建所有容器。等待 2~3 分钟即可。
7. 启动与验证
部署成功后,在 Docker 容器列表中应看到四个容器均显示“运行中”。然后进行简单验证:
  • 记忆引擎健康检查:浏览器访问 http://你的NAS-IP:8888/health,看到 {"status":"healthy"} 即正常。
  • AI 面板:访问 http://你的NAS-IP:9119,如果出现管理界面,说明 Hermes 已启动。
  • 日志检查:在 Docker 界面点击 hermes 容器,查看日志,没有报错即可。

8. 日常维护(图形化)
  • 查看运行状态:在 Docker 界面直接观察容器状态。
  • 重启服务:选中容器,点击“重启”。
  • 查看日志:点击容器名,切换到“日志”标签页。
  • 清理无用镜像:Docker 设置里通常有“清理”功能,可释放空间。
  • 手动整理记忆:如果感觉记忆积压,可用浏览器访问以下地址触发合并:
    http://你的NAS-IP:8888/v1/default/banks/hermes/consolidate (会返回 JSON 结果)

9. 备份与恢复
备份:在文件管理器中,直接将 /vol1/1000/Docker/hermes-hindsight 整个文件夹复制到另一块硬盘或 NAS 其他目录即可。建议先停止所有容器再复制。
恢复:将备份的文件夹放回原路径,进入 Docker 堆栈页面,重新部署同一份 compose 文件(或直接启动已有容器),系统会自动识别原有数据。
💡 更优雅的自动备份:你可以将整个项目文件夹设置为飞牛自带的“备份任务”源目录,定时备份到远程或外接硬盘。

10. 升级指南
因为使用了 :latest 标签,升级变得异常简单:
  • 在 Docker 界面选中你的堆栈,点击“重新创建”。
  • 勾选“拉取最新镜像”或“强制拉取”。
  • 点击执行,系统会自动下载新版镜像并重建容器。
如果你之前锁定了版本号,只需在 compose 中修改标签为 :latest 后再执行上述操作。
回退旧版:如果新版出现异常,把 compose 中的标签改回上一个稳定版本(如 :v0.13.0 和 :0.6),然后“重新创建”即可。记得先把数据备份一下。

11. 常见问题排查❶ 记忆引擎报“LLM API key required”
原因:部署时环境变量 DEEPSEEK_API_KEY 未正确填写。
解决:在 Docker 堆栈编辑页面,检查环境变量键名是否完全一致,密钥是否正确。

❷ Hermes 无法启动,日志提示“unable to open database file”
原因:data 文件夹权限不是 1000:1000。
解决:按第 5 节重新设置权限,然后重启容器。

❸ 记忆提取报 422 错误或超时
原因:你填写的模型是纯 Embedding 模型,不支持对话。
解决:确保环境变量 HINDSIGHT_API_LLM_MODEL 为 deepseek-v4-pro 或其他 Chat 模型。

❹ 镜像拉取总是超时
原因:国内访问 ghcr.io 不稳定。
解决:在 Docker 设置中配置国内镜像加速器,或请朋友下载离线镜像包(.tar)后,在飞牛 Docker 界面中“导入”。

❺ 升级后容器启动异常
原因:最新版可能有兼容问题。
解决:临时回退:将 compose 中的 :latest 改成之前的版本号,然后“重新创建”。确定稳定后再考虑是否追新。

❻ 脚本上传后无法执行或中文乱码
原因:文件编码不正确(如使用了系统默认的 GBK 编码),或者文件格式不是 Unix 换行。
解决:在电脑上使用 VS Code / Notepad++ 打开文件,将编码改为 UTF-8 无 BOM,换行符选择 LF,重新保存后覆盖上传。


收藏
送赞
分享

0

主题

3

回帖

0

牛值

江湖小虾

这是直接哪里复制来的sweat

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则