<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hermes on CAO ZUOHUA</title><link>https://caozuohua.github.io/tags/hermes/</link><description>Recent content in Hermes on CAO ZUOHUA</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Mon, 29 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://caozuohua.github.io/tags/hermes/index.xml" rel="self" type="application/rss+xml"/><item><title>Agent 系列日记 5：为什么 Skill 路由比 ReAct 控制器更适合个人助理</title><link>https://caozuohua.github.io/posts/2026-06-29-skill-routing-vs-react/</link><pubDate>Mon, 29 Jun 2026 00:00:00 +0000</pubDate><guid>https://caozuohua.github.io/posts/2026-06-29-skill-routing-vs-react/</guid><description>&lt;blockquote&gt;
&lt;p&gt;从 luck-agent 到 Hermes-lite，我花了两年时间才想清楚这个问题：80% 的请求不需要&amp;quot;思考&amp;quot;，只需要&amp;quot;路由&amp;quot;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="回顾react-控制器模式的困境"&gt;回顾：ReAct 控制器模式的困境&lt;/h2&gt;
&lt;p&gt;2024 年做 luck-agent 的时候，我采用的是经典的 &lt;strong&gt;ReAct 模式&lt;/strong&gt;（Reasoning + Acting）：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;用户输入 → 大模型推理（意图识别 → 规划 → 工具选择 → 执行）→ 输出
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;所有请求，不管简单还是复杂，都走同一个推理链。一个&amp;quot;查 QPC 里有没有 VPS 相关的记录&amp;quot;的请求，也要经过：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;理解自然语言&lt;/li&gt;
&lt;li&gt;判断意图类别&lt;/li&gt;
&lt;li&gt;选择工具（search_qpc）&lt;/li&gt;
&lt;li&gt;构造查询参数&lt;/li&gt;
&lt;li&gt;执行并解释结果&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;问题很明显&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Token 消耗大&lt;/strong&gt;：每次推理要带上完整的 system prompt + 工具定义，光上下文就吃掉 3000-5000 token&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;延迟高&lt;/strong&gt;：一个简单查询要等模型完成完整推理链，响应时间 3-8 秒&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;上下文窗口压力&lt;/strong&gt;：随着工具数量增加（现在 Hermes-lite 有 20+ 个工具），system prompt 越来越大&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我当时就在知识库里记了一条：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;对于个人助理场景，相比最初的 ReAct 控制器模式，Skill 技能路由更适合当前 luckagent：80% 请求是固定模式，不需要复杂推理，技能比 Agent 更稳定，成本更低，响应更快。&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="skill-路由的核心思想"&gt;Skill 路由的核心思想&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;一句话&lt;/strong&gt;：预定义技能映射，轻量分类先路由，只加载需要的工具和 prompt。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;用户输入 → 轻量路由（关键词/意图 → 技能）→ 加载专用 prompt + 工具 → 执行
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="路由表设计"&gt;路由表设计&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 简化版路由逻辑&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ROUTING_RULES &lt;span style="color:#f92672"&gt;=&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;qpc&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;keywords&amp;#34;&lt;/span&gt;: [&lt;span style="color:#e6db74"&gt;&amp;#34;QPC&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;知识库&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;记一下&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;记录&amp;#34;&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;skill&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;qpc&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;tools&amp;#34;&lt;/span&gt;: [&lt;span style="color:#e6db74"&gt;&amp;#34;feishu_bitable_read&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;feishu_bitable_write&amp;#34;&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;prompt&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;qpc_skill_prompt&amp;#34;&lt;/span&gt; &lt;span style="color:#75715e"&gt;# 只加载 QPC 相关的 prompt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;vps&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;keywords&amp;#34;&lt;/span&gt;: [&lt;span style="color:#e6db74"&gt;&amp;#34;VPS&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;服务器&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;防火墙&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;Docker&amp;#34;&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;skill&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;gcp-vps-ops&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;tools&amp;#34;&lt;/span&gt;: [&lt;span style="color:#e6db74"&gt;&amp;#34;terminal&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;read_file&amp;#34;&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;prompt&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;vps_skill_prompt&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;blog&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;keywords&amp;#34;&lt;/span&gt;: [&lt;span style="color:#e6db74"&gt;&amp;#34;博客&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;文章&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;Hugo&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;发布&amp;#34;&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;skill&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;hugo-blog&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;tools&amp;#34;&lt;/span&gt;: [&lt;span style="color:#e6db74"&gt;&amp;#34;terminal&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;read_file&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;write_file&amp;#34;&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;prompt&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;blog_skill_prompt&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="对比同样查-qpc操作"&gt;对比：同样&amp;quot;查 QPC&amp;quot;操作&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;指标&lt;/th&gt;
					&lt;th&gt;ReAct 模式&lt;/th&gt;
					&lt;th&gt;Skill 路由&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;上下文 token&lt;/td&gt;
					&lt;td&gt;~4000（全量工具定义）&lt;/td&gt;
					&lt;td&gt;~800（仅 QPC 相关）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;首次响应延迟&lt;/td&gt;
					&lt;td&gt;3-8s&lt;/td&gt;
					&lt;td&gt;0.5-1.5s&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;工具调用次数&lt;/td&gt;
					&lt;td&gt;2-3 次（推理+执行）&lt;/td&gt;
					&lt;td&gt;1 次（直接执行）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;准确率&lt;/td&gt;
					&lt;td&gt;92%（模型可能选错工具）&lt;/td&gt;
					&lt;td&gt;98%（路由确定性高）&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="hermes-lite-的-skill-实现"&gt;Hermes-lite 的 Skill 实现&lt;/h2&gt;
&lt;p&gt;Hermes-lite 的 skill 系统是这样工作的：&lt;/p&gt;</description></item><item><title>Hermes-lite 裁剪实战：7 类典型坑与解法</title><link>https://caozuohua.github.io/posts/2026-06-25-hermes-lite-pitfalls-deep-dive/</link><pubDate>Thu, 25 Jun 2026 00:00:00 +0000</pubDate><guid>https://caozuohua.github.io/posts/2026-06-25-hermes-lite-pitfalls-deep-dive/</guid><description>&lt;p&gt;上一篇文章介绍了 Hermes-lite 的整体裁剪思路。这篇深入每一类实际踩过的坑，
把&amp;quot;为什么会遇到&amp;quot;和&amp;quot;怎么解&amp;quot;都说清楚。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="一路径迁移坑"&gt;一、路径迁移坑&lt;/h2&gt;
&lt;p&gt;从 &lt;code&gt;.hermes/&lt;/code&gt; 迁到 &lt;code&gt;.hermes-lite/&lt;/code&gt; 后，不是只改 &lt;code&gt;HERMES_HOME&lt;/code&gt; 就完事。&lt;/p&gt;
&lt;h3 id="踩到的点"&gt;踩到的点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;.skills_prompt_snapshot.json&lt;/code&gt; 里残留旧 &lt;code&gt;.hermes/&lt;/code&gt; 路径&lt;/li&gt;
&lt;li&gt;&lt;code&gt;web_search/SKILL.md&lt;/code&gt; 硬编码了旧路径&lt;/li&gt;
&lt;li&gt;技能、工具、memory、config、sessions、workspace 各自缓存旧路径&lt;/li&gt;
&lt;li&gt;systemd 环境变量、进程环境、配置文件、技能正文需要一起排查&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="经验"&gt;经验&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;迁移后 &lt;code&gt;grep&lt;/code&gt; 全目录旧路径：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;grep -r &lt;span style="color:#e6db74"&gt;&amp;#34;\.hermes/&amp;#34;&lt;/span&gt; /home/user/.hermes-lite/ --include&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;*.json&amp;#34;&lt;/span&gt; --include&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;*.md&amp;#34;&lt;/span&gt; --include&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;*.yaml&amp;#34;&lt;/span&gt; -l
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="2"&gt;
&lt;li&gt;技能快照要清理重建，不能复用旧缓存&lt;/li&gt;
&lt;li&gt;systemd 重启不是可选项 — 长进程内缓存会保留旧状态&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;systemctl restart hermes-lite
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;systemctl status hermes-lite &lt;span style="color:#75715e"&gt;# 确认新 PID&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="二技能裁剪坑"&gt;二、技能裁剪坑&lt;/h2&gt;
&lt;p&gt;一开始容易只看磁盘上有多少 &lt;code&gt;SKILL.md&lt;/code&gt;，但真正可用数量要看运行时过滤后的结果。&lt;/p&gt;
&lt;h3 id="踩到的点-1"&gt;踩到的点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;磁盘上 67 个 &lt;code&gt;SKILL.md&lt;/code&gt;，实际 gateway/slash 可见 65 个&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kanban-orchestrator/worker&lt;/code&gt; 因为 &lt;code&gt;environments: [kanban]&lt;/code&gt; 被过滤，这是预期不是坏了&lt;/li&gt;
&lt;li&gt;&lt;code&gt;_find_all_skills(skip_disabled=True)&lt;/code&gt; 这个参数名容易误读，实际是返回全部技能，默认才过滤 disabled&lt;/li&gt;
&lt;li&gt;&lt;code&gt;web_search&lt;/code&gt; 技能存在，但 Tavily key 缺失，会变成&amp;quot;看得到但用不了&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="经验-1"&gt;经验&lt;/h3&gt;
&lt;p&gt;判断技能可用性要看三层：&lt;/p&gt;</description></item><item><title>Hermes-lite 裁剪指南：在 1GB VPS 上跑轻量 AI Agent</title><link>https://caozuohua.github.io/posts/2026-06-24-hermes-lite-trimming-guide/</link><pubDate>Wed, 24 Jun 2026 23:58:52 +0000</pubDate><guid>https://caozuohua.github.io/posts/2026-06-24-hermes-lite-trimming-guide/</guid><description>&lt;h2 id="为什么要裁剪"&gt;为什么要裁剪&lt;/h2&gt;
&lt;p&gt;完整版 Hermes Agent（Nous Research）功能丰富：多平台网关、浏览器自动化、语音 TTS/STT、多 Agent 协作、Kanban 看板等。但这些功能对资源要求不低——在我的测试里，完整配置更适合至少 2GB 内存的机器。&lt;/p&gt;
&lt;p&gt;我有一台 GCP e2-micro（2 vCPU / 954MB RAM），想用它跑一个 24/7 在线的 AI Agent 接入飞书。完整版装不下，于是有了这个裁剪实践。&lt;/p&gt;
&lt;h2 id="三阶段渐进式裁剪"&gt;三阶段渐进式裁剪&lt;/h2&gt;
&lt;p&gt;裁剪不是一步完成的，而是三阶段递进：&lt;/p&gt;
&lt;h3 id="第一阶段本地-codex-完成初期核心裁剪"&gt;第一阶段：本地 Codex 完成初期核心裁剪&lt;/h3&gt;
&lt;p&gt;在本地电脑上，利用 &lt;strong&gt;Codex（OpenAI）&lt;/strong&gt; 作为辅助分析工具，对完整版 Hermes 进行全面&amp;quot;解剖&amp;quot;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;逐一扫描 &lt;code&gt;~/.hermes/&lt;/code&gt; 目录结构，识别每个模块的职责&lt;/li&gt;
&lt;li&gt;分析 67 个技能的依赖关系，标记哪些是核心链路的、哪些是边缘功能&lt;/li&gt;
&lt;li&gt;梳理 config.yaml 中每个配置项的实际作用，搞清楚&amp;quot;关掉会怎样&amp;quot;&lt;/li&gt;
&lt;li&gt;输出一份裁剪清单：哪些 toolset 可以禁、哪些 skill 可以删、哪些配置可以收紧&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这一阶段的核心价值：&lt;strong&gt;把&amp;quot;能不能关&amp;quot;这个判断做对&lt;/strong&gt;。Codex 帮助理解了代码间的依赖关系，避免直接关某个功能导致连锁崩溃。&lt;/p&gt;
&lt;h3 id="第二阶段大-vps-上跑完整版--压测验证"&gt;第二阶段：大 VPS 上跑完整版 + 压测验证&lt;/h3&gt;
&lt;p&gt;在&lt;strong&gt;一台大内存 VPS&lt;/strong&gt; 上安装完整版 Hermes，作为&amp;quot;对照基准&amp;quot;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;记录完整版的实际内存占用（idle / 高负载两种状态）&lt;/li&gt;
&lt;li&gt;逐个关闭非核心功能，观察内存变化和稳定性&lt;/li&gt;
&lt;li&gt;跑压测：模拟长时间运行、多轮对话、工具调用密集场景&lt;/li&gt;
&lt;li&gt;确认裁剪后系统在资源充足环境下依然稳定&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这一阶段的目的：&lt;strong&gt;建立性能基线 + 验证裁剪组合的安全性&lt;/strong&gt;。在大 VPS 上翻车无所谓，在小 VPS 上翻车就是服务宕机。&lt;/p&gt;</description></item></channel></rss>