Hermes Agent 手搓调优配置:模型、Telegram、记忆、Skills 和 Profiles

把 Hermes Agent 调舒服的核心不是一口气打开所有功能,而是把主模型、辅助模型、Telegram 网关、记忆、Skills、权限和 Profiles 分层整理。

Hermes Agent 真正好用的状态,不是“功能全开”,而是像一台自己维护过的工作站:主模型稳、辅助模型省、Telegram 安静、记忆不过载、Skills 可复用、权限逐步放开。

我又顺着官方文档和社区讨论看了一圈,结论和你前面整理的方向基本一致。官方文档本身已经把模型分成主模型和 auxiliary models;Telegram 被设计成日常聊天入口,不是调试控制台;memory 和 skills 是 Hermes 的核心能力;profiles 官方也明确用于隔离 config、API keys、memory、sessions、skills 和 gateway state。社区里比较常见的坑,则集中在 memory 过满、Telegram 输出太吵、多 profile / 多 bot 配置混乱这些地方。

所以这篇不追求“把所有开关都打开”,而是给一套更适合长期自用的手搓调优思路。

总体思路

先把 Hermes 拆成七层:

  1. 主模型负责对话、规划和工具循环。
  2. auxiliary models 负责图片、压缩、网页提取、标题、skill search 等后台任务。
  3. Telegram 只当干净聊天入口。
  4. memory 只写长期偏好和稳定事实。
  5. skills 只沉淀可重复执行的流程。
  6. 权限从 approval 开始逐步放开,不直接 yolo。
  7. profiles 按用途分开,而不是一个 bot 什么都干。

如果只改一个地方,我会先改模型分工和 Telegram 输出。前者决定脑子稳不稳,后者决定你愿不愿意天天用。

1. 模型分工:主模型要稳,后台模型要便宜

Hermes 的模型配置不是只有一个 model。官方的 Configuring Models 文档把它分成两类:主模型负责主对话和工具循环,auxiliary models 负责后台子任务,例如 vision、compression、web summarization、title generation、skill search 等。

所以更舒服的配置方向是:

  • 主聊天模型:用你最信任、最稳定、最懂工具调用的模型。
  • vision:如果你经常发图、截图、报错图,也要走同一套可信 provider。
  • compression:可以用便宜模型,但不能太弱,否则压缩后上下文会变味。
  • title / summary / web extract:适合 offload 到轻量模型。
  • skill search:要求召回稳定,成本可以低一些。

你现在已经把主聊天和 vision 都切到 Wanfeng,不走 Gemini,这个方向很合理。后续如果要继续省钱,我建议先从这几个 auxiliary model 下手:

# 示例,不同 Hermes 版本字段名可能略有差异,以官方 Configuring Models 文档为准
[models]
main = "wanfeng/main-chat"

[models.auxiliary]
vision = "wanfeng/vision"
compression = "cheap-but-stable/context-compressor"
web_extract = "cheap/web-summary"
title = "cheap/title"
skill_search = "cheap/embedding-or-small-chat"

这里最不建议贪便宜的是 compression。压缩模型如果把你的长期上下文、工具结果或约束总结错,主模型后面会一本正经地沿着错误继续跑。它不需要很会聊天,但一定要稳。

2. Telegram:只显示最终回答

Telegram 的最佳形态,是“随手喊 Hermes 干活”的聊天入口,而不是塞满工具日志、后台 review、gateway 生命周期消息的调试面板。

我建议把 Telegram 输出分成三档:

内容Telegram 里显示吗原因
最终回答显示这是用户真正要读的
需要用户确认的 approval显示Telegram 按钮就是为这个场景舒服
工具过程、gateway start/stop、review、后台生命周期默认隐藏太吵,会破坏日常聊天体验

如果需要调试,就去 CLI、日志文件或 Hermes 自带的调试入口看。Telegram 里只保留最终结果和必要确认。

可以按这个思路整理:

[telegram]
enabled = true
show_final_answer = true
show_tool_calls = false
show_tool_results = false
show_gateway_lifecycle = false
show_background_review = false
approval_buttons = true

实际字段名要看你的 Hermes 版本,但原则不变:Telegram 是前台,不是后台日志。

还有一个容易忽略的点:一个 Telegram bot 最好只绑定一个明确 profile。不要让家用、开发、服务器运维、秘书任务都挤在同一个 bot 里。否则 memory、approval、上下文风格都会互相污染。

3. Memory:只记长期偏好,不记临时结论

Hermes 的 memory 很强,但强东西更要修剪。社区里常见的不舒服感,很多不是模型不聪明,而是 memory 写进了错误事实、临时状态、过期偏好,之后每次对话都被它偷偷带偏。Hermes 官方特性页也把 memory 和 skills 放在 self-improving loop 里,所以它们应该被当成长期资产维护,而不是无限追加的聊天缓存。

我会把 memory 分成三类:

类型是否应该进 memory例子
长期偏好应该喜欢 Telegram 最终回答干净、默认中文、服务器命令要谨慎
稳定环境事实可以常用服务器、项目路径、默认部署方式
临时任务状态不应该今天某个 bug 的猜测、一次性 token、正在测试的模型结论

建议写一条系统规则:

Memory 只保存长期偏好、稳定环境事实和可复用工作习惯。
不要保存一次性任务状态、未经确认的推测、临时错误信息、token、密码或短期配置。
写入 memory 前尽量用一句话说明准备记录什么。

维护节奏也很重要。可以每隔一两周做一次 memory review:

  1. 删除过期事实。
  2. 合并重复偏好。
  3. 把含糊的“用户喜欢这样”改成可执行规则。
  4. 把流程性内容从 memory 移到 skill。

一句话:memory 负责“我是谁、我长期怎么做事”,skills 负责“这类事以后怎么重复做”。

4. Skills:少而硬,不要堆成杂物间

Hermes 的 self-improving loop 很吸引人:做过一次的流程,可以沉淀成 skill,下次直接复用。但 skill 不是越多越好。

我建议只把这几类东西写成 skill:

  • 有明确触发条件的流程。
  • 至少会重复使用三次的任务。
  • 涉及多步命令、固定文件路径、验证步骤的操作。
  • 容易因为漏步骤而翻车的部署、备份、发布流程。

不适合写成 skill 的内容:

  • 某次聊天里的临时判断。
  • 还没验证过的配置片段。
  • 一句普通偏好。
  • 过于宽泛的“帮我优化所有东西”。

一个舒服的 skill 应该长这样:

# Hermes Telegram Tuning

Use when the user wants to reduce Telegram noise, adjust Telegram approval flow,
or split Telegram bots across profiles.

Workflow:
1. Inspect the current profile config.
2. Keep final answers and approval prompts visible.
3. Hide tool logs, gateway lifecycle, background review, and debug-only messages.
4. Verify one normal chat and one approval flow from Telegram.

触发条件清楚、步骤短、验证明确。这样的 skill Hermes 才容易用得准。

5. 权限:不要永久 yolo,先让 approval 长出信任

很多人折腾 agent 时会直接开大权限,短期爽,长期心慌。更舒服的路线是:默认保留 approval,用 Telegram 按钮逐步授予可信命令的 Always 权限。

我会按风险分三层:

命令类型建议
只读检查可以较快 Always,例如 git statuslscatsystemctl status
常规构建和测试观察一段时间后 Always,例如 npm testhugo --destination /tmp/...
破坏性或远程写入继续每次确认,例如 rm -rfgit push、数据库迁移、生产服务器写配置

这样 Hermes 会越来越顺手,但不会变成“什么都能自动干”的黑盒。

尤其是服务器运维类任务,我建议保留几个硬规则:

  • 删除、覆盖、重启生产服务前要确认。
  • 涉及公网暴露、证书、DNS、SSH、数据库前要确认。
  • 能先 dry-run 就先 dry-run。
  • 能先备份就先备份。

6. Profiles:按身份拆开,比一个万能 Hermes 更舒服

官方和社区都有人推荐 multiple profiles。官方 Profiles 文档说得很直接:profiles 用来在同一台机器上运行多个独立 Hermes agents,每个都有自己的配置、API keys、memory、sessions、skills 和 gateway state。这个功能的价值不只是“多个配置文件”,而是让 Hermes 拥有不同身份边界。

可以这样拆:

Profile用途特点
daily日常聊天、备忘、轻任务Telegram 干净、权限保守
dev写代码、看仓库、跑测试工具权限更多,skills 偏开发
ops服务器、Docker、网络服务审批更严格,记住主机和路径
family家人使用语气和权限都更保守
secretary邮件、日程、总结关注隐私和外发确认

每个 profile 最好有自己的:

  • config
  • memory
  • skills 选择
  • Telegram bot
  • approval 策略
  • 默认模型或辅助模型

不要低估“人格隔离”的价值。一个开发 profile 可以记住你喜欢 rg、Hugo 构建、GitHub PR;但这些记忆不应该影响家人跟它聊天。

7. 一套推荐的手搓配置顺序

不要一次改完。按这个顺序最稳:

  1. 固定主模型和 vision。
  2. 关闭 Telegram 噪音,只保留最终回答和 approval。
  3. 整理 memory,只保留长期偏好。
  4. 把重复流程写成少量 skills。
  5. 建立 dailydevops 三个 profiles。
  6. 把便宜 auxiliary models 逐步接上。
  7. 通过 Telegram approval 慢慢给可信命令 Always 权限。

每一步都做一个小验证:

普通聊天是否自然?
Telegram 是否只看到最终回答?
发图是否走正确 vision 模型?
长任务压缩后是否没有跑偏?
approval 按钮是否能正常工作?
profile 之间 memory 是否隔离?

8. 我的推荐配置基线

如果是自用,我会从这个基线开始:

# 伪配置,用来表达结构。落地时以当前 Hermes 配置 schema 为准。

[profile]
name = "daily"
language = "zh-CN"

[models]
main = "wanfeng/main-chat"

[models.auxiliary]
vision = "wanfeng/vision"
compression = "stable-small/compression"
web_extract = "cheap/web-extract"
title = "cheap/title"
skill_search = "cheap/skill-search"

[telegram]
enabled = true
final_answer_only = true
approval_buttons = true
show_tool_calls = false
show_tool_results = false
show_gateway_lifecycle = false
show_background_review = false

[memory]
enabled = true
write_policy = "long_term_only"
review_interval = "weekly"

[skills]
enabled = true
auto_create = false
prefer_small_verified_skills = true

[approvals]
default = "ask"
allow_always_for_low_risk = true
dangerous_commands = "always_ask"

这个配置不是追求花,而是追求几个体验:

  • Telegram 像一个干净的 AI 聊天窗口。
  • 主模型和 vision 不漂。
  • 后台任务尽量省钱。
  • memory 不无限膨胀。
  • skills 是工具箱,不是杂物间。
  • 权限随着信任逐步打开。

9. 什么时候需要继续优化

出现下面这些症状,就说明该整理了:

  • Telegram 里工具日志刷屏。
  • Hermes 总提过期事实。
  • 不同入口的记忆表现不一致。
  • 压缩后回答明显忘重点。
  • skill search 总召回不相关流程。
  • 一个 profile 同时承担家用、开发、运维、秘书任务。
  • approval 要么太多烦人,要么太少吓人。

这时不要急着换模型。先看结构:模型分工、Telegram 输出、memory 边界、skills 数量、profile 隔离。大多数“没调舒服”的问题,都是结构问题,不是某一个模型参数问题。

参考资料

最后的判断很简单:Hermes 不需要被调成一个全知全能的巨型人格。它更适合被调成几个边界清楚、入口干净、记忆克制、流程可靠的小助手。这样它反而更像每天都能用下去的东西。