Hermes Agent 真正好用的状态,不是“功能全开”,而是像一台自己维护过的工作站:主模型稳、辅助模型省、Telegram 安静、记忆不过载、Skills 可复用、权限逐步放开。
我又顺着官方文档和社区讨论看了一圈,结论和你前面整理的方向基本一致。官方文档本身已经把模型分成主模型和 auxiliary models;Telegram 被设计成日常聊天入口,不是调试控制台;memory 和 skills 是 Hermes 的核心能力;profiles 官方也明确用于隔离 config、API keys、memory、sessions、skills 和 gateway state。社区里比较常见的坑,则集中在 memory 过满、Telegram 输出太吵、多 profile / 多 bot 配置混乱这些地方。
所以这篇不追求“把所有开关都打开”,而是给一套更适合长期自用的手搓调优思路。
总体思路
先把 Hermes 拆成七层:
- 主模型负责对话、规划和工具循环。
- auxiliary models 负责图片、压缩、网页提取、标题、skill search 等后台任务。
- Telegram 只当干净聊天入口。
- memory 只写长期偏好和稳定事实。
- skills 只沉淀可重复执行的流程。
- 权限从 approval 开始逐步放开,不直接 yolo。
- 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:
- 删除过期事实。
- 合并重复偏好。
- 把含糊的“用户喜欢这样”改成可执行规则。
- 把流程性内容从 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 status、ls、cat、systemctl status |
| 常规构建和测试 | 观察一段时间后 Always,例如 npm test、hugo --destination /tmp/... |
| 破坏性或远程写入 | 继续每次确认,例如 rm -rf、git 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. 一套推荐的手搓配置顺序
不要一次改完。按这个顺序最稳:
- 固定主模型和 vision。
- 关闭 Telegram 噪音,只保留最终回答和 approval。
- 整理 memory,只保留长期偏好。
- 把重复流程写成少量 skills。
- 建立
daily、dev、ops三个 profiles。 - 把便宜 auxiliary models 逐步接上。
- 通过 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 隔离。大多数“没调舒服”的问题,都是结构问题,不是某一个模型参数问题。
参考资料
- Configuring Models:Hermes 官方模型配置文档,重点看 main model 和 auxiliary models 的分工。
- Features:memory、skills、self-improving loop、messaging gateway、MCP integration 等核心能力说明。
- Profiles: Running Multiple Agents:多个独立 profile 的配置、记忆、skills、gateway state 隔离。
- Telegram Setup:Telegram 作为最快远程访问入口的设置流程和验证清单。
- 社区讨论:I didn’t even know these configs existed、Multiple profiles / Telegram、Multiple agents。
最后的判断很简单:Hermes 不需要被调成一个全知全能的巨型人格。它更适合被调成几个边界清楚、入口干净、记忆克制、流程可靠的小助手。这样它反而更像每天都能用下去的东西。