4月初,Hermes Agent突然火了。它由Nous Research推出,主打“自动提炼Skill + 闭环进化”。名字带点调侃意味,但背后的技术逻辑值得拆解。这篇文章不讲概念包装,只说它实际怎么工作、和Claude Code这类成熟编程Agent差在哪,以及怎么用OpenClaw快速搭起本地智能体环境。
先看一个事实:Claude Code体验好,不是因为它的Skill会自我进化,而是靠一套打磨成熟的CLI工具链。
- GlobTool:按模式匹配文件路径,比如
src/*/api/.py - GrepTool:在代码中精准定位函数定义或调用位置
- FileReadTool:读取文件内容,支持行号范围和上下文截取
这些工具不依赖大模型推理,响应快、结果稳,是任务落地的“地基”。Skill在这里是明确、可测、可替换的模块,不是黑盒能力。
Hermes Agent的差异点在于:它把Skill生成过程自动化了。完成一次复杂任务后,系统会回溯执行轨迹,识别出重复出现的操作模式(比如“先grep找函数,再read看实现,最后patch修改”),打包成新Skill。下次遇到类似问题,直接调用,跳过冗长推理。
这不是魔法——它依赖清晰的任务日志、结构化的工具调用记录,以及足够多的执行样本。没日志,就提不出Skill;没样本,提炼出的Skill大概率泛化失败。
Hermes Agent不靠人工写Skill模板,而是从真实执行中“挖”出来。流程很直白:
# 安装(仅需基础依赖) pip install hermes-agent
启动服务(默认监听 localhost:5000)
hermes-agent start
执行任务(带完整上下文)
hermes-agent run "重构 utils/date.py 中的 parse_iso_date 函数,支持毫秒级时间戳"
查看已生成的Skill(名称带时间戳和任务摘要)
hermes-agent list-skills
关键在run这一步:Hermes Agent会调用工具链执行任务,全程记录工具名、参数、返回值、耗时。提炼阶段分析这些日志,合并高频操作序列,生成带输入/输出契约的Skill文件(YAML格式),存入本地skills/目录。
进化不是模型微调,而是Skill的迭代优化。每次运行任务,系统会对比当前执行路径和已有Skill的匹配度。如果某个Skill被调用但结果不理想(比如grep没找到目标、patch应用失败),就触发重放+修正流程,生成新版本Skill。
# 导入已有Skill(手动维护或团队共享) hermes-agent import-skill ./skills/parse_date_v2.yaml
触发本地训练(重放历史任务,验证Skill有效性)
hermes-agent train –epochs 3
评估改进效果(统计成功率、平均步数下降)
hermes-agent evaluate
train命令不更新LLM权重,只做两件事:1)用历史任务重放检验Skill鲁棒性;2)对失败案例生成修正建议(比如“GrepTool应增加 -i 参数”)。最终产出是新版Skill文件,而非模型检查点。
OpenClaw是国产Claw生态的开源实现,核心价值是提供标准化工具注册、执行沙箱和可观测性接口。和Hermes Agent集成,重点在打通工具调用链。
git clone https://github.com/OpenClaw/OpenClaw.git cd OpenClaw pip install -r requirements.txt python main.py
启动后,默认提供 /tools/glob, /tools/grep, /tools/read 等REST接口,每个接口接受JSON参数,返回结构化结果。
Hermes Agent需要知道OpenClaw的工具地址。修改其配置文件:
cp hermes-agent/config.yaml OpenClaw/config/ nano OpenClaw/config/config.yaml
加入以下配置:
hermes_agent: endpoint: http://localhost:5000 api_key: your_api_key_here tools: glob: http://localhost:8000/tools/glob grep: http://localhost:8000/tools/grep read: http://localhost:8000/tools/read
注意:Hermes Agent的tools字段必须和OpenClaw暴露的工具路径严格对应,否则调用会404。
顺序很重要:
# 先启OpenClaw(提供工具服务) python OpenClaw/main.py
再启Hermes Agent(消费工具)
hermes-agent start
最后发任务(Hermes Agent会自动路由到OpenClaw工具)
hermes-agent run "在 tests/ 目录下查找所有测试文件,检查是否调用了 mock.patch"
此时Hermes Agent的日志里会出现类似 Calling tool ‘grep’ with args: {‘pattern’: ‘mock.patch’, ‘path’: ‘tests/’} 的记录,说明链路已通。
任务:“把项目中所有 datetime.now() 调用替换成 timezone.now(),并补上 from django.utils import timezone 导入”
Hermes Agent执行路径:
glob扫描*.py文件grep在每个文件中搜索datetime.now()read读取匹配行所在文件的头部- 判断是否已导入
timezone,未导入则生成patch - 提炼Skill:
django_datetime_replace(含文件过滤、导入检测、patch生成三步)
第二次执行同类任务时,直接调用该Skill,跳过前两步探索。
任务:“检查 /var/log/nginx/error.log 最近100行,提取5xx错误频次最高的URI”
Hermes Agent会组合:
read读取日志尾部grep提取5xx行(grep ‘ 5[0-9][0-9] ’)awk统计URI(awk ‘{print $7}’ | sort | uniq -c | sort -nr | head -5)
若发现某次awk命令因日志格式变化失败,系统会捕获错误,生成适配新格式的变体Skill,比如改用Python脚本解析。
Hermes Agent本身不限语言,它调度的是工具。只要OpenClaw或你自定义的工具支持某语言(比如提供 pylint、eslint、javac 封装接口),就能用。目前OpenClaw官方工具覆盖Python/JS/Shell,Java需自行封装javac调用。
确保Skill YAML符合规范:
name: my_custom_skill description: "处理特定日志格式" input_schema: type: object properties:
log_path: {type: string}
output_schema: type: object properties:
error_count: {type: integer}
steps:
- tool: read args: {path: "{{input.log_path}}", lines: 100}
- tool: grep args: {pattern: "ERROR", input: "{{steps.0.output}}"}
然后执行
hermes-agent import-skill ./skills/my_custom_skill.yaml难点不在代码,而在工具契约对齐。比如Hermes Agent期望
grep返回{"matches": […]},但你的自定义grep工具返回纯文本,就必须加一层适配器。OpenClaw的tool_adapter.py模板就是干这个的——别跳过这步。- 直接读Hermes Agent的
skill_extractor.py源码,看它怎么从日志生成Skill(核心逻辑不到200行) - 在OpenClaw里加一个
curl工具,然后让Hermes Agent自动提炼出“调用内部API”的Skill - 把Hermes Agent的Skill导出为OpenClaw的
tool.yaml,反向验证契约兼容性
- 直接读Hermes Agent的
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/257969.html