第38篇:多模型混合——MoA 智能融合
Hermes 功能详解第38篇:Mixture of Agents。多个模型答案融合更准。
第38篇:多模型混合——MoA 智能融合
嘿,朋友们!今天咱们来聊聊 Hermes 的“多模型混合”玩法。别被“MoA”这个高大上的缩写吓到,其实它就是把不同模型安排在不同岗位上,各干各的活儿,效率直接拉满。
两种模型槽位,各司其职
Hermes 把模型分成两大类:
- 主模型(Main model)——负责“思考”。你发的每一条消息、每一次工具调用、每一段流式回复,都走它。
- 辅助模型(Auxiliary models)——负责“打杂”。比如上下文压缩、图像分析、网页摘要、审批打分、MCP 工具路由、会话标题生成、技能搜索……一共 11 个槽位,每个都能单独覆盖。
简单说:主模型是大脑,辅助模型是手脚。手脚干得好,大脑就能专心思考。
快速上手:Nous Portal 一键配置
如果你是全新安装,最省事的方式是:
hermes setup --portal
一条命令搞定登录和供应商设置。想看看配了什么?用 hermes portal info 查看。Portal 订阅用户还能享受token 计费供应商 9 折优惠,真香。
设置主模型
打开仪表盘,点侧边栏的 Models,顶部就是 Model Settings 面板。点 Change 打开选择器:
- 左侧:已认证的供应商(没配密钥的不会显示)
- 右侧:该供应商的精选模型列表(不是原始 API 的全量 dump)
选好模型点 Switch,Hermes 会自动写入 ~/.hermes/config.yaml。注意:这只对新会话生效——已经打开的聊天标签页会继续用原来的模型。想热切换?在聊天里用 /model 斜杠命令。
中途切换的坑
在活跃会话中切换模型时,Hermes 会估算你的下一条消息是否触发上下文压缩。如果会话已经接近新模型的压缩阈值,切换时会收到警告。压缩会在切换后的第一条用户消息时执行。
⚠️ 重要警告:中途切换会重置提示缓存!因为缓存是按模型绑定的,切换后下一条消息要按全价重新读取整个对话(原本有 75–90% 折扣)。长会话中,这一次性重读可能比两个模型的单价差还贵。要切换就趁早,别等聊到一半再换。
数据训练分级的坑
像 muse-spark-1.2-contributor 这类模型有折扣,但代价是供应商可能拿你的数据训练。交互式选择会弹确认框,但无人值守的 Kanban 工作器和 cron 代理没法弹框,所以默认拒绝。
如果你能接受,记录一个持久确认:
hermes config set security.allow_data_training_tiers_noninteractive true
想撤销就:
hermes config unset security.allow_data_training_tiers_noninteractive
辅助模型:默认 auto,按需覆盖
点 Show auxiliary 展开 11 个任务槽位。每个默认都是 auto——意思是 Hermes 会尝试用主模型干这个活。如果主模型不可用或失败,会按 auxiliary.<task>.fallback_chain → 主 fallback_providers → 内置发现链依次回退。
当你觉得某个辅助任务用便宜点的小模型就够了,就单独覆盖它。比如图像分析用个视觉模型,网页摘要用个快速模型——省钱又提速。
MoA 预设:谁在干活,谁在买单
MoA 其实是一个“虚拟供应商”,每个预设都像普通模型一样出现在模型选择器里。选一个预设时,聚合器(aggregator)才是真正干活的模型——它写回复、发工具调用;参考模型(reference models)先跑一遍,给聚合器提供分析。
这里有个容易忽略的点:整轮运行的费用几乎都算在聚合器头上。因为聚合器要跑完整个工具循环的每一步,而参考模型默认每个用户回合只建议一次。如果你的主模型挂在订阅供应商上,但聚合器在别家,那这轮是记在聚合器供应商的账上,而不是你的订阅里。hermes moa configure 和 hermes moa list 只要发现聚合器供应商和你的 model.provider 不一致,就会打印一行提醒,比如:
Aggregator is on nous; the whole tool loop will be billed there, not to openai-codex.
桌面编辑器、hermes model 和 /model 里也会把聚合器槽位标成“实际执行、实际计费”的那个。
提示缓存:MoA 不背这个锅
很多人担心 MoA 会打乱提示缓存,其实不会。主对话的缓存前缀始终是字节稳定的——选 MoA 预设就跟选普通模型一样,不会改动历史、换工具集或重建系统提示。
参考模型收到的是一份精简、确定的对话视图,前缀稳定,正常缓存。聚合器这边,参考输出是作为单独一条尾部用户消息塞进去的,永远不跟你的消息合并。因为它待在稳定前缀的下面,所以不会让任何缓存前缀失效——聚合器对注入点以上的内容照样命中缓存,只有新追加的尾巴是新的。
在 Anthropic Messages、Bedrock Converse 或原生 Gemini 协议上,相邻的两条用户消息会合并成一条消息里的两个内容块,你的消息块和后续迭代重放的一模一样,缓存前缀照样穿过你的消息。在 OpenAI 兼容协议上,请求结尾是 user(你的消息), user(建议),少数强制 user/assistant 交替的模板(llama.cpp、vLLM 的 Jinja 模板、部分 OpenRouter 路由)会报 400,比如 Conversation roles must alternate。Hermes 会自己兜底:把这一条请求的两条相邻用户消息合并重试,并记住这个聚合器目的地(端点 + 模型),本会话后续回合直接合并,其他目的地仍保持拆分、缓存稳定的形态。
所以 MoA 在两种调用上都不牺牲提示缓存。它真正的成本就是多出来的参考调用(默认 fanout 下每个用户回合一次)——你为多个模型视角付费,而不是为坏掉的缓存付费。
小结
多模型混合的核心思路:主模型负责深度思考,辅助模型负责轻量任务,MoA 预设则让聚合器挑大梁、参考模型出主意。配合 Nous Portal 一键配置、中途切换警告、数据训练分级确认,你就能在成本、速度和智能之间找到最佳平衡点。
下期见!👋
📖 官方文档
本文根据 Hermes Agent 官方文档编写,原文见:官方文档 › user-guide/features/mixture-of-agents