从零搭建可私有化部署的AI Agent:Hermes三层记忆架构与实战指南

📅 2026/7/6 9:54:25
从零搭建可私有化部署的AI Agent:Hermes三层记忆架构与实战指南
30款热门AI模型一站整合DeepSeek/GLM/Qwen 随心用限时 5 折。 点击领海量免费额度最近在尝试将 AI Agent 从“玩具”升级为“生产力工具”时发现了一个普遍痛点很多教程要么停留在概念和 API 调用要么直接跳到复杂的云原生部署中间缺少一个平滑的、能跑在本地或内网的完整实践路径。特别是对于 Hermes Agent 这样以“自我进化”为核心的开源项目如何理解其独特的三层记忆架构并亲手搭建一个可私有化部署、能持续学习的智能体是很多开发者和团队关心的实际问题。本文将围绕 Hermes Agent从核心原理拆解开始带你一步步完成本地环境搭建、基础功能验证并最终实现一个可私有化部署的代码实战项目。无论你是想个人研究 AI Agent 的运行机制还是为团队搭建一个内部智能助手原型这篇文章都将提供从入门到精通的完整路径和可复现的代码。1. Hermes Agent 核心概念与架构解析在动手部署之前理解 Hermes Agent 的设计哲学和核心架构至关重要。这能帮助我们在后续配置和开发中做出正确的决策而不是盲目地复制命令。1.1 什么是 Hermes AgentHermes Agent 是由 Nous Research 开发并采用 MIT 协议开源的一款 AI Agent 框架。与市面上许多“一次性对话”或“仅依赖上下文”的 Agent 不同Hermes 的核心定位是“自我进化的 AI 助手”。它的目标是让 Agent 能够从与用户的每一次交互中学习沉淀经验并在未来的任务中复用这些经验从而变得越来越聪明和高效。简单来说你可以把它想象成一个拥有长期记忆和自学能力的数字员工。它不会每次重启都“失忆”而是能将解决问题的步骤固化为可复用的“技能”Skill。1.2 三层记忆系统Hermes 的“大脑”这是 Hermes 区别于其他框架最显著的特点。其记忆系统分为三个层次共同构成了 Agent 的持久化智能。记忆层名称容量作用存储方式Layer 1冻结系统提示记忆有限约3.5K字符定义 Agent 的初始人格、核心指令和关键约束。在每次会话开始时强制注入。文本文件 (MEMORY.md,USER.md)Layer 2程序性技能记忆动态扩展Agent 成功完成复杂任务后自动将步骤提炼、抽象为可复用的Skill。Skill 文件遵循 agentskills.io 标准Layer 3会话搜索记忆近乎无限受磁盘限制索引所有历史对话通过全文检索SQLite FTS5快速找到相关历史并由 LLM 摘要后注入当前上下文。SQLite 数据库为什么这样设计Layer 1 的有限性刻意限制容量迫使 Agent 必须对记忆进行高质量地“策展”curate只保留最重要、最通用的信息通过add/replace/remove指令进行维护避免了提示词无限膨胀导致的性能下降和成本激增。Layer 2 的技能化这是实现“自我进化”的关键。当用户要求“分析上周销售数据”时Hermes 不仅完成本次任务还会生成一个名为analyze_sales_data的 Skill。下次遇到类似请求它会直接匹配并调用这个 Skill大幅提升效率和准确性。这形成了一个Do → Learn → Improve的闭环。Layer 3 的实用性没有使用复杂的向量数据库而是选择了 SQLite 的 FTS5 全文搜索引擎。这是一个非常务实的工程选择零外部依赖、部署简单、精确匹配性能好特别适合本地或私有化场景。1.3 核心能力概览除了记忆系统Hermes 还提供了一系列开箱即用的能力使其能胜任多种任务丰富的内置工具40包括文件读写、网络搜索、代码执行、系统命令等。子 Agent 委派可以将复杂任务分解创建专门的子 Agent 去完成。定时任务Cron支持配置定时执行的自动化任务。多平台 IM 接入原生支持接入飞书、钉钉、企业微信、微信、Slack、Discord 等主流通讯工具。外部记忆提供者可扩展集成如 Honcho 等外部系统用于更复杂的用户建模和记忆管理。理解这些核心概念后我们就可以开始准备环境亲手运行一个 Hermes Agent 了。2. 环境准备与本地快速启动我们将从最简单的本地部署开始这是理解 Hermes 工作流程的最佳方式。建议使用 Linux 或 macOS 系统Windows 用户可以通过 WSL2 获得接近 Linux 的体验。2.1 基础环境要求操作系统Ubuntu 20.04/22.04 LTS, macOS, 或 Windows WSL2 (推荐 Ubuntu 发行版)。Python版本 3.10 或 3.11。这是运行 Hermes 的必需环境。Docker 与 Docker Compose用于容器化部署可选但推荐用于生产环境模拟。Git用于克隆代码仓库。LLM API 密钥Hermes 本身是一个框架需要接入大语言模型才能工作。我们将使用 Kimi Chat 的 API 作为示例你也可以替换为 OpenAI、DeepSeek 等兼容 OpenAI 格式的模型。2.2 步骤一克隆代码与安装依赖首先我们获取 Hermes Agent 的官方代码。# 1. 克隆 Hermes Agent 仓库 git clone https://github.com/NousResearch/Hermes.git cd Hermes # 2. 创建并激活 Python 虚拟环境强烈推荐避免污染系统环境 python3 -m venv venv source venv/bin/activate # Linux/macOS # 对于 Windows (cmd): venv\Scripts\activate # 对于 Windows (PowerShell): .\venv\Scripts\Activate.ps1 # 3. 安装核心依赖 pip install -r requirements.txt2.3 步骤二配置模型 API 与基础设置Hermes 的配置主要通过环境变量和配置文件管理。我们创建一个.env文件来存放敏感信息。# 在 Hermes 项目根目录下创建 .env 文件 touch .env编辑.env文件填入你的模型 API 配置。这里以 Kimi Chat API 为例# .env 文件内容 # 使用 Kimi Chat API (Moonshot) OPENAI_API_BASEhttps://api.moonshot.cn/v1 OPENAI_API_KEY你的-kimi-api-key-here OPENAI_MODEL_NAMEmoonshot-v1-8k # 或 moonshot-v1-32k, moonshot-v1-128k # 如果你想使用 OpenAI 官方 API则配置如下 # OPENAI_API_BASEhttps://api.openai.com/v1 # OPENAI_API_KEYsk-your-openai-key # OPENAI_MODEL_NAMEgpt-4o-mini # Hermes 基础配置 AGENT_NAMEMyHermesAssistant LOG_LEVELINFO重要说明请将你的-kimi-api-key-here替换为你从 Kimi 开放平台获取的真实 API Key。OPENAI_MODEL_NAME需要与你 API 套餐支持的模型名称一致。确保.env文件被添加到.gitignore中避免密钥泄露。2.4 步骤三首次运行与交互配置完成后我们可以用最简单的命令行模式启动 Hermes进行第一次对话。# 确保在虚拟环境中并在项目根目录下 # 加载 .env 环境变量并启动 Hermes 的 CLI 模式 python -m hermes.cli如果一切顺利你会看到类似以下的启动日志并进入一个交互式命令行界面Loading configuration from .env... Initializing Hermes Agent: MyHermesAssistant Memory system initialized. Found 0 existing skills. Hermes is ready. Type your message below. 现在你可以像和 ChatGPT 一样与它对话了。尝试问它“你好请介绍一下你自己。” 它会基于MEMORY.md中定义的初始人格来回答。首次对话后的目录变化 运行后Hermes 会在项目目录下创建几个新的文件夹和文件这是它记忆系统的物理体现./memory/存放 Layer 1 的记忆文件 (MEMORY.md,USER.md)。./skills/存放 Layer 2 自动生成的技能文件 (.json格式)。./sessions/存放 Layer 3 的会话数据库 (sessions.db)。./workspace/Agent 执行任务如写文件的工作区。至此你已经成功在本地运行了一个具有持久化记忆能力的 Hermes Agent。接下来我们将深入其核心功能并学习如何管理它的记忆。3. 核心功能实战记忆管理与技能学习本节我们将通过实际操作理解 Hermes 三层记忆系统是如何工作的并学会如何引导它学习和使用技能。3.1 管理 Layer 1系统提示与用户记忆Layer 1 记忆文件是 Agent 的“基础人格”。你可以直接编辑这些文件来塑造 Agent 的行为。# 查看并编辑核心记忆文件 cat ./memory/MEMORY.md cat ./memory/USER.md # 你可以使用任何文本编辑器修改它们例如 # nano ./memory/MEMORY.mdMEMORY.md通常包含 Agent 的核心指令、行为规范和能力描述。USER.md则包含关于用户你的特定信息比如你的职业、偏好等。修改后重启 Hermes新的记忆就会生效。实战操作在USER.md末尾添加一行- The user is a software developer interested in Python and cloud technologies.重启 Hermes 后再问它“我喜欢用什么编程语言”观察它的回答是否包含了新信息。3.2 见证 Layer 2 的技能生成与调用这是 Hermes 最强大的功能。我们通过一个复杂任务来触发技能学习。提出一个多步骤任务在 Hermes CLI 中输入以下指令请帮我分析当前目录下所有 Python 文件.py统计每个文件的行数并将结果按照行数从多到少排序输出到一个名为python_file_stats.txt的文件中。观察 Agent 的执行过程Hermes 会开始“思考”分解任务并调用内置的execute_python或list_files、read_file等工具来完成任务。整个过程是自动的。任务完成与技能生成任务成功后Hermes 通常会输出类似这样的信息Task completed. Ive analyzed the Python files and saved the results. I have also created a new skill analyze_python_files_by_lines based on this task for future use.查看生成的技能ls ./skills/ # 你会看到一个类似 skill_analyze_python_files_by_lines_20250321.json 的文件 cat ./skills/skill_analyze_python_files_by_lines_*.json | jq . # 使用 jq 美化输出这个 JSON 文件描述了任务的模式、所需的工具、步骤逻辑等。下次你提出类似“分析这个项目的 Java 文件行数”时Hermes 会尝试匹配并复用这个技能。3.3 利用 Layer 3基于历史会话的上下文检索Layer 3 的记忆是自动工作的。当你进行新的对话时Hermes 会自动使用 SQLite FTS5 检索整个历史会话数据库找到与当前问题最相关的历史对话片段并让 LLM 将其摘要后作为上下文的一部分送给模型。你可以通过查询会话来验证# Hermes 使用 SQLite我们可以直接查看会话数据库 sqlite3 ./sessions/sessions.db在 SQLite 提示符下执行.tables -- 你会看到 messages 等表 SELECT COUNT(*) FROM messages; SELECT DISTINCT session_id FROM messages LIMIT 5; .exit这证明了你的所有对话都被持久化记录了下来。当你问“我们上次讨论的那个文件分析任务的结果是什么”时Hermes 正是利用这个数据库来找到相关信息的。4. 私有化部署实战Docker Compose 方案本地 CLI 模式适合开发调试但要提供稳定的服务如 Web UI 或对接飞书机器人我们需要进行容器化部署。下面使用 Docker Compose 搭建一个包含 Web UI 的完整 Hermes 服务。4.1 项目结构与配置文件创建一个新的项目目录来管理我们的部署配置。mkdir hermes-private-deploy cd hermes-private-deploy创建以下文件结构hermes-private-deploy/ ├── docker-compose.yml ├── .env ├── config/ │ └── hermes_config.yaml └── data/ ├── memory/ ├── skills/ ├── sessions/ └── workspace/4.2 编写 Docker Compose 配置docker-compose.yml是核心它定义了 Hermes 服务及其依赖。version: 3.8 services: hermes: # 使用官方镜像或自己构建的镜像 image: nousresearch/hermes:latest container_name: hermes-agent restart: unless-stopped ports: - 8787:8787 # Hermes 原生 WebUI 端口 - 8642:8642 # 飞书等 IM 机器人回调端口如果需要 environment: - OPENAI_API_BASE${OPENAI_API_BASE} - OPENAI_API_KEY${OPENAI_API_KEY} - OPENAI_MODEL_NAME${OPENAI_MODEL_NAME} - AGENT_NAME${AGENT_NAME:-MyPrivateHermes} - LOG_LEVELINFO - WEBUI_ENABLEDtrue # 启用内置 WebUI volumes: # 将本地数据目录挂载到容器内实现数据持久化 - ./data/memory:/app/memory - ./data/skills:/app/skills - ./data/sessions:/app/sessions - ./data/workspace:/app/workspace # 挂载自定义配置文件可选 - ./config/hermes_config.yaml:/app/config.yaml:ro networks: - hermes-net # 可选部署一个更友好的社区版 WebUI (hermes-webui) hermes-webui: image: ghcr.io/some-community/hermes-webui:latest # 请替换为实际镜像 container_name: hermes-webui restart: unless-stopped ports: - 3000:3000 environment: - HERMES_BACKEND_URLhttp://hermes:8787 depends_on: - hermes networks: - hermes-net networks: hermes-net: driver: bridge4.3 配置环境变量与 Agent 参数编辑.env文件内容与本地测试时类似但可以更完善# 模型 API 配置 OPENAI_API_BASEhttps://api.moonshot.cn/v1 OPENAI_API_KEY你的-kimi-api-key OPENAI_MODEL_NAMEmoonshot-v1-128k # 推荐使用长上下文模型 # Agent 基础配置 AGENT_NAMECompanyInternalAssistant LOG_LEVELINFO # 网络与安全配置示例 # ALLOWED_ORIGINShttp://localhost:3000,http://your-domain.com # AUTH_TOKENyour-secure-token-if-needed编辑config/hermes_config.yaml进行更细致的控制# hermes_config.yaml agent: name: ${AGENT_NAME} # 设置时区 timezone: Asia/Shanghai memory: # 技能匹配的相似度阈值越高越严格 skill_similarity_threshold: 0.78 # 每次会话最多注入的历史摘要数量 max_history_injections: 3 tools: # 启用或禁用特定工具组 enable_code_execution: true enable_file_operations: true enable_web_search: false # 内网部署可关闭网络搜索 webui: enabled: true host: 0.0.0.0 port: 8787 # 飞书机器人配置如果需要 # feishu: # app_id: your_app_id # app_secret: your_app_secret # encryption_key: your_encryption_key4.4 启动与验证服务一切就绪后使用 Docker Compose 启动服务。# 在 hermes-private-deploy 目录下执行 docker-compose up -d # 查看日志确认服务启动正常 docker-compose logs -f hermes # 检查容器状态 docker-compose ps如果看到hermes-agent和hermes-webui(如果部署了) 状态为Up则说明启动成功。访问服务原生 WebUI打开浏览器访问http://你的服务器IP:8787。你会看到一个简单的终端式 Web 界面。社区 WebUI如果部署了hermes-webui访问http://你的服务器IP:3000通常会有一个更现代、聊天体验更好的界面。现在你已经拥有了一个在后台持续运行、记忆持久化、可通过浏览器访问的私有化 Hermes Agent 服务。5. 进阶集成连接飞书机器人将 Hermes 接入日常办公软件如飞书能极大提升其实用性。下面演示如何配置飞书机器人让 Hermes 在群聊中为你服务。5.1 在飞书开放平台创建应用登录 飞书开放平台 。进入“开发者后台”点击“创建企业自建应用”。填写应用名称如Hermes智能助手并上传图标。在应用功能中启用“机器人”能力。在“事件订阅”中配置请求地址http://你的公网IP或域名:8642/feishu/event。注意这要求你的部署服务器有公网 IP 或通过内网穿透暴露端口。在“权限管理”中为机器人添加以下权限contact:user.id:readonly(获取用户ID)、im:message(发送和接收消息)。在“事件订阅”中订阅im.message.receive_v1事件。在“凭证与基础信息”中获取App ID、App Secret和Encryption Key。5.2 配置 Hermes 的飞书集成更新你的docker-compose.yml中hermes服务的环境变量和端口映射# 在 hermes 服务的 environment 部分添加 environment: - OPENAI_API_BASE${OPENAI_API_BASE} - OPENAI_API_KEY${OPENAI_API_KEY} - OPENAI_MODEL_NAME${OPENAI_MODEL_NAME} - AGENT_NAME${AGENT_NAME} - LOG_LEVELINFO - WEBUI_ENABLEDtrue # 飞书配置 - FEISHU_APP_ID${FEISHU_APP_ID} - FEISHU_APP_SECRET${FEISHU_APP_SECRET} - FEISHU_ENCRYPTION_KEY${FEISHU_ENCRYPTION_KEY} - FEISHU_VERIFICATION_TOKEN${FEISHU_VERIFICATION_TOKEN} # 在事件订阅页面 # 确保 8642 端口已映射 ports: - 8787:8787 - 8642:8642 # 飞书事件回调端口在.env文件中补充飞书配置# 飞书机器人配置 FEISHU_APP_IDcli_xxxxxx FEISHU_APP_SECRETxxxxxxxxxxxx FEISHU_ENCRYPTION_KEYxxxxxxxxxxxx FEISHU_VERIFICATION_TOKENxxxxxxxxxxxx5.3 重启服务并验证# 更新配置后重启服务 docker-compose down docker-compose up -d # 查看飞书相关日志 docker-compose logs hermes | grep -i feishu在飞书开放平台点击“事件订阅”中的“保存”平台会向你的回调地址 (http://你的IP:8642/feishu/event) 发送一个验证请求。如果日志显示验证成功则配置完成。最后在飞书开放平台“版本管理与发布”中创建版本并申请发布。审核通过后即可在飞书群中你的机器人进行对话。6. 生产环境考量与最佳实践将 Hermes Agent 用于生产环境或团队内部时需要关注安全、稳定性和性能。6.1 安全加固建议层面风险点加固措施API 密钥模型 API Key 泄露导致盗用和费用损失。1. 永远不要将密钥硬编码在代码或镜像中。2. 使用 Docker Secrets、K8s Secrets 或云服务商密钥管理服务如 AWS Secrets Manager。3. 在.env文件中配置并通过docker-compose的env_file或secrets字段引入。网络暴露WebUI 或 API 端口暴露在公网未授权访问。1. 使用反向代理如 Nginx并配置 HTTPS。2. 设置防火墙规则仅允许特定 IP 或 VPN 网段访问。3. 为 WebUI 添加基础认证Basic Auth或集成 OAuth2。工具权限Agent 可执行任意代码和系统命令存在安全风险。1. 在config.yaml中严格限制工具enable_shell: falseenable_code_execution: false如果不需要。2. 在 Docker 中运行使用非 root 用户并限制容器能力cap_drop: ALL。3. 对workspace目录进行严格的权限控制。数据持久化记忆和会话数据包含敏感信息。1. 确保挂载的数据卷./data权限正确避免其他用户读取。2. 考虑对磁盘进行加密。3. 定期备份data目录。6.2 性能与稳定性优化模型选择对于复杂的多步任务和长上下文记忆强烈建议使用上下文窗口 ≥ 128K 的模型如 Kimi moonshot-v1-128k。上下文过小会导致历史记忆被过早截断影响 Agent 的连贯性。资源限制在docker-compose.yml中为容器设置资源限制防止单个 Agent 消耗过多资源影响宿主。services: hermes: # ... deploy: resources: limits: cpus: 2.0 memory: 4G reservations: cpus: 0.5 memory: 1G日志与监控配置集中式日志收集如 ELK Stack并监控关键指标API 调用耗时、Token 消耗、技能调用频率、容器资源使用率等。高可用部署对于关键业务考虑使用 Kubernetes 部署多个 Hermes 实例并通过负载均衡器分发请求。注意需要共享存储如 NFS、云存储来保证所有实例访问同一份data目录否则记忆会不一致。6.3 技能Skill的工程化管理随着使用深入Skill 库会不断增长需要像管理代码一样管理它们。版本控制将./data/skills/目录纳入 Git 仓库管理。可以定期审查、合并和清理 Skill。Skill 预置对于团队可以创建一套“标准技能库”在初始化时放入skills目录让新部署的 Agent 立刻具备某些领域能力如“生成周报模板”、“查询内部系统API”。Skill 审核建立简单的审核流程对 Agent 自动生成的 Skill 进行人工确认后再纳入“标准库”避免有问题的技能被反复调用。7. 常见问题排查 (FAQ)在部署和使用过程中你可能会遇到以下问题问题现象可能原因排查步骤与解决方案启动失败ModuleNotFoundErrorPython 依赖未正确安装或虚拟环境未激活。1. 确认在venv虚拟环境中 (which python)。2. 在项目根目录重新执行pip install -r requirements.txt。3. 检查 Python 版本是否为 3.10。WebUI 无法访问 (Connection refused)服务未启动或端口被占用/防火墙阻止。1.docker-compose ps确认服务状态。2.docker-compose logs hermes查看错误日志。3. 检查服务器防火墙是否放行了 8787 或 3000 端口。Agent 回复 “Im sorry, I dont know how to do that.”未正确配置模型 API 或 API Key 无效。1. 检查.env文件中的OPENAI_API_KEY和OPENAI_API_BASE。2. 尝试用curl直接调用 API 验证密钥有效性。3. 查看 Hermes 日志确认模型调用是否返回了认证错误。飞书机器人收不到消息回复回调地址配置错误、网络不通或权限不足。1. 在飞书开放平台“事件订阅”中确保“请求地址”完全正确且能被公网访问。2. 使用curl或ngrok等工具测试回调地址可达性。3. 检查 Docker 日志中飞书相关的验证和事件处理信息。4. 确认机器人已获取“获取用户 ID”和“收发消息”权限。技能Skill没有被正确调用技能相似度阈值设置过高或任务描述差异太大。1. 检查config.yaml中的skill_similarity_threshold可适当调低如 0.7。2. 在提出请求时使用与生成技能时更相似的表述。3. 手动查看skills/目录下的 JSON 文件理解技能匹配的“模式”。容器内无法写入workspace目录Docker 卷挂载的权限问题。1. 检查宿主机./data/workspace目录的权限确保 Docker 进程用户有写权限。2. 可以在docker-compose.yml中指定用户user: “1000:1000”(替换为你的 uid:gid)。3. 在容器启动命令中创建目录并修改权限。通过以上步骤你应该已经完成了从理解 Hermes Agent 原理到本地开发测试再到私有化容器部署和集成的完整流程。这个由 Nous Research 打造的框架以其独特的三层记忆和技能学习机制为构建真正“可进化”的 AI 助手提供了强大的基础。无论是用于个人效率工具还是作为团队内部的知识协作中枢Hermes 都展现出了巨大的潜力。接下来的探索方向可以是结合 RAG 技术增强其专业知识库或是将其接入更多的企业内部系统打造一个真正理解业务、持续成长的数字员工。 30款热门AI模型一站整合DeepSeek/GLM/Qwen 随心用限时 5 折。 点击领海量免费额度