在实际 AI 代理开发领域从简单的聊天机器人到能够自主执行复杂任务、持续学习和进化的智能体是一个巨大的跨越。Hermes Agent 正是这样一个旨在实现后者愿景的开源项目它由 Nous Research 团队构建其核心设计理念是“伴随你成长的代理”。这意味着它不仅仅是一个执行预设指令的工具而是一个具备内置学习循环的系统它能从经验中创建技能在使用中改进技能主动提示自己保存知识搜索过去的对话并跨会话构建一个不断深化的用户模型。对于开发者、研究者和技术爱好者而言掌握 Hermes Agent 意味着能够构建真正具备“成长性”的 AI 应用无论是用于个人效率自动化、复杂问题求解还是作为研究下一代 AI 代理行为的平台。本文将带你从零开始全面掌握 Hermes Agent。我们将从核心概念和工作机制入手然后完成在主流操作系统包括 Windows、macOS、Linux 及 WSL上的环境准备与安装。接着我们会通过一个完整的代码实战案例演示如何配置、启动并与 Hermes Agent 交互并深入其技能系统、工具集和消息网关等关键特性。最后我们会探讨生产环境部署的考量、常见问题的排查路径以及最佳实践帮助你构建一个稳定、可扩展且真正“会学习”的 AI 代理系统。1. 理解 Hermes Agent 的核心架构与设计哲学在动手安装和编码之前理解 Hermes Agent 的设计目标和工作机制至关重要。这能帮助你在后续配置和开发中做出正确的决策而不是盲目地复制命令。1.1 什么是“自我改进的 AI 代理”传统的 AI 代理如基于 LangChain 或 AutoGPT 构建的通常在单次会话中运行其能力在部署时就被固定了。虽然它们可以调用工具但缺乏跨会话的记忆、反思和技能进化能力。Hermes Agent 的核心创新在于其内置的学习循环。这个循环包含几个关键环节技能创建当代理完成一个复杂任务后它会分析自己的行动轨迹并尝试将成功的步骤序列抽象、封装成一个可复用的“技能”。这个技能会被命名、描述并存储起来。技能改进当下次遇到类似任务时代理会调用已有的技能。在执行过程中如果发现更优的路径或遇到了新情况它可以动态地更新和优化该技能的定义。记忆与提示代理拥有一个结构化的记忆系统它会定期“提示”自己将重要的对话片段、用户偏好或任务结果保存到长期记忆中。这避免了信息在会话结束后丢失。会话搜索与回忆所有历史会话都被索引使用 FTS5代理可以通过自然语言搜索过去的对话。LLM 会对搜索结果进行总结实现跨会话的上下文回忆。用户建模代理使用 Honcho 辩证用户建模方法跨会话构建并深化对用户目标、偏好和背景的理解模型。简单来说Hermes Agent 试图模拟一个“学徒”的成长过程从执行具体指令开始逐渐形成自己的工作方法技能并随着对你的了解加深而变得更高效、更贴心。1.2 核心组件与数据流要有效使用和开发 Hermes Agent你需要对其主要组件有一个清晰的认知代理核心这是大脑负责理解用户意图、规划任务、调用工具、管理记忆和学习循环。它通过配置的 LLM如 GPT-4、Claude 3、本地模型等进行推理。工具系统代理的手和脚。Hermes 内置了 40 多种工具涵盖文件操作、网络搜索、代码执行、图像生成等。更重要的是它支持工具集和MCP 集成可以轻松扩展能力。技能系统代理的经验库。技能是封装好的、可重复执行的工作流程。用户创建的技能和社区共享的技能通过 Skills Hub构成了代理的“肌肉记忆”。消息网关代理的耳朵和嘴巴。这是一个独立的进程负责连接 Telegram、Discord、Slack、WhatsApp、Signal 等外部平台让代理可以脱离 CLI在任意聊天工具中与你交互。记忆存储代理的长期记忆。包括会话历史、用户档案、技能定义等通常存储在~/.hermes目录下的结构化文件中。调度器代理的闹钟。内置的 cron 调度器允许你设置定时任务如每日报告、定期备份并用自然语言描述代理会自动执行。数据流大致如下用户通过 CLI 或消息网关发送指令 - 代理核心结合记忆和当前上下文理解意图 - 规划步骤可能调用现有技能或工具 - 执行并观察结果 - 更新记忆可能创建或改进技能 - 返回结果给用户。1.3 关键概念工具集、MCP 与终端后端工具集一组相关工具的集合。例如web工具集可能包含搜索和浏览工具code工具集包含读写文件、执行代码的工具。你可以通过hermes tools命令动态启用或禁用整个工具集精细控制代理的能力边界。MCP模型上下文协议。这是一个新兴标准允许外部服务器以标准化的方式向 LLM 应用如 Hermes Agent暴露工具和资源。通过 MCP你可以轻松集成数据库、内部 API、特定硬件等而无需修改 Hermes 核心代码。终端后端代理执行命令的环境。Hermes 支持六种后端这决定了它在哪里以及如何运行命令local在运行 Hermes 的本地机器上执行。docker在 Docker 容器中执行提供更好的隔离性。ssh通过 SSH 在远程服务器上执行。singularity在 Singularity 容器中执行常用于 HPC 环境。modal在 Modal 的无服务器平台上执行按需付费。daytona在 Daytona 的无服务器平台上执行同样按需付费。选择不同的后端直接影响代理的权限、资源隔离性和运行成本。对于学习和开发local后端最简单对于生产或运行不受信任的代码docker后端更安全。2. 环境准备与跨平台安装指南Hermes Agent 的安装过程已经高度自动化但不同平台仍有细微差别。确保你的环境满足基本要求并选择正确的安装路径。2.1 系统要求与前置依赖在安装 Hermes 之前请确认你的系统环境组件最低要求推荐版本说明操作系统Windows 10/11, macOS 10.15, Linux (glibc 2.31), WSL2最新稳定版原生 Windows、macOS、Linux 及 WSL2 均官方支持。Python3.113.11 - 3.12Hermes 使用uv管理 Python 环境但系统仍需有可用的 Python 3.11 解释器。内存4 GB RAM8 GB RAM 或更多运行 LLM 本地模型需要更多内存。存储2 GB 可用空间10 GB 或更多用于安装 Hermes、Python 包、模型缓存等。网络可访问互联网稳定的连接安装依赖、下载模型、调用 API 需要网络。特别注意Hermes 的安装脚本会自动处理大部分依赖如uv,Node.js,ripgrep,ffmpeg,git。但在某些 Linux 发行版上可能需要手动安装一些基础开发工具。如果你计划使用docker后端则需要预先安装 Docker Desktop 或 Docker Engine。2.2 安装步骤Linux/macOS/WSL2对于 Linux、macOS 以及 Windows 下的 WSL2 子系统安装命令是一致的。打开你的终端Terminal, iTerm2, WSL2 的 bash/zsh 等执行以下命令curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash这个一键安装脚本会完成以下工作在$HOME/.hermes目录下创建 Hermes 的专属环境。下载并安装uv一个快速的 Rust 编写的 Python 包管理器。使用uv创建独立的 Python 虚拟环境并安装 Hermes Agent 及其所有依赖。安装必要的二进制工具如rg,ffmpeg。将 Hermes 的命令行工具添加到你的 shell 配置文件~/.bashrc或~/.zshrc中。安装完成后必须重新加载你的 shell 配置否则hermes命令可能找不到。# 如果你使用 bash source ~/.bashrc # 如果你使用 zsh source ~/.zshrc现在你可以通过运行hermes来验证安装是否成功并启动交互式 CLI。hermes --version # 预期输出类似hermes, version 0.17.02.3 安装步骤原生 WindowsHermes 完全支持原生 Windows 环境无需 WSL。你需要以管理员身份打开PowerShell。在开始菜单搜索 “PowerShell”右键点击并选择“以管理员身份运行”。在 PowerShell 中执行以下命令iex (irm https://hermes-agent.nousresearch.com/install.ps1)这个 PowerShell 脚本会在%LOCALAPPDATA%\hermes通常是C:\Users\你的用户名\AppData\Local\hermes下安装 Hermes。下载uv、Python 3.11、Node.js、ripgrep、ffmpeg 等。如果系统没有 Git它会下载一个便携版的 MinGit约 45MB放在%LOCALAPPDATA%\hermes\git完全独立于系统已安装的 Git。将 Hermes 的二进制目录添加到用户的 PATH 环境变量中。安装完成后关闭并重新打开一个新的 PowerShell 窗口非管理员模式即可以使 PATH 生效。然后可以测试hermes --version2.4 安装步骤Android/Termux在 Termux 上安装需要一些手动步骤因为完整的[all]依赖包含一些与 Android 不兼容的语音组件。建议的安装路径如下在 Termux 中操作# 1. 更新包管理器并安装基础依赖 pkg update pkg upgrade -y pkg install python git curl wget -y # 2. 安装 uv (Python 包管理器) curl -LsSf https://astral.sh/uv/install.sh | sh # 3. 重新启动 Termux 会话或 source 配置 source $HOME/.bashrc # 4. 使用 uv 创建虚拟环境并安装 Hermes指定 termux 额外依赖 uv venv $HOME/.hermes/venv --python 3.11 source $HOME/.hermes/venv/bin/activate # 5. 安装 Hermes 及其核心依赖避免安装不兼容的语音包 uv pip install hermes-agent[termux]安装后每次使用前需要先激活虚拟环境source $HOME/.hermes/venv/bin/activate然后运行hermes。2.5 安装后验证与初始化配置无论通过哪种方式安装首次运行hermes命令时它可能会引导你进行一些初始设置。但更推荐使用官方的设置向导它更全面。# 运行交互式设置向导它会引导你配置模型提供商、API 密钥等。 hermes setup设置向导会询问一系列问题例如选择默认的 LLM 提供商如 OpenAI, Anthropic, OpenRouter, Nous Portal 等。输入对应提供商的 API 密钥。配置消息网关如 Telegram bot token。选择默认的工具集。如果你想快速体验并且不想手动收集多个 API 密钥模型、搜索、图像生成、TTS 等可以使用 Nous Portal。它提供了一个统一的订阅覆盖了所有这些服务。# 使用 Nous Portal 进行一键式设置 hermes setup --portal这个命令会打开浏览器进行 OAuth 登录然后自动配置 Nous 作为你的提供商并启用工具网关。3. 核心功能实战从 CLI 交互到技能开发安装配置完成后我们进入实战环节。我们将通过 CLI 与 Hermes 交互了解其基本命令然后深入其技能系统并最终创建一个自定义技能。3.1 基础 CLI 交互与常用命令启动 Hermes 的交互式终端界面hermes你会看到一个带有提示符的 TUI 界面。你可以直接输入自然语言指令例如“帮我列出当前目录下的所有 Python 文件。” Hermes 会思考、规划并可能调用ls、find等工具来完成任务。除了自然语言Hermes 支持丰富的斜杠命令命令功能示例/new或/reset开始一个新的对话会话。/new/model切换使用的 LLM 模型。/model openai:gpt-4o/personality为代理设置一个预设的人格/角色。/personality coder/tools管理启用的工具集。/tools enable web/skills列出所有可用技能。/skills/compress压缩当前对话的上下文以节省 token。/compress/usage查看当前会话的 token 使用情况。/usage/stop中断代理当前正在执行的任务。输入/stop或直接按CtrlC(CLI)/help显示所有可用命令的帮助信息。/help你可以通过hermes --help查看所有全局命令在 CLI 界面中输入/help查看会话内命令。3.2 配置详解模型、工具与记忆Hermes 的配置主要存储在~/.hermes/config.yamlLinux/macOS或%LOCALAPPDATA%\hermes\config.yamlWindows中。你可以直接编辑这个文件但更推荐使用hermes config命令来管理。1. 配置 LLM 模型模型是代理的“大脑”。Hermes 支持众多提供商。# 查看当前配置的模型 hermes model # 交互式选择模型提供商和具体模型 hermes model --interactive # 直接设置模型 hermes model set openai:gpt-4o-mini # 或者编辑 config.yaml 中的 default_model 字段2. 管理工具集工具决定了代理能“做”什么。安全起见默认可能只启用部分基础工具。# 列出所有可用的工具集及其状态 hermes tools list # 启用 web 工具集包含搜索等功能 hermes tools enable web # 禁用 code 工具集 hermes tools disable code # 查看某个工具集的详细信息 hermes tools info files3. 理解记忆系统Hermes 的记忆存储在~/.hermes/memory/目录下。重要的文件包括MEMORY.md: 存储代理认为重要的长期事实。USER.md: 存储关于用户的信息和偏好。skills/: 目录存放所有用户和系统技能。代理会定期或在特定触发条件下提示你“是否要将刚才关于 X 的讨论保存到记忆” 你可以同意或拒绝。这种主动的、由代理驱动的记忆形成是其学习循环的关键部分。3.3 技能系统实战创建你的第一个自动化技能技能是 Hermes 学习能力的核心体现。假设我们经常让 Hermes 获取某个城市的天气并生成一份穿衣建议报告。我们可以将这个流程固化为一个技能。步骤 1在对话中自然形成技能首先通过自然语言让 Hermes 完成一次完整的任务。你 请获取北京当前的天气并根据天气情况给我一份穿衣建议。 Hermes: 它会调用网络搜索工具查询天气然后分析数据生成一份包含温度、湿度、风速和穿衣建议的报告。任务成功后Hermes可能会主动提示“我刚才完成了获取天气和生成穿衣建议的任务。你想让我把这个过程保存为一个可重复使用的技能吗” 如果它没有提示你也可以主动询问“你能把刚才这个‘获取天气穿衣建议’的流程创建成一个技能吗”步骤 2技能的定义与存储如果同意创建Hermes 会生成一个技能定义文件并保存到~/.hermes/skills/目录下。技能文件通常是一个.json或.yaml文件包含了技能的名称、描述、触发模式、所需的工具以及执行步骤的抽象。步骤 3手动创建与编辑技能我们也可以手动创建更复杂的技能。在~/.hermes/skills/目录下创建一个新文件例如fetch_github_stats.yaml# ~/.hermes/skills/fetch_github_stats.yaml name: fetch_github_stats description: 获取指定 GitHub 仓库的 star 数、fork 数和最近更新时间。 trigger_patterns: - “查看 {repo} 的 GitHub 数据” - “获取 {repo} 的仓库信息” - “{repo} 的 star 数是多少” parameters: repo: type: string description: GitHub 仓库的完整路径如 NousResearch/hermes-agent steps: - action: web_search args: query: “{repo} site:github.com stars forks latest commit” - action: extract_and_summarize # 这里 extract_and_summarize 是一个假设的“元技能”或工具调用。 # 实际步骤会更具体比如调用 python 运行一个解析脚本。步骤 4使用技能技能创建后在未来的对话中只要你的指令匹配技能的trigger_patternsHermes 就会自动调用该技能。你 查看 NousResearch/hermes-agent 的 GitHub 数据。 Hermes: 自动识别并触发 fetch_github_stats 技能执行定义好的步骤返回结果。步骤 5技能的改进Hermes 的技能是“活”的。如果在执行技能过程中发现了错误或者你提供了反馈例如“下次请同时提供开源协议信息”Hermes 可以更新技能的定义文件纳入新的逻辑或修正错误。这就是“技能在使用中改进”。3.4 消息网关配置让代理融入你的工作流CLI 很好但让代理在 Telegram 或 Discord 中随时待命更方便。这就需要配置消息网关。以配置 Telegram Bot 为例创建 Telegram Bot在 Telegram 中搜索BotFather发送/newbot按照提示创建机器人并获取API Token。配置 Hermes Gateway# 启动网关设置向导 hermes gateway setup向导会询问你要配置哪个平台选择telegram然后输入你从BotFather获取的 Token。启动网关# 启动网关服务 hermes gateway start网关会在后台运行。现在你可以在 Telegram 中与你创建的机器人聊天Hermes Agent 将会回复你。安全配置默认情况下网关可能允许任何人向你的 Bot 发送消息。为了安全你可以在配置中设置allowed_user_ids只允许特定的 Telegram 用户 ID 与代理交互。你的用户 ID 可以通过向userinfobot发送消息来获取。网关的配置文件通常位于~/.hermes/gateway_config.yaml。配置完成后你可以使用hermes gateway status检查状态使用hermes gateway stop停止服务。4. 生产环境部署、问题排查与最佳实践将 Hermes Agent 用于个人自动化是一回事将其部署到生产环境或团队协作场景则是另一回事。这里涉及安全性、稳定性、监控和成本考量。4.1 部署模式与后端选择部署模式适用场景优点缺点启动命令示例本地后端个人开发、测试、完全受信任的环境。性能最好访问本地资源无限制。安全性最低代理拥有与运行用户相同的权限。hermes --backend localDocker 后端生产环境、运行不受信任的代码、需要环境隔离。良好的安全隔离环境一致性高。需要管理 Docker 镜像和容器对宿主机资源的直接访问受限。hermes --backend dockerSSH 后端在特定的远程开发机或服务器上执行命令。资源隔离环境专用。需要配置 SSH 密钥和网络访问。hermes --backend ssh userhostnameModal/Daytona 后端无服务器、按需执行、成本敏感型任务。几乎零闲置成本强大的可扩展性。有网络延迟可能需要适配工具以适应无服务器环境。需先在对应平台创建项目并配置。生产建议对于执行任意代码或处理敏感数据的场景务必使用 Docker 后端。你可以在config.yaml中设置默认后端# ~/.hermes/config.yaml execution: default_backend: docker docker: image: python:3.11-slim # 指定一个基础镜像 workdir: /workspace4.2 安全配置清单最小化工具权限通过hermes tools disable关闭所有不必要的工具集。例如如果不需要文件写入就禁用files_write。使用命令审批模式在config.yaml中启用require_approval_for: [‘shell’]这样当代理试图执行 shell 命令时会先请求你的批准。配置消息网关白名单在 Telegram、Discord 等网关配置中严格设置allowed_user_ids或allowed_roles避免机器人被滥用。隔离 API 密钥不要将 API 密钥硬编码在技能或配置中。使用环境变量或安全的密钥管理服务。Hermes 支持从环境变量读取配置如OPENAI_API_KEY。定期审计技能和记忆检查~/.hermes/skills/和~/.hermes/memory/下的内容移除或修正不准确、过时或存在安全风险的条目。4.3 常见问题排查指南即使安装顺利在实际使用中也可能遇到问题。以下是典型问题的排查路径。问题现象可能原因检查与解决步骤运行hermes命令提示“未找到命令”Shell 配置未加载或安装路径未加入 PATH。1. 确认已执行source ~/.bashrc(或~/.zshrc)。2. 检查echo $PATH是否包含~/.hermes/bin(Linux/macOS) 或%LOCALAPPDATA%\hermes\bin(Windows)。3. 尝试重新运行安装脚本。代理无法调用网络搜索工具1. 未启用web工具集。2. 未配置搜索 API 密钥如 Serper, Tavily。3. 网络连接问题。1.hermes tools enable web。2. 运行hermes setup重新配置或在config.yaml中设置serper_api_key等。3. 测试curl https://google.com检查网络。在 Docker 后端中代理无法访问宿主机文件Docker 容器默认是隔离的看不到宿主机文件系统。1. 在config.yaml的docker配置下通过volumes映射宿主机目录到容器内。2. 例如volumes: [“/home/user/projects:/workspace:ro”](只读映射)。消息网关启动失败1. 端口被占用。2. 平台 Token 无效或过期。3. 配置文件格式错误。1. 检查日志hermes gateway start --foreground。2. 重新向BotFather申请 Token 并更新配置。3. 使用hermes gateway doctor诊断配置。技能创建失败或不被识别1. 技能文件格式错误YAML/JSON 语法。2. 技能文件未放在正确目录。3. 触发模式不匹配。1. 使用yamllint或在线校验器检查技能文件语法。2. 确认技能文件在~/.hermes/skills/下。3. 在 CLI 中使用/skills命令查看已加载的技能列表。LLM 调用缓慢或超时1. API 端点网络延迟高。2. 模型上下文过长导致处理慢。3. 提供商限流。1. 尝试切换模型或提供商。2. 使用/compress命令压缩上下文。3. 查看提供商控制台确认额度和速率限制。Windows 上杀毒软件误报uv.exe这是常见误报因为uv是未签名的 Rust 二进制文件。1. 按照安装指南中的 PowerShell 脚本验证文件真实性。2. 将 Hermes 的安装目录如%LOCALAPPDATA%\hermes添加到杀毒软件的白名单中。不要只信任文件哈希因为uv会更新。4.4 性能优化与成本控制模型选型对于日常自动化任务gpt-4o-mini、claude-3-haiku等小型、快速的模型通常足够且成本更低。仅在需要深度推理时切换到大模型。上下文管理Hermes 会保留完整的会话历史。定期使用/compress命令可以让 LLM 总结当前会话要点并丢弃原始历史大幅减少后续交互的 token 消耗。使用无服务器后端对于非实时、可延迟的任务考虑配置modal或daytona后端。代理环境在闲置时会“休眠”只在处理请求时产生费用非常适合低频使用场景。技能的精炼一个设计良好、步骤清晰的技能比让代理每次自由发挥更高效、更节省 token。花时间优化你的高频技能。监控与日志关注~/.hermes/logs/目录下的日志文件。可以配置日志轮转和级别在生产环境中将日志级别调整为INFO或WARNING减少冗余输出。4.5 扩展方向集成 MCP 与自定义工具当内置工具和技能无法满足需求时可以通过 MCP 协议集成几乎任何外部系统。示例集成一个简单的 MCP 服务器假设你有一个内部的时间跟踪 API。你可以为其编写一个简单的 MCP 服务器例如使用 Python 的mcp库然后让 Hermes 连接它。编写 MCP 服务器(简化示例time_tracker_server.py)# time_tracker_server.py import asyncio from mcp import Server, StdioServerParameters from mcp.types import Tool, TextContent async def start_timer(task_name: str) - str: # 调用你的内部 API return fTimer started for task: {task_name} async def stop_timer() - str: return Timer stopped. async def main(): tools [ Tool( namestart_timer, descriptionStart a timer for a given task, inputSchema{ type: object, properties: { task_name: {type: string} }, required: [task_name] } ), Tool( namestop_timer, descriptionStop the current timer, inputSchema{type: object, properties: {}} ) ] async with Server(toolstools) as server: params StdioServerParameters() await server.run(params) if __name__ __main__: asyncio.run(main())配置 Hermes 连接 MCP 服务器 在config.yaml中添加 MCP 服务器配置mcp_servers: time_tracker: command: python args: [/path/to/time_tracker_server.py]使用新工具 重启 Hermes 后新的start_timer和stop_timer工具就会出现在可用工具列表中。你可以通过hermes tools list查看并让代理调用它们。通过 MCP你可以将 Hermes Agent 无缝接入你的整个技术栈使其真正成为你数字工作流中的智能中枢。从安装配置到核心概念理解从基础交互到技能开发再到生产级部署和扩展Hermes Agent 提供了一个强大而灵活的框架来构建“会学习”的 AI 代理。关键在于理解其“学习循环”的设计哲学它不是执行静态脚本而是在与你的互动中不断进化。开始的最佳方式是选择一个你日常重复的小任务如整理日报、监控信息、处理特定格式的文件尝试让 Hermes 帮你完成并引导它将其固化为技能。在这个过程中你会更深刻地体会到智能体与自动化脚本的本质区别。