AI使用笔记 8

揭秘Hermes Agent的'技能图书馆':三级加载机制如何省下百万Token

想象一个场景:你装了 50 个技能,每个技能的文档平均 2000 tokens。如果每次对话都把这 50 份文档全部塞进上下文,一开口就先烧掉 10 万 tokens——还没干活呢,账单已经吓人了。

这就是 Hermes Agent 技能系统要解决的核心问题。它的答案叫"渐进式披露":别一次全加载,先看目录,再按需翻页。

直面痛点:一次性加载是"token 灾难"

大语言模型按 token 计费,上下文窗口也有上限。技能系统天然存在一个矛盾:技能越多,agent 能力越强,但每次对话的 token 开销也越大。

最笨的办法是"全量加载"——每次对话开始,把所有技能的完整文档一股脑塞进去。这样做有两个致命问题:

第一,成本失控。假设你有 100 个技能,每个文档 1500 tokens,光加载就要 15 万 tokens。用户问一句"今天天气怎么样",也得先付这笔钱。

第二,上下文浪费。模型的上下文窗口是有限资源。塞满技能文档后,留给实际对话和推理的空间就少了,相当于你带着一整个图书馆去回答一个只需要翻一页书的问题。

Hermes 的解法很直接:分层加载,用多少取多少。

核心架构:三级加载机制

Hermes 的技能加载分三个层级,每一层只暴露必要的信息量。

Level 0:先看目录,只花 3k tokens

当你问 agent "你有什么技能?"时,它调用的是 skills_list()。这个方法返回的不是技能的完整文档,而是一份精简索引:每个技能只暴露名称、简短描述和分类。

不管你是装了 20 个技能还是 200 个,这一步的 token 消耗都稳定在大约 3k tokens

这个设计很关键。大多数时候,用户只是想看看"有哪些技能可用",并不需要立刻加载某个技能的全部细节。3k tokens 换来一份完整的技能目录,这个性价比相当高。

Level 1:按需翻阅,加载单个技能全文

当 agent 确定需要用到某个技能时——比如你说"帮我用 axolotl 微调一个模型"——它会调用 skill_view(name),加载该技能的完整 SKILL.md 文档和元数据。

这一步的 token 消耗取决于具体技能文档的长度,没有固定数值。但关键在于:你只为当前需要的那个技能付费,而不是为所有技能买单。

Level 2:深入细节,按需读取引用文件

很多技能不是一篇文档能讲完的。一个复杂的技能可能有参考资料、模板文件、脚本示例等辅助文档,存放在 references/templates/scripts/ 这样的子目录里。

Level 2 允许 agent 通过 skill_view(name, path) 按需加载这些特定文件。比如 agent 在执行任务时发现需要参考某个配置模板,它会单独去读那个文件,而不是把整个技能目录一股脑加载进来。

这三层组合起来,形成了一个"先概览、再详情、最后按需深入"的加载节奏。

实战推演:axolotl 技能的 token 优化之旅

axolotl 这个技能举例。它位于 ~/.hermes/skills/mlops/axolotl/ 目录下,用于帮助用户微调大语言模型。

场景一:你只是随口问"你有什么技能?"

agent 调用 skills_list(),返回一份包含所有技能名称和简短描述的列表。axolotl 在列表里只占一行:"机器学习运维相关技能"。这一步的总开销约 3k tokens,axolotl 只分摊了其中的几十个 tokens。

场景二:你说"告诉我 axolotl 技能怎么用"

agent 调用 skill_view("axolotl"),加载完整的 SKILL.md 文档。这时候才真正读取 axolotl 的详细说明、使用方法、配置要求等内容。token 消耗取决于文档长度。

场景三:你在执行微调任务时需要参考配置模板

agent 调用 skill_view("axolotl", "templates/config.yaml"),只加载那一个模板文件。它不会去读 scripts/assets/ 目录下的其他文件,除非任务确实需要。

对比一下"全量加载"方案:在场景一中,全量加载会把 axolotl 的完整文档和所有引用文件都塞进来,而渐进式披露只用了几十个 tokens。这个差距在技能数量增多时会更加明显。

启示:这一设计对 AI Agent 生态的意义

Hermes 的三级加载机制不只是一个工程优化,它反映了一种设计哲学:信息的获取应该匹配需求的确定性

用户说"你有什么技能"时,需求是模糊的——他只是在探索。这时候给一份目录就够了。用户说"帮我用 axolotl"时,需求变得明确——他知道自己要什么。这时候再加载详细文档。用户在执行任务过程中遇到具体问题时,需求更加聚焦——他只需要某个特定文件。这时候只读那一个文件。

这个模式可以推广到更广泛的 AI Agent 设计中。任何需要管理大量知识或工具的 agent 系统,都可以借鉴这种"渐进式披露"的思路:

  • 先给索引,让用户知道"有什么"
  • 再给详情,让用户确认"要用哪个"
  • 最后按需深入,只加载"此刻需要的那部分"

在 token 成本居高不下的今天,这种设计不是锦上添花,而是关乎 AI 应用能否可持续发展的关键。毕竟,没有人愿意为用不到的信息买单。

技能存放在 ~/.hermes/skills/ 目录下,按类别组织——比如 mlops/ 下有 axolotl 和 vllm,devops/ 下有 deploy-k8s。你可以通过斜杠命令(如 /axolotl)或自然语言(如"告诉我 axolotl 技能怎么用")来触发加载。系统还支持条件激活和捆绑包功能,让技能管理更加灵活。

说到底,好的技术设计往往有个共同点:让用户感觉不到它的存在,但离开它又不行。Hermes 的三级加载机制就是这样的设计——你只管用技能,token 的精打细算交给系统来操心。

感谢阅读,如果这篇文章对你有帮助,欢迎继续浏览同栏目内容。

返回 AI使用笔记