بنقرة واحدة
hermes-gateway-ops
Hermes Gateway 运维操作 — 重启、飞书平台代码关键位置、热修改生效
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Hermes Gateway 运维操作 — 重启、飞书平台代码关键位置、热修改生效
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
高德地图综合服务,支持POI搜索、路径规划、旅游规划、周边搜索和热力图数据可视化
Knowledge comic creator supporting multiple art styles and tones. Creates original educational comics with detailed panel layouts and sequential image generation. Use when user asks to create "知识漫画", "教育漫画", "biography comic", "tutorial comic", or "Logicomix-style comic".
Generate professional infographics with 21 layout types and 21 visual styles. Analyzes content, recommends layout×style combinations, and generates publication-ready infographics. Use when user asks to create "infographic", "visual summary", "信息图", "可视化", or "高密度信息大图".
Darwin Skill (达尔文.skill): autonomous skill optimizer inspired by Karpathy's autoresearch. Evaluates SKILL.md files using an 8-dimension rubric (structure + effectiveness), runs hill-climbing with git version control, validates improvements through test prompts, and generates visual result cards. Use when user mentions "优化skill", "skill评分", "自动优化", "auto optimize", "skill质量检查", "达尔文", "darwin", "帮我改改skill", "skill怎么样", "提升skill质量", "skill review", "skill打分".
从 DESIGN.md 生成预览图并截图的工作流 - 解决 Playwright 浏览器路径问题和 YAML 解析
Cron jobs auto-deliver final responses to configured targets — send_message to the same target gets deduplicated and skipped. Print report content directly as final response instead.
| name | hermes-gateway-ops |
| description | Hermes Gateway 运维操作 — 重启、飞书平台代码关键位置、热修改生效 |
| notes | 本 skill 包含配置示例和表格,在飞书等不支持 markdown 表格的平台,请用代码块格式重述。 |
修改 /opt/hermes 代码后,必须同步到 Docker 容器并重启:
# 复制修改后的文件到容器
docker cp /opt/hermes/gateway/platforms/feishu.py hermes:/opt/hermes/gateway/platforms/feishu.py
# 重启容器
docker restart hermes
飞书群消息策略控制文件:/opt/hermes/gateway/platforms/feishu.py
关键位置:
default_group_policy 配置字段定义default_group_policy 配置解析_should_accept_group_message 函数(群聊免@核心逻辑)群策略选项:open(任何人)、allowlist(白名单)、admin_only、disabled
函数 _should_accept_group_message(第 3628 行)决定群消息是否需要 @mention。
简化版直接返回 True(实现免@自动响应):
def _should_accept_group_message(self, message: Any, sender_id: Any, chat_id: str = "") -> bool:
"""Accept all group messages without requiring @mention."""
# 群里任何消息都直接接收,无需 @mention
return True
生效方式:重启 Hermes Gateway
容器内 PID 1 是 init 进程,普通 kill 信号无效。
# 正确方式:使用 --replace 热重启
hermes gateway run --replace &
注意:新进程会拉起后在前台运行,加 & 放入后台。
症状:hermes gateway run --replace 报错 OSError: [Errno 98] address already in use on port 18643
原因:Hermes 本身就是容器的 PID 1(init 进程),已经绑定了端口,--replace 无法重复绑定。
表现:
ps aux | grep hermes 显示 PID 1 正在运行 hermes gateway runhermes gateway restart 会产生大量 defunct 僵尸进程处理方式:
docker restart hermes
kill -9 <zombie_pid> # 僵尸进程的 PPID 已被 PID 1 回收,无需处理
文件:/opt/hermes/gateway/platforms/feishu.py
_should_accept_group_message(第 3628 行)✅ 当前版本True = 不@也放行;返回 False = 不@就拒绝if chat_type != "p2p" and not self._should_accept_group_message(...)_handle_message_with_guards 第 2065 行)run_agent.py 第 608 行,按 session_key 缓存,复用 prompt caching修改以下内容后,不需要重启 Hermes,下次 API 调用时自动生效:
config.yaml 配置变更.env 中的 API endpoint 修改auxiliary_client.py 中的模型映射(主模型、辅助模型、vision 模型等)_PROVIDER_XXX 字典等)只有修改飞书平台代码(feishu.py)后,才需要重启:
hermes gateway run --replace
危险操作序列:hermes gateway run --replace 如果端口被占用(address already in use),会报端口冲突并退出,但原进程(PID 1)仍在跑。反复执行会产生多个 defunct 进程并耗尽终端 TTY,导致所有前台命令永久卡住(exit code 130)。
正确做法:
ps aux | grep hermes | grep -v grep 确认是否有残留进程kill -9 <PID> 清理掉再重启process(action='list') → process(action='kill', session_id='xxx') 逐个杀残留 sessionpgrep -a hermes 可以绕过 TTY 阻塞快速确认进程状态当前环境(群晖 Docker):
/opt/hermes/.venv/bin/hermeshermes ... 的脚本会报"未安装"PATH="/opt/hermes/.venv/bin:$PATH" hermes gateway status
get_hermes_home() 返回 /opt/data(不是 /opt/data/home 也不是 /root),所以:
/opt/data/config.yaml — ✅ 唯一权威配置(394行完整配置),Gateway 和所有插件都读这个/opt/data/hermes/config.yaml — ❌ 不存在或为孤立片段(可能只有 2 行 memory 配置),没有任何代码读取/opt/hermes/ — ❌ 代码安装目录,不含 config.yaml(只有 cli-config.yaml)编辑配置只看 /opt/data/config.yaml,不要在其他位置找。
验证方法:
# 确认 get_hermes_home() 返回值
/opt/hermes/.venv/bin/python3 -c "from hermes_cli.config import get_hermes_home; print(get_hermes_home())"
# 输出: /opt/data
在 config.yaml 的 auxiliary 节点下配置:
auxiliary:
vision: # 看图(图生文)必需多模态模型
provider: ecloud
model: Minimax-M2.5 # 纯文本,不支持看图!
# 如果需要看图,用 glm-4v-flash(需配置 ZHIPU_API_KEY)
compression: # 上下文压缩,必须用非推理模型
provider: ecloud
model: Minimax-M2.5 # 推理模型会报错导致"失忆"
# 建议用 glm-4.5-flash(需配置 ZHIPU_API_KEY)
web_extract: # 网页提取,auto 即可
provider: auto
'/workspace/cache/aiops-model/aiops-model/base/MiniMax-M2.5 is not a multimodal model''The reasoning_content in the thinking mode must be passed back to the API.''令牌已过期或验证不正确' (code: 401)当 Hermes 运行在 Docker 容器中时,直接在宿主机上创建 .env 文件不会生效,因为容器内的进程无法读取宿主机的 .env 文件。
正确做法(二选一):
通过群晖 Docker 界面更新:
GLM_API_KEY=your-new-key通过 SSH 命令更新(临时,重启后失效):
# 方式A:重启容器时带上新环境变量(需要先停止容器)
docker stop hermes && docker run --env GLM_API_KEY=your-key ... hermes
# 方式B:通过群晖修改容器配置后重新启动
验证是否生效:在容器内执行 env | grep GLM_API_KEY 确认能看到 key。
| 任务类型 | 模型要求 | 推荐模型 |
|---|---|---|
| vision 看图 | 多模态模型 | glm-4v-flash |
| compression 压缩 | 非推理模型 | glm-4.5-flash |
| web_extract | 任意文本模型 | auto |
如果只有 MiniMax-M2.5:必须放弃看图功能,compression 可能会导致失忆(取决于 API 是否严格检查 reasoning_content)。
mimo-v2.5 等模型有分段定价(≤256K 便宜,256K-1M 贵一倍)。在 config.yaml 的 providers 中设置 context_length 可以限制上下文窗口,锁在便宜档:
providers:
xiaomi:
base_url: https://token-plan-cn.xiaomimimo.com/v1
api_key_env: XIAOMI_API_KEY
context_length: 256000 # 限制为 256K,锁定 ≤256K 价格档
生效机制:get_model_context_length() 的第 0 步就是读 custom_providers 中的 context_length,优先级最高。配合 compression.threshold: 0.75,压缩在 192K 触发,不会超 256K。
定时任务运行成功(last_status: ok)但投递失败:
last_delivery_error: "Feishu send failed: [230001] ext=invalid receive_id"
投递目标名称无法解析为有效的 chat_id。常见情况:
feishu:Hermes-工作 ❌ - 名称在 cron 上下文中无法解析feishu:工作 ❌ - 同上feishu:oc_42e9d293025cb75aa45c1d092d862be7 ✅ - 使用真实 chat_idcronjob action=listgrep "Inbound group message" /opt/data/logs/agent.log | tail -20send_message action=listcronjob action=update job_id=<job_id> deliver=feishu:oc_xxxxxsend_message list 显示已连接过的群组,不是所有群组chat_id 是最可靠的实际运行时 IDoc_xxxxx 格式,不能用群名称飞书报错 Your request contains an invalid request parameter, ext=invalid message content, ext=message_content has wrong tag:{table}
{table} 标签(JSON 表格数据),飞书不支持查看日志:grep -i "send failed\|230001" /opt/data/logs/agent.log | tail -20
定位代码:错误检测在 handler.py,需要增加 {table} 错误识别
修复位置:/opt/hermes/app/app/feishu/handler.py
{table} 错误{xxx} 格式的标签生效:重启 Gateway docker restart hermes-gateway