给 AI 选大脑——主模型与辅助模型配置
Hermes Agent 官方教程第十三篇:配置主模型和辅助模型,让 AI 更聪明也更省钱。
给 AI 选大脑——主模型与辅助模型配置
咱们接着上次的话题聊。上回说了怎么把 Hermes 装起来,今天来干件正经事:给 AI 挑个合适的大脑。
你可能会问,AI 不就一个模型吗?还真不是。Hermes 里其实有两套模型槽位:
- 主模型——负责“思考”的那个。你发的每句话、工具调用的每个循环、流式输出的每个字,都走它。
- 辅助模型——干杂活的。比如压缩上下文、识别图片、总结网页、给会话起标题、搜索技能……一共 11 个独立槽位,每个都能单独换。
打个比方:主模型是主厨,辅助模型是帮厨。主厨手艺好但贵,帮厨便宜但只能切菜。聪明的做法是——主厨做菜,帮厨切菜。
顺带一提:如果你想在自己机器上跑模型而不是用云服务商,可以看 Local Models。
打开 Models 页面
在仪表盘侧边栏点 Models,你会看到两个区域:
- Model Settings——上面那块,负责给各个槽位分配模型。
- Usage analytics——下面那些卡片,显示每个模型跑了多少 token、花了多少钱。
最上面那行就是主模型,点 Change 就能换。
设置主模型
弹出的选择器分两栏:
- 左边是你已经配置好的服务商(没配好的去 Keys 里加密钥)。
- 右边是该服务商下 Hermes 精选的模型列表——注意,这不是原始 API 的全量列表,而是适合智能体任务的推荐清单。OpenRouter 上 400 多个模型里有一堆 TTS、画图、重排序的,Hermes 帮你过滤掉了。
选好模型点 Switch,配置就写进 ~/.hermes/config.yaml 了。注意:这只对新会话生效。已经打开的聊天窗口不会变,想热切换就用 /model 命令。
中途换模型的坑
在会话中途换模型,Hermes 会预估你的下一条消息是否触发上下文压缩。如果会话已经很长,它会给你个警告——但切换照样生效,压缩会在你发下一条消息时执行。
还有个更隐蔽的坑:换模型会重置提示词缓存。缓存是按模型区分的,中途切换意味着下一条消息要按全价重新读一遍整个对话历史。长会话里这一下可能比两个模型之间的差价还贵。所以——要换趁早换,别聊到一半才想起来。
正因为这笔一次性重读成本,当会话里已经攒了很长的上下文时(默认 100,000 token,按最近一次服务商计费的提示词大小算),Hermes 会在切换前明确问你一句再动手。这个确认跟贵模型、数据训练那些警告走的是同一套提示,CLI、TUI 的 /model 命令和选择器、以及聊天里带活跃 agent 的 /model 都会弹。想调阈值或关掉,改 config.yaml:
model:
# 会话超过这么多上下文 token 时,中途切换前先问一句
# (下一条回复要按未缓存价格重读)。0 表示关闭。
switch_context_confirm_tokens: 100000
重新选你当前正在用的那个模型不会弹(缓存还是热的),没有测量到上下文的会话(新会话、非实时界面)也豁免。
无人值守的数据训练
有些模型(名字带 -contributor 后缀的,比如 muse-spark-1.2-contributor、muse-spark-1.3-contributor)因为厂商可能拿你的数据训练而打折。交互式选择时会有确认提示,但无人值守的任务(比如 Kanban 工作器、cron 定时任务)没法弹窗问,所以默认直接拒绝。
如果你能接受,可以这样持久确认:
hermes config set security.allow_data_training_tiers_noninteractive true
想撤销就:
hermes config unset security.allow_data_training_tiers_noninteractive
设置辅助模型
点 Show auxiliary 展开 11 个任务槽位。每个默认都是 auto——意思是尝试用主模型干这个活。如果主模型干不了或挂了,就按任务专属的 fallback 链、主 fallback 链的顺序往下找。
这里有个重要的行为变化:Hermes 不会去猜你没配置过的服务商。如果选了主服务商、又没声明任何 fallback,那么主服务商顶不住时,这个辅助任务会直接跳过并给出警告,而不是偷偷记到你恰好登录着的另一个账号上。(内置的发现链只在完全没有选主服务商时才会跑。)
什么时候需要手动覆盖?比如你想让图片分析用个便宜的小模型,或者让上下文压缩用个快的模型——那就单独指定。
小贴士:最快的配置路径
如果你用 Nous Portal,一个订阅就能用 300+ 模型。全新安装后跑一句:
hermes setup --portal
一条命令搞定登录和设置服务商。想看配了什么,用 hermes portal info。Portal 订阅用户还能在按 token 计费的服务商上打九折。
另外提醒一句:全新安装的 config.yaml 里 model 是空字符串(表示“还没配置”)。第一次跑 hermes setup 或 hermes model 时,它会自动升级成带 provider、default、base_url、api_mode 的映射结构。如果你看到空字符串,跑一下 hermes model 就会自动补全。
Nous Portal:Claude 走哪条线
Nous Portal 上的 anthropic/* 模型有两条线路可选:OpenAI 兼容的 /v1/chat/completions,和 Anthropic 原生的 Messages 线路 /v1/messages。用 nous.anthropic_wire 来选:
nous:
anthropic_wire: chat # 默认。"native" = 走 Anthropic Messages 线路;"auto" = 每个会话自行决定
目前默认是 chat。原生线路本身是更好的传输方式(签名思考块原样透传、原生 cache_control 作用域),但在 Portal 由 OpenRouter 转发的路径上,并发工具循环时它会在 14–20% 的连续调用中重写上一轮的提示词缓存,代价不小——所以暂时还是 chat 当默认。
给服务商加请求头
自定义服务商(providers.<名字>)还能配几个小开关,控制 Hermes 怎么跟这个端点说话。
extra_headers——给这个服务商的每个 LLM 请求都挂上额外的 HTTP 头,最后应用,所以换密钥、重建客户端都不会丢。适合 Cloudflare Access 服务令牌、代理认证这类场景:
providers:
my-gateway:
api: https://llm.internal.example.com/v1
api_key: sk-...
extra_headers:
CF-Access-Client-Id: "xxxx.access"
CF-Access-Client-Secret: "yyyy"
头里经常带凭据,Hermes 从不记录它们。extra_headers 对 OpenAI 兼容线路和 anthropic_messages 线路都生效(主客户端、/model 切换、重建、辅助客户端都算),bedrock_converse 不用它。如果中继后面挡着 WAF、把 SDK 默认的 User-Agent 给拦了(403 “Your request was blocked” 或浏览器挑战页),这就是典型的设置理由——这种 403 Hermes 会报成防火墙/CDN 拦截,而不是密钥被拒。
session_affinity_header——填一个头的名字,Hermes 会把会话 id 塞进发往该服务商的每个请求里(chat_completions、anthropic_messages、codex_responses 的主回合,以及压缩、起标题这些辅助调用)。不设就不发——Hermes 绝不往没要求的端点发会话标识。前面挡着会话感知代理、后面是有状态后端时(LiteLLM 的 x-litellm-session-id、自建 Claude/OpenAI 网关),代理本来没法把一轮轮 agent 循环关联起来,会把几乎每个请求都当成新对话、每回合重发整段历史:
providers:
my-proxy:
api: http://127.0.0.1:4000/v1
api_key: sk-...
session_affinity_header: x-litellm-session-id



今天就到这儿。下回咱们聊聊上下文压缩——为什么聊着聊着 AI 会“忘记”前面的话,以及怎么让它别忘。
官方界面截图

📖 官方文档
本文根据 Hermes Agent 官方文档编写,原文见:官方文档 › user-guide/configuring-models