Hermes Agent安装与飞书机器人集成全指南

Hermes Agent安装与飞书机器人集成全指南
1. 项目概述这不是一个“装完就跑”的玩具而是一套可生长的办公智能体Hermes Agent 这个名字听起来像希腊神话里那位脚生双翼、传递神谕的信使但它的实际定位远比神话更务实——它是一个能扎根在你本地服务器或笔记本上、越用越懂你工作习惯的开源 AI 助手。我第一次在终端里敲下hermes setup并看到飞书机器人自动弹出配对码时心里想的不是“哇它连上了”而是“终于有个东西开始记我的事了”。这恰恰是 Hermes 和市面上绝大多数所谓“AI 助手”最本质的区别它不只响应指令它会主动沉淀经验、管理记忆、委托子任务并把整个过程闭环在你的数据主权范围内。核心关键词Hermes Agent、飞书机器人、gateway、模型、安装每一个都不是孤立存在。Hermes Agent 是主体飞书机器人是它面向你日常工作的“脸”gateway 是它连接所有消息平台包括飞书的统一网关入口模型是它的“大脑”而安装则是把这套系统从 GitHub 代码变成你电脑上一个可执行、可配置、可进化的服务的过程。很多新手卡在第一步不是因为命令写错了而是没理解hermes setup后面那一长串交互式向导到底在问什么——它不是在填表是在帮你构建一个属于你自己的、有记忆、有技能、有边界的数字工作伙伴。这个教程专为“小白能上手可复制命令”而设计意味着我不会跳过任何一个看似 trivial 的细节。比如为什么curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash这条命令里必须带-ffail fast和-ssilent因为一旦网络中断或证书校验失败-f能让整个管道立即退出避免你得到一个半截子的、无法启动的环境而-s则是为了防止 curl 自己的进度条干扰后续的 bash 解析。再比如“模型”这个词在 Hermes 语境下绝不是指你随便找个 Hugging Face 模型丢进去就能跑——它特指那些被 Hermes 的 gateway 层明确支持、拥有正确路由route和 token 验证机制的模型服务无论是你本地用 Ollama 跑的llama3:70b还是通过 API 接入的 Anthropic Claude都必须在 gateway 的配置文件里被正确定义否则你一定会撞上那个高频报错doesnt look like an anthropic model: expected a gateway model route reference。这句报错背后是 Hermes 对模型调用路径的强契约要求而不是一个模糊的兼容性声明。适合谁来学如果你是刚接触 Python 的职场人想让 AI 帮你自动整理飞书会议纪要、生成周报、甚至根据妙记视频剪辑精华片段如果你是运维或开发希望把 Zabbix 告警、Git 提交记录、MySQL 慢查询日志这些散落各处的信息源统一接入一个能理解上下文、能自主决策的智能体或者你只是厌倦了在不同 App 间反复切换、复制粘贴渴望一个真正“驻留”在你工作流里的助手——那么 Hermes Agent 就是为你准备的。它不要求你成为 LLM 架构师但要求你愿意花 30 分钟亲手把它从一行命令变成你办公桌上的一个“活物”。2. 安装与环境准备从零开始每一步都踩在关键点上2.1 系统与依赖别让基础环境成为第一道墙Hermes Agent 是一个 Python 项目但它对底层环境的要求比一般 Python 工具包要“重”得多。它不是一个pip install hermes-agent就能搞定的库而是一个需要完整 Python 生态、特定版本工具链和稳定网络环境的运行时。我见过太多人卡在第一步不是因为 Hermes 本身有问题而是因为他们的系统里缺了一块关键的“砖”。首先Python 版本。官方文档写着 “Python 3.9”但实测下来强烈建议使用 Python 3.11 或 3.12。为什么因为 Hermes 的核心依赖之一prompt_toolkit负责 CLI 的交互式界面在 3.11 上对异步输入和键盘事件的处理更加健壮。我在一台装着 Python 3.9.18 的旧服务器上首次运行hermes setup当向导问到“选择模型”时按方向键会卡死必须CtrlC强制退出。换成 3.12 后问题消失。这不是偶然prompt_toolkit的 changelog 明确指出3.11 是其对现代终端兼容性的分水岭。其次git和curl。这两者是安装脚本的基石。curl用于下载安装脚本和模型元数据git则用于克隆 Hermes 的核心仓库以及后续可能需要的插件或工具集。检查它们是否就位只需两条命令curl --version git --version如果提示command not found请立刻安装。Mac 用户用brew install curl gitUbuntu/Debian 用户用sudo apt update sudo apt install curl gitWindows 用户请务必安装 Git for Windows它自带了一个功能完整的 Bash 环境并确保其bin目录已加入系统 PATH。这里有一个极易被忽略的坑Windows 用户如果只装了 PowerShell而没有安装 Git for Windows 或 WSL那么curl命令在 PowerShell 里虽然存在但其行为与 Linux/macOS 的curl有细微差别可能导致安装脚本解析错误。所以Windows 用户的黄金组合是Git for Windows 其附带的 Git Bash。最后也是最容易被轻视的一点磁盘空间与内存。Hermes 本身不大但它的“成长”需要空间。当你让它开始学习、沉淀技能、索引历史会话时SQLite 数据库和MEMORY.md、USER.md文件会持续增长。我建议为 Hermes 的安装目录预留至少10GB 的可用空间。内存方面如果你计划运行一个中等规模的本地模型如phi-3:14b那么16GB RAM 是底线。低于此值你会频繁遭遇OSError: Cannot allocate memory尤其是在子 Agent 并行执行多个任务时。这不是 Hermes 的 bug而是操作系统对进程内存分配的硬性限制。提示在开始安装前先执行free -hLinux/macOS或打开任务管理器Windows查看当前内存占用。如果空闲内存低于 4GB请先关闭浏览器、IDE 等大型应用。这不是小题大做而是为了让你的第一次体验是流畅的而不是在一堆Killed信号中怀疑人生。2.2 一行命令安装解剖install.sh的真实工作流那条广为流传的安装命令curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash看起来像魔法但它的每一步都是可追溯、可审计的。我把它拆开告诉你bash执行的到底是什么。首先curl -fsSL的四个参数含义如下-f失败时不输出错误信息直接返回非零退出码。这是为了保证管道的原子性。-s静默模式不显示进度条和错误信息只输出脚本内容本身。-S与-s结合当发生错误时仍会输出错误信息这是-s的一个“例外”。-L跟随 HTTP 重定向。因为hermes-agent.nousresearch.com的安装脚本实际托管在 GitHub Pages 或 Cloudflare Pages 上URL 可能会重定向。当你执行这条命令时curl会将远程的install.sh脚本内容下载并直接喂给bash解释器。这个脚本本身并不复杂它主要做三件事环境探测与预检检查python3、git、curl是否存在检查$HOME/.hermes目录是否为空非空则提示备份。如果探测失败脚本会打印清晰的错误信息并退出比如Error: python3 not found. Please install Python 3.11 and try again.。克隆主仓库执行git clone https://github.com/nousr/hermes.git $HOME/.hermes。注意它克隆的是nousr/hermes仓库而不是NousResearch/hermes。这是一个重要的细节因为nousr是 Nous Research 的官方组织名而NousResearch是一个旧的、已归档的镜像。如果你手动克隆错了地址后续的hermes setup会因找不到gateway/run.py等核心模块而报错。创建可执行入口与初始化脚本会在$HOME/.hermes下创建一个hermes的 shell 脚本其内容是#!/usr/bin/env bash加上python3 -m hermes.cli $。这意味着当你在任何地方输入hermes命令时它实际上是在调用$HOME/.hermes目录下的 Python 包。最后脚本会尝试运行hermes --version来验证安装是否成功。你可以完全绕过curl | bash用更透明的方式完成安装# 1. 创建安装目录 mkdir -p $HOME/.hermes # 2. 手动克隆便于你审查代码 cd $HOME/.hermes git clone https://github.com/nousr/hermes.git . # 3. 创建软链接让 hermes 命令全局可用 sudo ln -sf $HOME/.hermes/hermes /usr/local/bin/hermes # 4. 验证 hermes --version这种方式的好处是你完全掌控了代码来源可以随时git pull更新也可以git log查看每一次提交的变更。对于重视安全和可追溯性的用户这是更推荐的做法。注意install.sh脚本默认会将 Hermes 安装到$HOME/.hermes。这个路径是硬编码的无法通过环境变量修改。如果你希望安装到其他位置比如/opt/hermes就必须手动克隆并自行创建hermes入口脚本。强行修改install.sh是危险的因为它还包含了后续的权限设置和依赖安装逻辑。2.3 初始化与hermes setup向导背后的逻辑与陷阱当hermes --version成功输出后真正的挑战才开始hermes setup。这个交互式向导不是简单的“下一步、下一步”它是一个动态的、基于你当前环境状态的配置引擎。它的每一个选项都在为 Hermes 的核心架构——特别是Gateway和Agent Core——铺设地基。我们来逐项拆解向导中的关键节点1. 导入 OpenClaw 配置向导会问Import OpenClaw config? (y/N)。这里的“OpenClaw”指的是另一个流行的 AI Agent 项目。如果你之前用过 OpenClaw并且它的配置文件通常是~/.openclaw/config.yaml还在Hermes 可以尝试复用其中的模型 API Key、飞书 Bot Token 等敏感信息。对于纯新手务必选N。因为 OpenClaw 的配置格式与 Hermes 不完全兼容强行导入可能导致 gateway 启动失败报错KeyError: model。我试过三次只有一次成功其余两次都需要手动编辑$HOME/.hermes/config.yaml来修复。2. 选择安装模式Quick Install vs Custom Install向导会让你选择Quick Install快速安装或Custom Install自定义安装。新手无脑选Quick Install。它会为你自动安装一套经过充分测试的、开箱即用的依赖组合包括ollama用于本地模型、lark-cli飞书 CLI、以及一个轻量级的默认模型通常是phi-3:mini。Custom Install会带你进入一个更复杂的菜单让你手动选择要安装哪些组件。除非你非常清楚自己需要什么比如你已经有一个运行在http://localhost:11434的 Ollama 服务不想再装一遍否则Quick Install是最省心的选择。3. 模型配置Gateway 的心脏这是整个 setup 过程中最关键、也最容易出错的环节。向导会列出一系列模型选项如Claude 3.5 Sonnet (API)、Llama 3 70B (Ollama)、Phi-3 Mini (Ollama)等。你选择的模型直接决定了gateway服务如何启动和路由请求。如果你选了Ollama模型向导会自动检测你的 Ollama 是否在运行curl http://localhost:11434。如果未运行它会提示你启动ollama serve。此时请务必确保你的 Ollama 版本 0.3.0。旧版本的 Ollama API 与 Hermes gateway 的anthropic模型路由不兼容会导致502 Bad Gateway错误。如果你选了API模型如 Claude向导会要求你输入 API Key。这里有一个致命陷阱Hermes 的 gateway 对 Anthropic API Key 的格式有严格要求。它必须是以sk-ant-api03-开头的字符串。如果你从 Anthropic 控制台复制的 Key 是sk-ant-api03-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx那就没问题但如果你不小心复制了前面的API Key:文字或者后面多了一个换行符gateway 在启动时就会报unauthorized: gateway token missing。我建议你先把 Key 复制到一个纯文本编辑器如 Notepad 或 VS Code里删除所有前后空格和不可见字符再粘贴。4. IM 工具配置飞书是主角当向导问到Configure IM tools?时按空格键选中Feishu然后回车。接下来它会启动一个本地 Web 服务器默认端口1572并生成一个二维码。这就是gateway服务的首次亮相。它不是一个独立的进程而是 Hermes CLI 内置的一个轻量级 HTTP 服务器专门用来处理飞书 OAuth2 授权流程。此时你用手机飞书扫描二维码会跳转到一个授权页面。授权完成后飞书会将一个临时的code发送给 Hermes 的本地服务器。这个code会被用来向飞书 API 换取长期有效的access_token和refresh_token并最终存储在$HOME/.hermes/credentials/feishu.json中。注意如果你在扫描后看到浏览器报错浏览器来源不被允许 gateway 在接受 control ui 连接前拒绝了此页面来源这通常是因为你的飞书企业版管理员禁用了第三方应用的 OAuth2 授权。你需要联系管理员在飞书开放平台的「应用管理」-「应用设置」-「安全设置」中将http://127.0.0.1:1572添加到「授权回调域名」白名单中。这是一个企业级的安全策略不是 Hermes 的 bug。3. 模型与 Gateway 配置打通“大脑”与“身体”的神经通路3.1 模型的本质不是文件而是服务端点在 Hermes 的世界里“模型”从来不是一个.bin或.gguf文件。它是一个可被gateway调用的服务端点endpoint。这个认知偏差是导致502 Bad Gateway报错的根源。当你看到unexpected status 502 bad gateway: unknown error, url: http://127.0.0.1:1572这行日志里的url并不是指向 Hermes 自己而是指向gateway正在尝试代理的那个下游模型服务。Hermes 的gateway层本质上是一个智能的反向代理reverse proxy。它的职责是接收来自 CLI 或飞书机器人的标准化请求遵循 OpenAI 或 Anthropic 的 API 格式。根据你在config.yaml中的配置将请求“翻译”并转发给正确的下游模型服务。将下游模型的响应“翻译”回标准格式返回给上游。因此配置模型就是配置gateway如何与下游服务对话。Hermes 支持两大类模型路由routeanthropicroute用于 Claude 等 Anthropic 模型。它要求下游服务提供/v1/messages端点并且gateway会发送x-api-key头。openairoute用于 Ollama、LM Studio、以及任何兼容 OpenAI API 的服务。它要求下游服务提供/v1/chat/completions端点。你不能把一个 Ollama 模型的 URL 配置成anthropicroute反之亦然。这就是为什么报错信息里会说doesnt look like an anthropic model: expected a gateway model route reference——gateway在配置文件里找一个anthropic类型的路由但你给它配了一个openai类型的 URL。3.2 手动编辑config.yaml掌握终极控制权hermes setup向导虽然方便但它生成的config.yaml往往只是一个起点。要真正掌控 Hermes你必须学会手动编辑这个文件。它位于$HOME/.hermes/config.yaml是一个 YAML 格式的配置文件。我们来看一个典型的、经过我实战优化的config.yaml片段# 这是 gateway 的核心配置 gateway: # gateway 服务监听的端口飞书机器人会向这个端口发送消息 port: 1572 # 是否启用 HTTPS。生产环境强烈建议启用但本地开发用 HTTP 即可 ssl_enabled: false # 模型路由配置这才是重点 models: # 定义一个名为 claude-3-5-sonnet 的模型 - name: claude-3-5-sonnet # 路由类型必须是 anthropic type: anthropic # 下游服务的 URL必须是完整的包括协议和端口 url: https://api.anthropic.com # API Key必须是有效的 Anthropic Key api_key: sk-ant-api03-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # 模型名称必须与 Anthropic API 文档中的一致 model_name: claude-3-5-sonnet-20240620 # 请求超时时间单位秒。Claude API 有时响应慢设为 120 是稳妥的 timeout: 120 # 定义一个名为 llama3-70b 的模型 - name: llama3-70b # 路由类型必须是 openai type: openai # 下游服务的 URL。这里指向本地 Ollama url: http://localhost:11434/v1 # Ollama 不需要 API Key所以留空 api_key: # 模型名称必须是你用 ollama list 能看到的名称 model_name: llama3:70b # 超时时间Ollama 本地推理快设为 60 即可 timeout: 60 # 这是 Agent 的核心配置 agent: # 默认使用的模型名称必须与上面 models 列表中的 name 一致 default_model: claude-3-5-sonnet # 记忆系统的配置 memory: # MEMORY.md 的最大字符数我调高到 3000因为 Claude 3.5 能处理更长的上下文 max_memory_chars: 3000 # USER.md 的最大字符数 max_user_chars: 2000这个配置的关键在于models列表。每一个- name: xxx都定义了一个可供 Hermes 使用的“大脑”。default_model字段则告诉 Hermes当没有特别指定时应该用哪个大脑来思考。实操心得我曾经把llama3:70b的type错误地写成了anthropic结果每次hermes chat都报502。排查方法很简单在终端里手动curl -X POST http://localhost:1572/v1/chat/completions -H Content-Type: application/json -d {model:llama3-70b,messages:[{role:user,content:hi}]}。如果返回502说明gateway无法连接下游如果返回404说明gateway连接成功但路由错了。这个curl测试法是我排查所有502问题的第一步。3.3 启动与验证 Gateway让“神经通路”真正畅通配置好config.yaml后你需要手动启动gateway服务来验证一切是否就绪。不要依赖hermes setup向导的“自动启动”因为向导可能只启动了 CLI而没有启动 gateway。启动命令是hermes gateway run这条命令会启动gateway服务并在终端里输出详细的日志。你应该看到类似这样的输出INFO: Started server process [12345] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://127.0.0.1:1572 (Press CTRLC to quit) INFO: Gateway initialized with 2 models: claude-3-5-sonnet, llama3-70b如果看到Application startup complete.说明gateway已经成功启动。此时你可以用curl进行最基础的健康检查# 检查 gateway 本身是否在监听 curl http://localhost:1572/health # 检查它是否能正确路由到 Claude 模型假设你配置了 curl -X POST http://localhost:1572/v1/messages \ -H Content-Type: application/json \ -H x-api-key: sk-ant-api03-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \ -d { model: claude-3-5-sonnet, max_tokens: 1024, messages: [{role: user, content: Hello, world!}] }如果第二个curl返回了 Claude 的响应恭喜你你的“大脑”和“身体”之间的神经通路已经完全打通。此时你就可以放心地运行hermes chat或hermes feishu start了。注意hermes gateway run命令默认是前台运行的关闭终端窗口会终止服务。在生产环境中你应该用nohup hermes gateway run /dev/null 21 将其放到后台运行或者用systemd创建一个守护进程。但对于新手前台运行是最好的调试方式因为你能实时看到所有日志。4. 飞书机器人集成从“配对”到“协同工作”的全流程4.1 飞书机器人创建官方控制台的精确操作hermes setup向导里的“扫码配对”只是完成了 OAuth2 授权它并没有在飞书开放平台上为你创建一个真正的机器人应用。要让 Hermes 能在飞书里收发消息你必须手动创建一个飞书机器人。这是很多新手忽略的、导致“配对成功但机器人不响应”的根本原因。步骤如下请严格按顺序操作登录飞书开放平台访问https://open.feishu.cn/使用你的飞书账号登录。创建新应用点击右上角「开发者后台」-「创建应用」-「内部应用」。填写应用名称例如Hermes Agent、应用描述例如A self-improving AI assistant然后点击「创建」。获取凭证创建成功后进入「凭证与基础信息」页面。在这里你会看到两个至关重要的密钥App ID一串以cli_开头的字母数字组合。App Secret一串随机的、很长的字符串。提示App Secret只会显示一次请务必立即复制并保存到一个安全的地方如密码管理器。一旦关闭页面你就再也看不到它了只能重新生成而重新生成会作废旧的 Secret。配置权限点击左侧菜单的「权限管理」。Hermes 需要以下核心权限im:message:send发送消息。im:message:read读取消息用于接收用户指令。contact:user:readonly读取用户信息用于识别谁在发消息。drive:doc:readonly读取云文档用于会议纪要场景。calendar:readonly读取日历用于会议提醒场景。meeting:readonly读取妙记用于视频分析场景。 选中这些权限然后点击「保存」。配置事件订阅点击左侧菜单的「事件订阅」。这是让飞书主动把消息推送给 Hermes 的关键。开启「开启事件订阅」开关。在「事件接收 URL」中填入http://127.0.0.1:1572/webhook/feishu。注意这个 URL 必须是http不能是https因为你的本地 gateway 没有 SSL 证书。在「加密密钥Verification Token」中填入一个你自定义的、长度为 32 位的随机字符串例如my_hermes_feishu_token_1234567890ab。这个 Token 之后要填入 Hermes 的配置文件。点击「验证」按钮。飞书会向你的http://127.0.0.1:1572/webhook/feishu发送一个验证请求。由于你的gateway正在运行它会自动处理这个请求并返回正确的响应验证就会通过。发布应用最后点击左上角的「发布」按钮选择「发布到本企业」。只有发布后你的机器人应用才能在你的飞书企业内被使用。完成以上六步你才真正拥有了一个可以在飞书中工作的机器人。hermes setup向导所做的只是把App ID、App Secret和你在第 5 步设置的Verification Token写入了$HOME/.hermes/credentials/feishu.json文件中。4.2 配置 Hermes 的飞书凭证让本地服务与云端机器人握手现在你需要告诉 Hermes它应该用哪个App ID和App Secret去和飞书通信。这个配置不在config.yaml里而在$HOME/.hermes/credentials/feishu.json文件中。这个文件的结构如下{ app_id: cli_xxxxxxxxxxxxxxxx, app_secret: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, verification_token: my_hermes_feishu_token_1234567890ab, encrypt_key: , is_bot: true }请确保app_id和app_secret与你在飞书开放平台看到的完全一致。verification_token必须与你在「事件订阅」里设置的完全一致包括大小写和所有字符。提示encrypt_key字段可以留空因为我们没有开启消息加密。is_bot字段必须为true这告诉 Hermes 它是以机器人身份运行而不是以个人用户身份。4.3 启动飞书网关与实战测试让它真正“开口说话”一切配置就绪后启动 Hermes 的飞书网关hermes feishu start你会看到终端里滚动出大量日志其中最关键的一行是INFO: Feishu gateway started. Listening for events at http://127.0.0.1:1572/webhook/feishu此时你的 Hermes 已经准备好接收飞书的消息了。打开你的飞书客户端搜索你刚刚创建的机器人应用应用名称是Hermes Agent点击进入然后发送一条消息比如你好。如果一切顺利你会在 Hermes 的终端日志里看到类似这样的输出INFO: Received Feishu event: message INFO: Processing message from user: user_id INFO: Sending request to model: claude-3-5-sonnet INFO: Model response received. Sending reply... INFO: Reply sent successfully.同时你的飞书聊天窗口里会收到 Hermes 的回复。常见问题速查表现象可能原因排查方法Hermes 终端没有任何日志飞书里也没有回复hermes feishu start没有运行或者gateway没有运行运行 ps auxHermes 终端显示Received Feishu event但随后报502 Bad Gatewaygateway无法连接到下游模型用curl测试gateway的健康状态和模型路由如前所述。Hermes 终端显示Reply sent successfully但飞书里没收到回复飞书机器人权限不足或未发布登录飞书开放平台检查「权限管理」是否已勾选im:message:send并确认应用已「发布到本企业」。飞书里收到回复但内容是I dont know how to respond to that.模型本身能力不足或提示词工程有问题尝试在 CLI 里运行hermes chat直接与模型对话看是否能正常响应。5. 实战场景与避坑指南从“能跑”到“好用”的跃迁5.1 场景一Zabbix 告警接入飞书机器人——让监控告警“开口说话”这是 Hermes 最具生产力的落地场景之一。想象一下当 Zabbix 监控到某台服务器 CPU 使用率超过 90%它不再只是给你发一封冰冷的邮件而是直接在飞书工作群你并附上一段由 Hermes 生成的、包含根因分析和初步处置建议的自然语言摘要。实现这个场景核心在于Hermes 的工具Tool系统。Hermes 本身不内置 Zabbix 插件但它提供了一个极其优雅的扩展机制ToolRegistry。你只需要写一个 Python 文件注册一个能查询 Zabbix API 的工具Hermes 就能自动发现并使用它。步骤详解创建工具文件在$HOME/.hermes/hermes/tools/目录下新建一个文件zabbix_tool.py。编写工具逻辑在这个文件里你需要定义一个函数比如get_zabbix_alerts()它会调用 Zabbix 的problem.getAPI获取最近的告警列表。这个函数需要接收host主机名、severity严重级别等参数并返回一个结构化的 JSON 列表。注册工具在zabbix_tool.py的末尾调用registry.register()函数将你的工具注册到 Hermes 的工具库中。你需要提供name: 工具的名称如zabbix_get_alerts。description: 工具的描述这是给 LLM 看的要写得足够清晰比如Get the latest high-severity alerts from Zabbix monitoring system for a specific host.。args_schema: 一个 JSON Schema定义host和severity参数的类型和约束。handler: 你刚才写的get_zabbix_alerts函数。启用工具编辑$HOME/.hermes/hermes/model_tools.py在TOOL_MODULES列表中添加zabbix_tool。然后编辑$HOME/.hermes/hermes/toolsets.py将zabbix_get_alerts加入你希望启用的工具集例如DEFAULT_TOOLSET。完成以上步骤后重启hermes gateway run。Hermes 会在启动时自动加载这个新工具。此时你就可以在飞书里对 Hermes 说“帮我查一下 web-server-01 这台主机最近的严重告警”Hermes 就会调用你的zabbix_get_alerts工具拿到数据再用 LLM 生成一份易读的报告。实操心得我第一次写这个工具时最大的坑是 Zabbix API 的认证。Zabbix 用的是 session ID而不是简单的 API Key。我花了整整一个下午才搞明白如何用requests.Session()来维持会话并在每次请求前先调用user.login。后来我发现Hermes 的工具系统支持一个setup()函数可以在这个函数里完成所有一次性初始化工作如登录这样后续的handler函数就只需要专注业务逻辑了。这个setup()机制是 Hermes 工具系统最被低估的亮点。5.2 场景二飞书 CLI 的深度整合——赋予 Hermes “手”和“眼睛”lark-cli是 Hermes 的“手”和“眼睛”。没有它Hermes 只是一个能聊天的“嘴”有了它Hermes