Hermes Kanban 多 Agent 编排:让多个 Agent 并行协作完成复杂任务
Hermes Kanban 是一块持久化任务板,多个命名 Agent 在上面认领、执行、交接工作——跨进程、跨重启、可追溯。本文拆解六列看板机制、九种协作模式、delegate_task 子代理委派、五种委派模式、Kanban Codex Lane、Orchestrator 铁律,以及四个用户故事的完整实操步骤,附 8 问 FAQ。
一套系统化成本控制方案,把 Hermes Agent 月费从 $200 压到 $5 以下:Provider Routing 六种排序策略、Credential Pools 四种轮换策略、三层韧性降级链、辅助模型独立配置防压缩风暴、Tool Search 延迟加载省 89% Token、execute_code 中间结果不入上下文——附翔宇五台机器实战 config.yaml 完整配置。
Hermes Agent 能跑起来不稀奇,稀奇的是跑一个月之后账单不让你心跳加速。
社区里最常见的故事是这样的:装好 Hermes,对接 Anthropic API,跑了一周,$137 没了。问题不在 Hermes 贵——它本身是开源免费的,MIT 许可证——问题在于没有做成本工程。一个未优化的 Hermes 实例,72 个工具 Schema 每轮吃掉 19,210 个 Token,辅助压缩任务默认跟主模型走一条线,主模型限流时压缩连带崩溃丢失整个对话上下文。
这篇文章不讲省钱的「心态」,直接给配置。一套系统化方案,把月费从 $200 压到 $5 以下:Provider Routing 六种排序策略选最便宜的子提供商、Credential Pools 四种轮换策略让限流不中断会话、辅助模型独立配置防压缩风暴、Tool Search 延迟加载砍掉 89% 的固定 Token 开销、execute_code 让中间结果不进上下文窗口。
如果你还没装 Hermes,先看 Hermes Agent 完全指南 把基础架构搞清楚,再回来做成本优化。


Provider Routing 控制的是 OpenRouter 内部的子提供商(Anthropic、Google、AWS Bedrock、Together AI 等)如何处理你的请求。
💡 通俗讲:你买了一张 OpenRouter 的车票,Provider Routing 决定这张车票走哪条线路——走最便宜的、走最快的、还是走延迟最低的。
这和 Fallback Providers(跨提供商的故障转移)是两个独立维度。Provider Routing 是同一个平台内部的路由优化,Fallback Providers 是主模型整体失败时切换到完全不同的提供商。
provider_routing 控制六个维度:排序策略、提供商白名单、黑名单、显式优先级、参数兼容性过滤和数据收集权限。
提示词:生成 Provider Routing 配置
请帮我生成 Hermes 的 provider_routing 配置块。要求包含以下六个字段:
sort:排序策略,可选值 price(按价格)、throughput(按吞吐量)、latency(按延迟)only:白名单数组,只使用列表中的提供商,留空表示不限制ignore:黑名单数组,永不使用列表中的提供商order:显式优先级顺序数组,按顺序依次尝试require_parameters:布尔值,设为 true 时仅路由到支持请求中所有参数的提供商data_collection:控制数据收集,可选值 allow 或 deny,留空表示使用提供商默认行为sort 字段有三个值,再搭配 only、ignore、order 三个过滤器,组合出六种常见策略:
| 策略组合 | 配置 | 适用场景 |
|---|---|---|
| 纯价格优先 | sort: "price" |
高流量开发、成本敏感 |
| 纯吞吐量优先 | sort: "throughput" |
长文本生成、批量任务 |
| 纯低延迟优先 | sort: "latency" |
交互式对话、终端实时使用 |
| 价格优先 + 白名单 | sort: "price" + only: [...] |
只在信任的提供商中选最便宜的 |
| 显式排序 + 兜底 | order: ["Anthropic", "Google"] |
优先 Anthropic,满载时切 Google |
| 隐私保护型 | ignore: ["Together", "Lepton"] + data_collection: "deny" |
不想数据流向某些提供商 |
成本优化(日常编码推荐):
provider_routing:
sort: "price"
一行配置,让 OpenRouter 自动选择当前最便宜的子提供商。适合写代码、跑任务这类对延迟不敏感的场景。
速度优化(交互对话推荐):
provider_routing:
sort: "latency"
当你在终端里和 Hermes 对话时,首 Token 延迟直接影响体验。latency 模式优先选择响应最快的子提供商。
指定优先顺序 + 参数完整性保障:
提示词:生成指定优先顺序的 Provider Routing 配置
请帮我生成 provider_routing 配置。要求:
order 指定优先顺序:先走 Anthropic,满载时切 Googlerequire_parameters 设为 true,确保只路由到支持所有请求参数的提供商先走 Anthropic,满载时切 Google。开启 require_parameters 后,避免因为某个子提供商不支持 temperature 或 top_p 而返回错误。
隐私保护型:
提示词:生成隐私保护型 Provider Routing 配置
请帮我生成 provider_routing 配置。要求:
ignore 拉黑不信任的提供商:Together、Leptondata_collection 设为 deny,关闭数据收集如果你对数据流向有要求,用 ignore 把不信任的提供商拉黑,再用 data_collection: "deny" 从全局层面关闭数据收集。
Provider Routing 仅在使用 OpenRouter 时生效。直连 Anthropic API 或 DeepSeek API 时,这套配置无效——因为你已经确定了提供商,不存在「路由」的问题。
通过 Nous Portal 路由的流量同样尊重 routing 配置,而且 Portal 订阅者额外享受 10% 的 Token 折扣。
路由配置在创建 AIAgent 时作为参数传入:
providers_allowed ← provider_routing.only
providers_ignored ← provider_routing.ignore
providers_order ← provider_routing.order
provider_sort ← provider_routing.sort
provider_require_parameters ← provider_routing.require_parameters
provider_data_collection ← provider_routing.data_collection
这些参数最终附加到发往 OpenRouter 的 HTTP 请求头中,由 OpenRouter 的路由层执行实际选择。
一个提供商不够用,三层才够稳。Hermes 的韧性体系由三层防线组成:
fallback_providers:
- provider: openrouter
model: anthropic/claude-sonnet-4
触发降级的条件:
| HTTP 状态码 | 行为 |
|---|---|
| 429 限流 | 重试后触发 |
| 500/502/503 服务端错误 | 重试后触发 |
| 401/403 认证失败 | 立即触发 |
| 404 模型未找到 | 立即触发 |
| 无效响应 | 多次后触发 |
关键设计:按轮次(Per-Turn)降级,不是按会话(Per-Session)
每次用户发送新消息,Hermes 都从主模型开始尝试。如果主模型在当前轮次中失败,降级只对本轮生效。下一轮重新尝试主模型。
💡 通俗讲:主模型像你的首选餐厅。今天满座了,你去隔壁吃一顿。明天不会因为今天满座就默认去隔壁——你还是先去首选餐厅看看。
单轮内最多降级一次。如果降级也失败,走正常错误处理流程。这个设计防止了级联降级循环,同时每轮都给主模型一个恢复的机会。
每个辅助任务有独立的提供商解析链。这是成本控制的核心战场:
| 任务 | 功能 | 配置键 |
|---|---|---|
| Vision | 图片分析 | auxiliary.vision |
| Web Extract | 网页摘要 | auxiliary.web_extract |
| Compression | 上下文压缩 | auxiliary.compression |
| Skills Hub | 技能搜索 | auxiliary.skills_hub |
| MCP | MCP 辅助操作 | auxiliary.mcp |
| Approval | 命令审批分类 | auxiliary.approval |
| Title Generation | 会话标题 | auxiliary.title_generation |
| Triage Specifier | Kanban 任务细化 | auxiliary.triage_specifier |
auto 模式探测链(文本任务):
OpenRouter → Nous Portal → Custom endpoint → Codex OAuth →
API-key providers (z.ai, Kimi, MiniMax, 小米, Hugging Face, Anthropic) → give up
auto 模式探测链(视觉任务):
Main provider (if vision-capable) → OpenRouter → Nous Portal →
Codex OAuth → Anthropic → Custom endpoint → give up
当显式设置的辅助提供商遇到容量级别的错误(402 余额不足、429 日配额耗尽、连接失败)时,触发四层降级链:
auxiliary.<task>.fallback_chain(可选的自定义链)关键区分:短暂的 HTTP 429 限流(带 Retry-After 头)不触发降级——Hermes 尊重你的显式选择,等待重试。只有日/月配额耗尽、支付错误和连接失败才会绕过显式提供商。
子代理(通过 delegate_task 创建的)继承父代理的降级链,但可以用更便宜的模型:
delegation:
provider: "openrouter"
model: "google/gemini-3-flash-preview"
这是一个容易被忽略的降本点:子代理的任务通常比主任务简单,没必要用同等昂贵的模型。
截至撰稿时,Hermes 支持 30+ 个提供商:OpenRouter、Nous Portal、OpenAI Codex、GitHub Copilot、Anthropic、z.ai(GLM)、Kimi/Moonshot、MiniMax、DeepSeek、NVIDIA NIM、Google Gemini(OAuth 和 API Studio 两种)、xAI/Grok、AWS Bedrock、Qwen Portal、Alibaba/DashScope、腾讯 TokenHub、Microsoft Foundry、LM Studio(本地模型)、Hugging Face、Custom endpoint 等。
完整列表见 Hermes 完全指南 和 本地模型集成。


凭据池是三层韧性架构的第一层防线。它允许为同一提供商注册多个 API Key 或 OAuth Token。当一个 Key 触发限流或计费配额,Hermes 自动轮换到下一个健康 Key——保持会话不中断,不切换提供商。
💡 通俗讲:一个提供商给你一把钥匙,你自己多配几把。一把用完了换下一把,门还是同一扇门。
请求进入
→ 从凭据池选择 Key(round_robin / least_used / fill_first / random)
→ 发送到提供商
→ 429 限流?
→ 计划/用量限制? → 立即轮换到下一个 Key
→ 通用/瞬时 429? → 同一 Key 重试一次 → 第二次 429 → 轮换
→ 全部 Key 耗尽 → 触发 fallback_model(不同提供商)
→ 402 计费错误? → 立即轮换(24 小时冷却)
→ 401 认证过期? → 先尝试刷新 Token → 刷新失败 → 轮换
→ 成功 → 正常继续
| 策略 | 行为 | 适用场景 | 配置值 |
|---|---|---|---|
| fill_first(默认) | 用第一个健康 Key 直到耗尽,再用下一个 | 单主力多备份 | fill_first |
| round_robin | 均匀轮换,每次选择后轮转 | 多 Key 均匀分摊 | round_robin |
| least_used | 总是选请求计数最低的 Key | 长期均衡 | least_used |
| random | 在健康 Key 中随机选择 | 简单场景 | random |
配置方式:
提示词:生成凭据池轮换策略配置
请帮我生成 credential_pool_strategies 配置块。要求按提供商分配轮换策略:
openrouter:round_robin(多 Key 均匀分摊负载,OpenRouter 通常有多个计费 Key)anthropic:least_used(长期均衡使用,保持各 Key 用量一致)deepseek:fill_first(单主力多备份,用完一个再换下一个,方便追踪单 Key 用量)| 错误类型 | Hermes 行为 | 冷却时间 |
|---|---|---|
| 429 限流(瞬时) | 同一 Key 重试一次,第二次连续 429 轮换 | 1 小时 |
| 429 限流(配额) | 立即轮换 | 1 小时 |
| 402 计费/配额耗尽 | 立即轮换 | 24 小时 |
| 401 认证过期 | 先尝试刷新 OAuth Token,刷新失败才轮换 | 无 |
| 全部 Key 耗尽 | 降级到 fallback_model(跨提供商) |
无 |
# 添加第二个 OpenRouter Key
hermes auth add openrouter --api-key sk-or-v1-your-second-key
# 添加第二个 Anthropic Key
hermes auth add anthropic --type api-key --api-key sk-ant-api03-your-second-key
# 添加 DeepSeek Key
hermes auth add deepseek --type api-key --api-key sk-ds-your-key
# 查看凭据池状态
hermes auth list
# 交互式凭据管理
hermes auth
Hermes 启动时从多个来源自动发现凭据:
| 来源 | 示例 | 自动发现 |
|---|---|---|
| 环境变量 | OPENROUTER_API_KEY |
是 |
| OAuth Token(auth.json) | Codex device code | 是 |
| Claude Code 凭据 | ~/.claude/.credentials.json |
是(Anthropic) |
| 手动添加 | hermes auth add |
持久化到 auth.json |
这意味着如果你的机器上同时装了 Claude Code 和 Hermes,Hermes 会自动发现 Claude Code 的 Anthropic 凭据——不需要手动复制 Key。
GitHub Issue #33088 指出:当 fallback 提供商和主提供商使用同一个平台时(比如都走 OpenRouter),fallback 的 429 错误会消耗主池中的 Key。
当前修复方向是:池在 fallback 共享同提供商时保留(多 Key 轮换是设计意图),在切到不同提供商时清除。使用时注意 fallback 尽量配不同平台的提供商。
钱花在哪里?这个问题需要三层回答。
Hermes TUI 的 /agents 叠加层提供:
对日常使用来说,这个内置功能已经够用。但它有一个硬伤:跟 OpenRouter 的定价层耦合。GitHub Issue #19469 指出,使用直连提供商(Anthropic、Bedrock、自定义端点等)时成本报告会断裂。
如果需要更精细的成本归因,可以搭配外部工具:
| 工具 | 类型 | 核心能力 | 适合场景 |
|---|---|---|---|
| Langfuse | 开源 | Observation 级 Token + 成本追踪,Prompt 管理 | 最成熟的开源选择,适合自托管 |
| Opik(Comet) | 开源 | Span 级追踪,自动成本计算,内置提供商价格表 | 开源替代方案 |
| LiteLLM | 开源 | 100+ 提供商统一代理,虚拟 Key 预算管理 | 作为 Hermes 前置成本控制网关 |
| Braintrust | 商业 | 三层可见性,Agent trace 每步归因 | Agent 循环中精确的 Token 归因 |
| Bifrost(Maxim AI) | 商业 | 层级虚拟 Key,语义缓存,自动限额 | 替代 LiteLLM 的 Hermes 前置网关 |
不同提供商使用不同的分词器(Tokenizer)。本地 token 估算可以用于规划,但生产报告必须依赖提供商响应中返回的 usage 字段。跨提供商的估算误差足以扭曲成本比较、路由决策和上下文窗口告警。

Hermes 的压缩系统是一条五阶段流水线,设计目标是在保留关键信息的前提下最大限度减少上下文窗口占用。
阶段一:工具结果剪枝(无 LLM 调用)
三个子步骤,全部基于规则,不消耗 Token:
"[Duplicate tool output]"npm test 的 47 行输出变成 "[terminal] ran npm test → exit 0, 47 lines";1,200 字符的文件读取变成 "[read_file] read config.py (1,200 chars)"阶段二:边界确定
保护头部(前 3 条消息)和尾部(约 20K Token 预算),中间区域进入压缩。
阶段三:LLM 摘要
使用结构化 12 节模板生成摘要。模板明确框定为「给另一个助手的简报」——这个措辞很关键,防止摘要器试图回答对话中的问题,而不是总结它们。
阶段四:消息组装
[头部] + [摘要] + [尾部] 拼接成新的上下文。
阶段五:完整性修复
修复被压缩破坏的 tool_call/result 配对。为被删除结果的调用添加占位符结果,避免模型因为看到调用但看不到结果而产生困惑。
compression:
enabled: true
threshold: 0.50 # 上下文窗口占用超过 50% 时触发
target_ratio: 0.20 # 压缩后目标占用 20%
protect_last_n: 20 # 保护最近 20 条消息不被压缩
如果连续两次压缩各自节省不到 10% 的 Token,Hermes 自动停止压缩。
💡 通俗讲:一次压缩省了 8% 但花了 2,000 Token 生成摘要,净收益是负的。Hermes 能识别这种情况并自动刹车。
Hermes 在会话启动时冻结记忆快照。会话中途的写入更新磁盘文件,但不改变系统提示词。这不是设计疏忽,而是提示词缓存效率的关键:
这是社区踩坑最多的地方:辅助压缩任务默认跟主模型走。
用 Claude Opus 做上下文压缩是极度浪费的。压缩任务的本质是「总结文本」,Flash 级别的模型完全能胜任。Reddit 社区的实测数据显示,把 auxiliary.compression 换成 Flash 级模型后,Token 花费直降 85%+。
auxiliary:
compression:
provider: deepseek
model: deepseek-v4-flash # 用 Flash 做压缩,不用 Pro

Hermes 默认安装有 72 个工具,每个工具的 Schema 定义要写进每轮 API 调用的请求体。72 个工具 = 约 19,210 Token 的固定开销。每一轮。
GitHub Issue #4379 的实测数据更惊人:默认安装的 Hermes 每次 API 调用有约 73% 是固定开销(约 13,900 Token),其中工具 Schema 占大头。
Tool Search(v0.16.0+,截至 2026 年 6 月的最新版本)用三个桥接工具替代完整的工具数组:
tool_search(query, limit?) — 搜索延迟加载的工具目录
tool_describe(name) — 加载一个工具的完整 Schema
tool_call(name, arguments) — 调用一个延迟加载的工具
Model: tool_search("create a github issue")
→ { matches: [{ name: "mcp_github_create_issue", ... }, ...] }
Model: tool_describe("mcp_github_create_issue")
→ { parameters: { type: "object", properties: { ... } } }
Model: tool_call("mcp_github_create_issue", { title: "...", body: "..." })
→ { ok: true, issue_number: 42 }
从 19,210 Token 降到约 2,200 Token,减少 89%。
提示词:生成 Tool Search 延迟加载配置
请帮我生成 tool_search 配置块。要求:
mode:auto(自动判断是否启用延迟加载,可选值 auto / always / off)threshold:0.1(工具 Token 占上下文窗口比例阈值,超过 10% 时 auto 模式启用延迟加载)pinned_tools:始终完整加载、不延迟的 7 个核心工具——terminal、read_file、write_file、list_directory、send_message、memory、skillsevict_after_turns:3(工具调用后 3 轮未再使用则从活跃列表卸载)terminal、read_file、write_file、patch、search_files、todo、memory、browser_*、web_search、web_extract、clarify、execute_code、delegate_task、session_search、send_message 等始终直接加载pinned_tools 白名单:可以指定额外始终加载的工具evict_after_turns:工具调用后 N 轮未再使用则从活跃列表卸载官方文档明确指出:静态侧的 Token 节省是真实的,但部分节省会被搜索/描述/调用的额外轮次「还回去」。对于只有少量 MCP 工具的配置,Tool Search 可能反而增加总 Token 消耗。
判断标准:如果你的工具目录 Token 占上下文窗口不到 10%,关掉 Tool Search。超过 10%,打开。threshold: 0.1 就是这个意思——auto 模式会自动帮你判断。
社区项目 Hermes Tool Slimmer 从另一个角度解决同样的问题:配置时预筛选,只注册当前任务相关的工具子集。Tool Search 是运行时延迟加载,Tool Slimmer 是配置时预筛选——两者可以叠加。
execute_code 是 Hermes 最被低估的降本工具。
核心优势:中间工具结果永远不进入上下文窗口——只有最终的 print() 输出返回给 Agent。
| 维度 | delegate_task | execute_code |
|---|---|---|
| 推理 | 完整 LLM 推理循环 | 仅 Python 代码执行 |
| 上下文 | 全新隔离对话 | 无对话,只有脚本 |
| 工具访问 | 所有非阻止工具 + 推理 | 7 个工具通过 RPC,无推理 |
| 并行性 | 默认 3 个并发子代理 | 单脚本(内部可多线程) |
| Token 成本 | 较高(完整 LLM 循环) | 较低(只返回 stdout) |
# execute_code 内部调用 Hermes 工具
from hermes_tools import terminal, read_file, write_file
# 批量读取 + 处理,中间结果不进上下文
results = []
for f in ["api.py", "models.py", "routes.py"]:
content = read_file(f"src/{f}")
# 本地处理,不消耗 Token
if "TODO" in content:
results.append(f"{f}: {content.count('TODO')} TODOs")
print("\n".join(results)) # 只有这行返回给 Agent
如果用常规方式,Agent 需要三次 read_file 调用,每次的完整文件内容都会进入上下文窗口。用 execute_code,三个文件的完整内容只在 Python 沙箱内处理,Agent 只看到最终的统计结果。
| 限制项 | 默认值 | 超限行为 |
|---|---|---|
| 超时 | 300 秒 | SIGTERM 杀死,5 秒宽限后 SIGKILL |
| Stdout | 50 KB | 输出截断 |
| Stderr | 10 KB | 保留末尾用于调试 |
| 工具调用数 | 50 次 | 返回错误 |
Hermes 的批处理模式支持跨数百或数千个提示词的并行运行。虽然主要用于训练数据生成,但其成本控制设计值得借鉴:
--providers_allowed、--providers_ignored、--provider_sort 在批处理层面直接控制成本--reasoning_effort(none/minimal/low/medium/high/xhigh)和 --reasoning_disabled 可完全禁用推理 Token推理控制参数在交互模式下也可使用——如果你的任务不需要深度推理(比如简单的格式转换),设置 reasoning_effort: minimal 可以大幅减少 completion token。

以上都是文档和社区方案。下面是我在五台 Mac(4 台 Mac mini + 1 台 MacBook)上实际跑 Hermes 的成本控制经验。
| 场景 | 模型 | 提供商 | 说明 |
|---|---|---|---|
| 主力(常态) | GLM-5.1 | z.ai | Coding Plan Max,五台机器共享一个 Token |
| 主力(额度耗尽) | DeepSeek V4 Pro | deepseek | 按量计费无上限,$1.74/M 输入 $3.48/M 输出 |
| 视觉辅助 | Gemini 2.5 Flash | 图片理解,独立配置不受主模型限流影响 | |
| 压缩 | 跟主模型 | 跟主模型 | 显式配置,防压缩风暴 |
以上价格和模型信息为撰文时数据,请以各平台官方当前定价为准。
GLM Coding Plan Max 是按月免费额度制。五台机器 + Hermes 共享同一个 Token,重度使用会触碰月度上限。额度耗尽时的表现是 HTTP 429。
**压缩风暴(Compression Storm)**是我在实际使用中发现并命名的问题。
症状:辅助压缩任务默认跟主模型走。主模型一旦限流(GLM 429),压缩也挂。Agent 丢失整个对话上下文——不是丢一条消息,是丢全部。
原因:auxiliary.compression 默认走 auto 模式,auto 模式的探测链第一站就是主模型的提供商。主模型限流时,压缩请求走同一个提供商,同样被限流。
解法:auxiliary.vision 和 auxiliary.compression 显式配置独立提供商,不走 auto。视觉用 Gemini Flash(免费额度大),压缩跟主模型但独立配置——切模型时只改一处。
提示词:生成 Hermes 五台机器实战 config.yaml
请帮我生成 ~/.hermes/config.yaml 完整配置。要求包含以下所有模块:
主模型:
glm-5.1,provider = zai(GLM Coding Plan Max 免费额度)deepseek-v4-pro,provider 改为 deepseekProvider Routing(仅 OpenRouter 生效):
price(按价格排序子提供商)凭据池策略:
round_robin(多 Key 均匀分摊)fill_first(单主力多备份)降级链:
deepseek,model = deepseek-v4-flash辅助任务独立配置(防压缩风暴,不走 auto 模式):
google,model = gemini-2.5-flash(图片理解,免费额度大)zai,model = glm-5.1(跟主模型但显式配置,切模型时只改这里)deepseek,model = deepseek-v4-flashdeepseek,model = deepseek-v4-flash委派子代理:
deepseek,model = deepseek-v4-flash(子代理任务简单,用便宜模型)Tool Search 延迟加载:
auto,threshold = 0.13上下文压缩:
true,threshold = 0.50(占用超 50% 触发),target_ratio = 0.20(压缩到 20%),protect_last_n = 20Code Execution:
project,timeout = 300,max_tool_calls = 50通用版本:去掉 GLM 相关配置,主模型改为 deepseek-v4-flash(provider = deepseek),compression 的 provider 也改为 deepseek、model 改为 deepseek-v4-flash,其余不变。
# .env 加 DeepSeek Key
echo 'DEEPSEEK_API_KEY=sk-ds-your-key-here' >> ~/.hermes/.env
# config.yaml 改两行
# model.default: deepseek-v4-pro (或 deepseek-v4-flash 更省)
# model.provider: deepseek
# GLM 额度恢复后切回
# model.default: glm-5.1
# model.provider: zai
# 国内直连 GLM(推荐),跳过 3 秒自动探测
GLM_BASE_URL=https://open.bigmodel.cn/api/coding/paas/v4
不设 GLM_BASE_URL 时首条消息慢约 20 秒(3 次 HTTPS 探测 + 推理延迟)。直接指定端点后首消息响应时间降到正常水平。
免费优先 + 按量兜底的策略下,五台机器的月均 API 支出约 $3-5。大部分时间吃 GLM 免费额度,只有月末额度紧张时才切 DeepSeek 按量计费。
这套「不要一个提供商走到黑」的思路不是 Hermes 独创,有大量学术和产业数据支撑:
一个数据特别值得记住:天盘博客《AI Agent 代币经济学》指出,未优化与优化后部署成本可差 200 倍。
Hermes 的设计——Provider Routing + Credential Pools + Fallback Providers 三层架构——本质上就是把这些学术研究中的路由策略工程化落地到一个开源 Agent 框架里。
配置完成后,日常运行需要监控。
#!/bin/bash
set -euo pipefail
# 查看当前凭据池
hermes auth list
# 添加备用 Key
hermes auth add openrouter --api-key sk-or-v1-backup-key-here
hermes auth add deepseek --type api-key --api-key sk-ds-backup-key
这个脚本在 Hermes 会话中通过 execute_code 运行,用于检查过去一小时的 API 花费是否超出预算。
提示词:生成 Hermes 成本告警脚本
请帮我写一个 Python 脚本,在 Hermes 会话中通过 execute_code 运行。要求:
hermes_tools.terminal 调用 hermes stats --last-hour --json,获取最近一小时的 Token 使用统计2>/dev/null || echo '{}' 兜底,防止命令不可用时报错total_tokens 和 total_cost_usd 两个字段
hermes-dashboard 是社区开发的成本监控仪表盘,提供:
hermes dashboard --port 9119 &
未优化的 Hermes 每月 API 费用通常在 $50-200 之间。通过本文介绍的系统化成本控制方案(模型路由 + 凭据池轮换 + 辅助模型分离 + Tool Search),可以压到 $5-8/月。如果主力模型用免费额度(如 GLM Coding Plan),日常使用几乎零成本。
Provider Routing 控制的是 OpenRouter 内部子提供商的选择策略(按价格、速度、延迟排序),属于同一平台内的路由优化。Fallback Providers 是跨提供商的故障转移——当主模型整体失败时切换到完全不同的提供商和模型。两者是独立的两个维度,可以同时配置。
fill_first(默认)适合单主力多备份场景;round_robin 适合多 Key 均匀分摊负载;least_used 适合长期均衡使用;random 适合简单场景。建议 OpenRouter 用 round_robin 均匀分摊,Anthropic 或 DeepSeek 用 fill_first 保持单 Key 追踪。
压缩风暴是指辅助压缩任务默认跟主模型走,主模型一旦限流(429),压缩也连带崩溃,Agent 丢失整个对话上下文。防护方案:把 auxiliary.compression 显式配置独立的提供商和模型,不走 auto 模式。
静态侧的 Token 节省是真实的(从 19,210 降到约 2,200),但部分节省会被搜索/描述/调用的额外轮次还回去。如果只有少量 MCP 工具,Tool Search 可能反而增加总 Token 消耗。只有工具目录足够大时(超过上下文窗口的 10%),收益才显著。
execute_code 更省。delegate_task 启动完整的 LLM 推理循环,Token 成本较高。execute_code 只执行 Python 代码,中间工具结果不进入上下文窗口,只有最终 print() 输出返回给 Agent。适合 3 个以上连续工具调用且调用间有处理逻辑的场景。
理论上可以。方案是主力模型用 GLM Coding Plan 或 Gemini Flash 免费档,辅助任务用 Gemini Flash,降级链挂 本地模型(LM Studio)作为最终兜底。但完全免费意味着会频繁碰到限流,不适合生产环境。建议至少保留一个按量计费的提供商(如 DeepSeek)作为兜底。
日常使用够用。Hermes TUI 的 /agents 叠加层提供会话级别的成本、Token 和文件变更汇总。但如果需要跨系统的全流程追踪、精确的成本归因和预算告警,建议搭配 Langfuse(开源)或 LiteLLM(统一代理层)作为前置网关。
每周精选 AI 编程与自动化实战内容,直达你的邮箱