从零到一:手把手教你本地部署具备持久记忆的AI Agent框架

📅 2026/7/6 9:19:57
从零到一:手把手教你本地部署具备持久记忆的AI Agent框架
30款热门AI模型一站整合DeepSeek/GLM/Qwen 随心用限时 5 折。 点击领海量免费额度最近在尝试将 AI Agent 从“玩具”升级为“生产力工具”时发现了一个普遍痛点很多教程要么停留在概念科普要么直接跳到复杂的云原生部署中间缺少一个平滑的、能跑起来的本地实战路径。特别是对于 Hermes Agent 这样强调“自我进化”和“持久记忆”的框架如果不能在本地环境亲手部署、配置并看到它如何学习和工作就很难理解其核心价值。本文将为你提供一条从零到一的完整路径不仅带你理解 Hermes Agent 的核心原理更会手把手完成一次私有化部署的代码实战。无论你是想在自己的开发机上快速体验还是为团队搭建一个内部测试环境都能从本文中找到可复现的步骤和清晰的解释。1. Hermes Agent 核心概念为什么它不只是另一个聊天机器人在深入部署之前我们必须先理解 Hermes Agent 的独特之处。它由 Nous Research 开发并采用 MIT 协议开源是目前增长最快的开源 Agent 框架之一。其核心设计哲学是“自我进化”这使其与大多数“对话即忘”的 Agent 框架产生了本质区别。1.1 三层记忆系统Agent 的“大脑”如何工作Hermes 的能力基石是其精心设计的三层记忆系统这解决了传统 Agent 无法积累经验的核心问题。Layer 1 — 冻结系统提示记忆你可以将其理解为 Agent 的“核心人格”或“基本原则”。它由两个关键文件构成MEMORY.md(约 2200 字符)存储 Agent 的长期目标、行为准则和核心能力描述。USER.md(约 1375 字符)存储关于用户的特定信息、偏好和历史交互摘要。 这两个文件在每次会话开始时会作为系统提示System Prompt的一部分被“冻结”注入。Agent 可以在对话中通过add、replace、remove等指令主动维护这些记忆。设计上容量被刻意限制这迫使 Agent 必须进行高质量的信息“策展”只保留最关键的内容而不是无脑堆积。Layer 2 — 程序性技能记忆这是 Hermes “越用越聪明”的关键。当 Agent 成功完成一个复杂任务例如“从 S3 下载数据并用 PySpark 进行分析”后它会自动将整个工作流提炼、抽象成一个可复用的Skill 文件。这个文件遵循agentskills.io开放标准包含了任务描述、所需的工具调用序列、参数模板以及成功/失败的处理逻辑。下次当用户提出类似需求时如“分析一下上个月的日志数据”Hermes 会通过语义匹配从技能库中召回相关的 Skill并基于此模板快速生成执行计划极大提高了任务完成的准确性和效率。这实现了完整的Do → Learn → Improve闭环。Layer 3 — 会话搜索记忆所有历史对话都会被持久化存储并使用 SQLite 的 FTS5全文搜索引擎建立索引。当进行新对话时系统会根据当前查询从历史会话中检索出最相关的片段经过 LLM 摘要化后再注入到当前上下文中。这里选择 FTS5 而非向量数据库是一个非常务实的工程决策零外部依赖、运维简单、精确匹配性能出色且完全适合本地化部署场景。1.2 核心能力矩阵除了记忆系统Hermes 还集成了丰富的生产级能力40 内置工具覆盖文件操作、网络请求、代码执行、系统命令等。子 Agent 委派可以将复杂任务分解创建并管理专门的子 Agent 协同完成。Cron 定时任务支持配置定时触发的自动化任务。多平台 IM 接入原生支持微信、飞书、企微、钉钉、QQ、Discord、Slack 等主流通讯工具这意味着你可以让 Hermes 在你的工作群里直接提供服务。外部记忆提供者支持接入多达 8 种外部记忆系统例如 Honcho 用于更复杂的辩证用户建模。理解这些核心概念后你就会明白部署 Hermes 不仅仅是启动一个服务更是部署一个具备成长潜力的“数字员工”。接下来我们开始准备部署环境。2. 环境准备从零搭建你的 Hermes 实验场为了覆盖最广泛的开发者环境我们将分别介绍在Linux/macOS和Windows (WSL2)下的准备工作。目标是构建一个隔离、可复现的本地开发环境。2.1 基础环境与工具链无论使用哪种操作系统以下工具是必须的Docker 与 Docker Compose这是容器化部署 Hermes 的基石。确保安装的是较新版本。Git用于克隆代码仓库。Python 3.9部分管理脚本和本地工具可能需要。一个可用的 LLM API 密钥Hermes 本身是框架需要后端大模型驱动。你可以选择OpenAI 兼容 API如 OpenAI GPT-4 Anthropic Claude 或国内兼容 OpenAI 协议的各类平台。本地模型通过ollama或vLLM等框架部署本地大模型如 Qwen、Llama 等然后将其服务地址配置为 API 端点。对于 Windows 用户强烈推荐 WSL2在 Windows 上获得最佳体验的方式是使用 WSL2 (Windows Subsystem for Linux)。安装 Ubuntu 发行版后你就在 Windows 内获得了一个完整的 Linux 环境后续所有 Linux 命令均可直接运行。# 在 WSL2 的 Ubuntu 终端中安装 Docker sudo apt update sudo apt install -y docker.io docker-compose sudo usermod -aG docker $USER # 退出终端重新登录使组权限生效2.2 项目结构与代码获取我们将创建一个清晰的项目目录来管理所有配置。# 创建项目目录并进入 mkdir -p ~/hermes-agent-deploy cd ~/hermes-agent-deploy # 克隆 Hermes Agent 官方仓库我们主要参考其 Docker 部署方式 git clone https://github.com/NousResearch/Hermes.git # 进入仓库查看部署相关文件 cd Hermes ls -la docker-compose* Dockerfile官方仓库可能提供了多个docker-compose变体文件。通常我们会找到一个基础版本。为了本教程我们将创建一个更清晰、定制化的部署目录。# 回到项目根目录创建我们的部署配置目录 cd ~/hermes-agent-deploy mkdir -p config data logs # 创建我们自己的 docker-compose.yml touch docker-compose.yml touch .env # 用于存放敏感配置如 API Key现在你的目录结构应该如下所示~/hermes-agent-deploy/ ├── Hermes/ # 官方源码参考用 ├── config/ # 存放自定义配置文件 ├── data/ # 映射容器内数据实现持久化 ├── logs/ # 存放容器日志 ├── docker-compose.yml # 我们的核心部署文件 └── .env # 环境变量文件需自行创建不提交git环境就绪后下一步就是编写核心的部署配置。3. 核心配置详解构建你的 Hermes 大脑Hermes 的威力很大程度上取决于其配置。我们将通过 Docker Compose 来定义服务并通过环境变量和配置文件来“塑造” Agent 的行为。3.1 Docker Compose 配置解析创建一个docker-compose.yml文件这是所有服务的蓝图。version: 3.8 services: hermes: image: ghcr.io/nousresearch/hermes:latest # 使用官方镜像 container_name: hermes-agent restart: unless-stopped ports: - 8787:8787 # Web UI 端口 - 8642:8642 # 飞书等IM服务端口可选 environment: - OPENAI_API_KEY${OPENAI_API_KEY} # 从 .env 文件读取 - OPENAI_BASE_URL${OPENAI_BASE_URL:-https://api.openai.com/v1} # 支持自定义端点 - MODEL${MODEL:-gpt-4o-mini} # 指定使用的模型 - TZAsia/Shanghai # 设置时区 volumes: - ./data/hermes:/app/data # 持久化记忆和技能数据 - ./config:/app/config # 挂载自定义配置文件 - ./logs:/app/logs # 挂载日志目录 # 设置资源限制避免过度消耗 deploy: resources: limits: cpus: 2 memory: 4G reservations: cpus: 0.5 memory: 1G # 健康检查确保服务正常启动 healthcheck: test: [CMD, curl, -f, http://localhost:8787/health] interval: 30s timeout: 10s retries: 3 start_period: 40s networks: - hermes-net # 可选添加一个简单的 PostgreSQL 容器作为外部记忆存储示例 # postgres: # image: postgres:15-alpine # container_name: hermes-postgres # environment: # POSTGRES_PASSWORD: ${DB_PASSWORD:-hermes123} # POSTGRES_USER: hermes # POSTGRES_DB: hermes_db # volumes: # - ./data/postgres:/var/lib/postgresql/data # networks: # - hermes-net networks: hermes-net: driver: bridge关键配置解释image: 我们使用官方构建的镜像这省去了本地编译的麻烦。ports:8787端口用于访问 Web 交互界面8642端口用于接入飞书等即时通讯工具需要额外配置。environment: 这里是最关键的。OPENAI_API_KEY是你的大模型通行证OPENAI_BASE_URL允许你指向任何兼容 OpenAI API 的服务器包括本地部署的模型MODEL指定具体使用哪个模型。volumes: 通过卷挂载实现数据持久化。/app/data目录保存了 Hermes 的“记忆”MEMORY.md, USER.md和“技能”Skills容器重启不会丢失。/app/config允许你注入自定义配置。healthcheck: 这是一个好习惯让 Docker 能够监控服务状态。3.2 环境变量与模型配置 (.env)创建.env文件来管理敏感信息。切记这个文件不要提交到版本控制系统# ~/hermes-agent-deploy/.env # 大模型 API 配置 (以 OpenAI 格式为例) OPENAI_API_KEYsk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # 如果你使用第三方平台或本地模型修改此 BASE_URL OPENAI_BASE_URLhttps://api.openai.com/v1 # 指定模型名称 MODELgpt-4o-mini # 数据库配置如果启用 # DB_PASSWORDyour_secure_password_here # 可选飞书机器人配置后续章节介绍 # FEISHU_APP_ID # FEISHU_APP_SECRET模型选择建议从网络资料中的企业实践来看Agent 执行复杂任务如编写代码、操作生产系统对 LLM 的要求比普通聊天更高。有两个关键维度上下文窗口建议 ≥ 128K最好 256K。因为 Agent 的多步任务会快速消耗上下文窗口太小会导致早期记忆被压缩或丢弃。代码与工具调用能力必须强。Agent 需要生成准确的 PySpark、kubectl 等命令语法错误会导致任务失败浪费计算资源。 根据实践反馈像 Kimi Chat 的 K2.5 模型256K 上下文在复杂任务中表现更稳定。你可以根据自身情况将OPENAI_BASE_URL和MODEL指向你选择的模型服务。3.3 初始化核心记忆文件在启动前我们可以预先创建或修改 Hermes 的核心记忆文件为其注入初始“人格”和“知识”。# 在 config 目录下创建初始记忆文件 cd ~/hermes-agent-deploy mkdir -p config # 创建 MEMORY.md - 定义 Agent 的长期记忆和核心原则 cat config/MEMORY.md EOF # Hermes Agent 核心记忆 ## 身份与目标 我是 Hermes一个自我进化的 AI 助手。我的核心目标是高效、准确地协助用户完成各种任务并从每次交互中学习变得更好。 ## 核心原则 1. **实用性优先**专注于提供可执行的解决方案而非空谈理论。 2. **安全边界**绝不执行可能危害系统安全、泄露隐私或违反法律法规的操作。 3. **持续学习**将成功的工作流提炼为 Skills供未来复用。 4. **诚实透明**如果不知道或不确定会明确告知而不是猜测。 ## 核心能力 - 文件读写与分析 - 代码编写与解释Python, Bash, SQL等 - 数据提取与处理 - 基于已有 Skills 自动化复杂工作流 - 通过工具与外部系统交互 EOF # 创建 USER.md - 定义关于用户的信息可根据实际情况修改 cat config/USER.md EOF # 用户档案 ## 主要用户 - **角色**开发者/工程师 - **目标**探索 AI Agent 技术搭建私有化助手自动化日常工作流。 - **技术栈**熟悉 Docker, Python, 命令行操作。 - **偏好**喜欢清晰的步骤、可复现的代码示例和深入的原理解释。 ## 交互历史摘要 用户正在部署和配置 Hermes Agent 的私有化实例。对 AI Agent 的持久化记忆和技能学习功能特别感兴趣。 EOF这些文件将在容器启动时被复制或映射到容器内的/app/data目录成为 Agent 的初始记忆。启动后Agent 会在对话中不断更新它们。4. 完整实战启动、验证与首次对话配置完成后现在让我们启动服务并进行验证。4.1 启动 Hermes Agent 服务在项目根目录执行以下命令cd ~/hermes-agent-deploy # 使用 docker-compose 启动服务-d 表示后台运行 docker-compose up -d首次运行会从 GitHub Container Registry 拉取镜像可能需要一些时间。你可以使用以下命令查看拉取和启动日志# 查看实时日志 docker-compose logs -f hermes # 或者查看服务状态 docker-compose ps当看到容器状态为Up (healthy)时表示服务已成功启动。4.2 访问 Web UI 并进行验证服务启动后打开你的浏览器访问http://localhost:8787。你应该能看到 Hermes 的 Web 用户界面。首次对话测试在聊天框中输入一些指令测试其基本功能。测试工具调用输入列出当前目录下的文件。预期行为Hermes 应该调用内置的list_files工具返回容器内/app目录的文件列表。这证明其工具调用能力正常。测试记忆写入输入记住我最喜欢的编程语言是 Python。预期行为Hermes 会尝试使用add_to_memory工具将这条信息写入USER.md。你可以通过查看宿主机上的./data/hermes/USER.md文件来验证是否添加成功。测试技能创建输入一个稍复杂的任务例如请编写一个Python函数用于计算斐波那契数列的第n项并保存这个技能。预期行为Hermes 会先编写函数代码然后尝试将其提炼为一个 Skill。完成后你可以询问你有什么可用的技能它应该能列出刚创建的技能。4.3 深入探索查看持久化数据所有交互产生的记忆和技能都保存在你挂载的本地目录中。让我们查看一下# 查看记忆文件 cat ./data/hermes/USER.md cat ./data/hermes/MEMORY.md # 查看技能目录如果已创建技能 ls -la ./data/hermes/skills/你会看到USER.md中可能已经更新了你刚才告诉它的信息。skills/目录下可能会出现以.json或.yaml结尾的技能文件里面结构化地存储了任务模板。5. 进阶实战为 Hermes 安装自定义 SkillSkill 是 Hermes 能力的扩展。除了 Agent 自动创建我们也可以手动为其安装预定义的 Skill。假设我们想让它具备“获取天气”的能力。5.1 创建自定义 Skill 文件在./data/hermes/skills/目录下创建一个新的技能文件。Hermes 的 Skill 遵循agentskills.io开放标准。mkdir -p ./data/hermes/skills cat ./data/hermes/skills/get_weather.skill.json EOF { name: get_weather, description: 获取指定城市的当前天气信息。, author: Manual Installation, version: 1.0.0, triggers: [ { type: command, pattern: ^(查询|获取|查看)?(.?)的天气$ }, { type: intent, intent: check_weather } ], steps: [ { action: http_request, parameters: { method: GET, url: https://api.openweathermap.org/data/2.5/weather?q{city}appid{API_KEY}unitsmetriclangzh_cn, headers: { User-Agent: Hermes-Agent/1.0 } }, output_variable: weather_response }, { action: parse_json, parameters: { json_string: {{weather_response.body}}, extract: { city: name, temp: main.temp, description: weather[0].description } }, output_variable: weather_data }, { action: format_message, parameters: { template: 城市{{weather_data.city}}\n温度{{weather_data.temp}}°C\n天气状况{{weather_data.description}} }, output_variable: final_message } ], requirements: [ 需要一个 OpenWeatherMap 的 API Key请替换 {API_KEY}。 ], examples: [ 查询北京的天气, 获取纽约的天气情况 ] } EOF技能文件解析triggers: 定义了触发此技能的条件可以是命令模式匹配或意图识别。steps: 定义了技能执行的步骤序列。这里模拟了调用天气 API、解析 JSON 和格式化输出的流程。requirements: 列出了技能运行所需的外部依赖这里需要真实的 API Key。5.2 让 Hermes 加载新技能技能文件创建后Hermes 不会自动加载。你需要通过对话触发其技能发现机制。在 Web UI 中输入更新你的技能列表。或扫描并加载新的技能。Hermes 会调用list_skills或类似工具发现新的get_weather.skill.json文件。加载成功后你可以测试查询北京的天气。注意由于我们使用的是模拟的 API URL 和假的 API Key这一步会失败。但这演示了技能加载和触发的完整流程。要使其真正工作你需要注册 OpenWeatherMap获取真实的 API Key并替换技能文件中的{API_KEY}和{city}参数逻辑可能需要使用更复杂的变量替换机制。这个实践展示了如何扩展 Hermes 的能力边界。在生产环境中你可以将团队常用的工作流如数据库查询、日志分析、部署操作封装成 Skills让 Agent 快速掌握。6. 常见问题与深度排查指南部署和运行过程中你可能会遇到一些问题。以下是常见问题的排查思路。6.1 服务启动失败问题现象可能原因排查步骤与解决方案docker-compose up报错Cannot connect to the Docker daemonDocker 服务未启动或当前用户无权限。1. 启动 Docker 服务sudo systemctl start docker(Linux)。2. 将用户加入 docker 组sudo usermod -aG docker $USER退出终端重新登录。拉取镜像超时或失败 (Error response from daemon)网络问题无法访问ghcr.io。1. 检查网络连接。2. 尝试配置 Docker 镜像加速器。3. 手动拉取docker pull ghcr.io/nousresearch/hermes:latest。容器启动后立即退出 (Exited (1))环境变量配置错误如OPENAI_API_KEY为空或无效。1. 检查.env文件是否存在且格式正确无多余空格。2. 查看详细日志docker-compose logs hermes。3. 确认 API Key 有余额且权限正确。端口冲突 (Bind for 0.0.0.0:8787 failed: port is already allocated)本地 8787 或 8642 端口被其他程序占用。1. 找出占用端口的进程lsof -i :8787(macOS/Linux) 或netstat -ano | findstr :8787(Windows)。2. 停止该进程或修改docker-compose.yml中的端口映射例如改为8788:8787。6.2 Web UI 无法访问或 Agent 无响应问题现象可能原因排查步骤与解决方案浏览器访问localhost:8787连接被拒绝Hermes 容器内的服务未成功启动。1. 确认容器状态docker-compose ps确保状态为Up。2. 进入容器检查进程docker exec -it hermes-agent /bin/bash查看端口监听netstat -tlnp。3. 检查应用日志docker-compose logs hermes | tail -50。Web UI 能打开但发送消息后长时间无回复LLM API 调用失败或超时。1.最重要检查容器日志中的 API 错误信息docker-compose logs hermes | grep -i error|timeout|invalid。2. 验证OPENAI_BASE_URL和MODEL是否与你的 API 服务匹配。3. 测试网络连通性在宿主机上curl你的 API 端点。4. 检查 API Key 的额度或速率限制。Agent 回复“我不知道如何做这个”请求未触发任何工具或技能或者模型不理解指令。1. 尝试更清晰、具体的指令例如“使用 list_files 工具查看当前目录”。2. 通过你有哪些可用的工具来确认 Agent 的工具箱是否正常加载。3. 检查config/和data/目录的挂载权限确保 Agent 可以读写。6.3 记忆与技能不持久化问题现象可能原因排查步骤与解决方案容器重启后之前的对话记忆和技能消失。Docker 卷 (volumes) 挂载失败或路径错误。1. 检查docker-compose.yml中的volumes映射路径是否正确。2. 查看宿主机对应目录 (./data/hermes) 是否有文件生成。3. 进入容器查看docker exec hermes-agent ls -la /app/data/确认文件存在且可写。Agent 无法加载手动创建的 Skill 文件。Skill 文件格式错误或未放在正确目录。1. 确认 Skill 文件放在容器内的/app/data/skills/目录对应宿主机的./data/hermes/skills/。2. 检查 JSON 格式是否正确可以使用jq工具或在线 JSON 校验器。3. 要求 Agent列出所有技能看它是否能识别到文件。6.4 性能与资源问题问题现象可能原因排查步骤与解决方案Agent 响应速度非常慢。1. LLM API 响应慢。2. 本地资源CPU/内存不足。3. 上下文过长导致处理慢。1. 监控 API 响应时间。2. 使用docker stats查看容器资源使用情况考虑调整docker-compose.yml中的cpus和memory限制。3. 对于长对话考虑是否开启了过长的上下文记忆。对话进行到后期Agent 似乎“忘记”了开头的内容。达到了 LLM 模型的上下文窗口限制早期信息被丢弃。1. 选择支持更长上下文的模型如 128K, 256K。2. 提醒 Agent “总结一下我们之前的对话要点”让其将关键信息浓缩后存入MEMORY.md。7. 生产级部署考量与最佳实践将 Hermes 用于个人学习与用于团队生产环境有着不同的要求。以下是从个人部署迈向生产环境时需要思考的关键点。7.1 安全加固给 Agent 戴上“紧箍咒”Agent 能够执行代码和系统命令这是一把双刃剑。在生产环境中安全是首要考量。最小权限原则容器层面在docker-compose.yml中考虑以非 root 用户运行容器。可以在 Dockerfile 构建阶段创建专用用户或在启动命令中指定user。文件系统确保挂载卷的权限设置正确避免 Agent 意外修改宿主机的敏感文件。网络隔离使用自定义的 Docker 网络并严格限制容器对外部网络的访问。如果不需要外网可以设置network_mode: “none”或仅允许访问特定的 API 端点。工具调用沙箱化对于代码执行类工具应运行在严格的沙箱环境中如pysandbox、seccomp等限制其系统调用和资源使用。网络请求工具应设置白名单禁止访问内网敏感地址。敏感信息管理绝对不要将 API Key、数据库密码等硬编码在 Skill 文件或配置文件中。使用 Docker Secrets、环境变量文件.env并确保.gitignore或专业的密钥管理服务如 HashiCorp Vault来管理密钥。在 Skill 中通过环境变量引用这些密钥。7.2 高可用与可观测性多实例与负载均衡对于关键业务可以考虑部署多个 Hermes 实例并通过 Nginx 或 HAProxy 进行负载均衡。需要确保后端的记忆存储如数据库是共享的。健康检查与自愈我们已经配置了 Docker 的healthcheck。在生产中可以结合监控系统如 Prometheus和告警工具如 AlertManager实现故障自动重启或通知。日志集中管理将容器的日志输出到标准输出Stdout/Stderr然后使用Fluentd、Loki或云厂商的日志服务进行收集、索引和查询便于问题追踪。监控指标考虑为 Hermes 添加简单的指标暴露端点如/metrics监控请求量、响应时间、工具调用成功率等。7.3 与现有系统集成接入企业通讯工具Hermes 支持飞书、钉钉等。这需要你在这些平台创建“自定义机器人”或“企业自建应用”获取App ID和App Secret并配置到 Hermes 的环境变量中。网络资料中提到的8642端口通常用于接收这些平台的 Webhook 回调。连接内部知识库通过开发自定义工具或 Skill让 Hermes 能够查询公司的 Wiki、CRM、ERP 等系统使其回答更具专业性。作为工作流触发器将 Hermes 集成到 CI/CD 流水线或自动化运维平台中。例如通过聊天指令触发部署、查询服务状态或分析日志。7.4 技能工程与管理技能版本化将 Skills 文件用 Git 进行版本管理。可以建立团队的 Skills 仓库方便共享、审核和回滚。技能测试建立技能的自动化测试流程确保新增或修改的技能不会破坏现有功能。技能库分类对技能进行分类管理如“数据查询”、“系统操作”、“代码生成”并建立技能文档方便团队成员了解和调用。通过以上步骤你不仅能在本地成功运行一个功能完整的 Hermes Agent更能理解其内部机制并掌握了将其推向更严肃应用场景的路径。从理解三层记忆到完成私有化部署再到规划生产级架构这个过程正是将前沿 AI Agent 技术转化为实际生产力的关键。 30款热门AI模型一站整合DeepSeek/GLM/Qwen 随心用限时 5 折。 点击领海量免费额度