当前位置: 首页 > news >正文

Hermes Agent 扩展开发完全指南:5 分钟从自定义 Tool 到组合 Toolset

Hermes Agent 扩展开发完全指南:5 分钟从自定义 Tool 到组合 Toolset

【免费下载链接】hermes-agentThe agent that grows with you项目地址: https://gitcode.com/GitHub_Trending/he/hermes-agent

读完这篇文章,你能给 Hermes Agent——一个支持自定义 Tool 与 Toolset 的开源 AI Agent 框架——加上自己的工具,并用 includes 把它们组合成按平台启用的工具集。适合会基础 Python、刚接触这个项目的开发者,示例代码都是最小可复制版本。

内置工具不够用时:先想清楚 Agent 要"多会的一招"

你在批量生成 PR 描述,想让 Agent 顺手统计词数、清掉文本里的多余空白,但内置工具里没有干这种细活文本处理的。与其把文本粘进聊天框让它现算,不如给它写个专用工具。它桌面端的会话与工具管理界面,就是你写完工具后验证效果的地方:

5 分钟跑通第一个自定义工具

把工具放进tools/目录即可被内置的自动发现机制导入:只要文件顶层有一次registry.register(...)调用,加载时会自动挂载,不需要维护手工 import 清单。一个字数统计 + 文本清洗工具长这样:

# tools/text_stats.py from tools.registry import registry def text_stats(text: str, mode: str = "count") -> str: """词数统计或空白清洗""" return " ".join(text.split()) if mode == "clean" else f"words={len(text.split())}" SCHEMA = { # JSON Schema:模型按它决定怎么调用工具 "type": "function", "function": { "name": "text_stats", "description": "统计文本词数或清洗多余空白", "parameters": {"type": "object", "properties": {"text": {"type": "string"}, "mode": {"type": "string", "enum": ["count", "clean"]}}, "required": ["text"]}, }, } registry.register(name="text_stats", toolset="text_utils", schema=SCHEMA, handler=lambda a, **k: text_stats(**a, **k)) # 注册到 text_utils 工具集

这就是注册自定义工具的三要素:工具函数、JSON Schema 参数定义、registry.register()。注意函数返回值约定为字符串(或 JSON 字符串),方便模型直接消费。

接着在toolsets.py里声明对应的集合(写法见下一节),然后只挂载这一个工具集跑一遍就能看到效果:

hermes run --toolset text_utils -q "统计 README 词数并清洗空白" # 只启用 text_utils

读懂 toolsets.py 的 description / tools / includes

Tool 是真正干活的单元(一个函数 + 一份 Schema);Toolset 是工具的分组,决定哪些平台、哪些会话看得到这些工具。toolsets.py 配置全部挂在单个TOOLSETS字典上,见 toolsets.py,每个条目就三个字段,各管一件事:

TOOLSETS = { "text_utils": { "description": "文本统计与清洗", # 用途说明,展示与检索用 "tools": ["text_stats"], # 本集合直接包含的工具名(只写名字) "includes": ["web"], # 复用其它工具集,递归展开 }, }
  • description给人看,出现在工具集列表和搜索结果里,写清楚"什么时候该用它";
  • tools给运行时用,名单里的名字要和注册时的工具名逐字一致;
  • includes写的是别的工具集的名字,引用关系会递归展开。

不走 CLI、在代码里启动时,把工具集名字通过enabled_toolsets传入,效果相同。

includes 嵌套组合与运行时动态建集合

includes 组合工具集的核心是嵌套:一个工具集可以 include 别的工具集,后者自己再 include 更多。下面这个条目展开后,text_utils里直接包含的工具、以及它内部 include 的web,都会被一并带入:

"report_writer": { "description": "报告写作专用集合", "tools": ["text_stats"], "includes": ["text_utils", "image_gen"], # 嵌套展开,递归解析 },

两条注意事项:includes按名字精确匹配且区分大小写,拼错不会报错,只是静默少一组工具;组合时留意每个工具都要占上下文里的 schema 空间,别把不相关的集合顺手塞进来。

不想改toolsets.py时,可以在运行时动态创建集合:

from toolsets import create_custom_toolset create_custom_toolset(name="hotfix_utils", description="临时调试用", tools=["text_stats"], includes=["web", "terminal"])

依赖是否满足,交给注册表检查,缺依赖的工具会被如实列出来:

from tools.registry import registry available, missing = registry.check_tool_availability() # 不可用的工具在 missing

上线前自检:validate_toolset 与树形输出

提交前先用两个校验函数过一遍:

from toolsets import validate_toolset, get_toolset_info if validate_toolset("report_writer"): info = get_toolset_info("report_writer") print(info["description"], info["resolved_tools"]) # 最终展开后的完整工具列表

resolved_tools是最可靠的口径:includes 全部展开后真正会生效的工具名。想看结构全貌,用树形输出:

from toolsets import print_toolset_tree print_toolset_tree("report_writer") # 递归打印 includes 树

输出是一棵嵌套树,能读两件事:每个节点的tools是它直接包含的工具,includes下面的子节点是递归展开的集合。叶子节点的工具才是模型真正能调用的——如果某个集合下没有任何叶子,大概率是那一层名字拼错了。

report_writer: 报告写作专用集合 ├─ tools: text_stats └─ includes └─ text_utils: 文本统计与清洗 ├─ tools: text_stats └─ includes └─ web: Web research and content extraction

高频翻车点:工具注册了却"隐身"

  • 忘了注册,或注册不在顶层tools/*.py里的registry.register(...)必须出现在模块顶层,写进函数体内自动发现就不会找到。
  • 注册了没暴露:自动发现只负责导入;工具名没写进toolsets.py任一工具集的tools名单,模型就永远看不到它——这是"工具像没写"的最常见原因。
  • Schema 缺 required:模型会缺参调用,第一轮就报错;参数类型也要和函数签名对齐,返回值保持字符串。
  • includes 名字拼错:不报错、静默少一组工具,用树形输出的叶子节点对一遍。
  • 工具描述里"点名"其它工具集的工具:那个工具集被禁用时模型会幻觉出不存在的调用,描述只写自己做什么。

用 tests/ 里的参照用例给工具上保险

单测以 tests/tools/test_registry.py 为参照,覆盖注册行为与可用性检查;工具集展开逻辑的用例在tests/test_toolsets.py。最少补两条路径:参数齐全时的正常返回,以及缺 required 参数时的表现。先把参照用例跑通再动手改:

pytest tests/test_toolsets.py tests/tools/test_registry.py -q # 先跑通参照用例

把你的工具集跑起来

延伸阅读三个文件:toolsets.py(全部工具集定义)、tools/registry.py(注册与自动发现实现)、CONTRIBUTING.md(贡献流程与工具规范)。把上面的最小路径完整跑一遍,今晚就能让自己的自定义工具集在 Hermes Agent 里跑起来 🚀

【免费下载链接】hermes-agentThe agent that grows with you项目地址: https://gitcode.com/GitHub_Trending/he/hermes-agent

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.cnnetsun.cn/news/4268964.html

相关文章:

  • 从 MP3 到 OGG-Opus:audio-recorder-polyfill 自定义编码器开发完全指南(init/encode/dump 协议详解)
  • CC Switch模型测试完整指南:三步验证Key与模型可用性
  • 打架行为检测数据集:YOLO实战级双格式标注与安防落地指南
  • 网络安全实战思维养成:从应急响应到攻击链还原的完整方法论
  • Transformers 实战:3 行代码跑通 pipeline 模型推理
  • 5分钟装好 OpenCode:终端 AI 编程助手的完整安装与上手指南
  • LangGraph状态机实战:构建可中断、可恢复的AI Agent
  • OpenClaw 性能调优实战:让个人AI助手从慢到快的3个关键动作
  • Open WebUI部署:私有AI对话平台一步到位指南
  • Scratch拼图游戏编程:从拖拽逻辑到状态管理的实战解析
  • HYBNetworking缓存管理实战:查询缓存大小、手动清除与自动清理策略
  • Superpowers 持续集成与自动化测试指南:从最小 CI 到部署验收检查清单
  • 用 Hermes Agent 三步做出数据分析报告:从 CSV 到图表的完整教程
  • STM32 UI框架升级解析:TouchGFX与LVGL选型及性能优化
  • 堵住低效漏洞!2026好用的AI论文网站大盘点,高分初稿不用愁
  • 数据分析样本与指标的准备
  • Plyvel源码剖析:Cython与nogil如何让Python以C速度调用LevelDB C++ API
  • 防爆AGV复合机器人:化工仓储搬运方案
  • 深入解析容器安全工具udica:为什么CIL块继承是策略生成的灵魂
  • MATLAB入门指南:从基础操作到工程实践的核心技巧
  • 跨模型KV Cache复用:闭式线性映射能否省掉重复Prefill?
  • Hermes Agent 接入 OpenRouter 完整指南:3 步配好 200+ AI 模型
  • 四步打通系统设计面试:system-design-primer完整实战指南
  • Superpowers AI编程技能库实战教程:从安装到跑通完整开发流程
  • C++模板编程:从泛型思想到STL实现的核心技术解析
  • Czar.Cms配置文件与AutoFac依赖注入实战:如何构建自动扫描整个程序集的DI容器
  • TOPSIS综合评价法:从原理到Python实战,告别“拍脑袋”决策
  • 深入解析西门子V90伺服GSD文件:从PROFINET集成到外部DI控制实战
  • Token成本失控?企业AI成本治理实战:从计费原理到限额监控
  • PPBadgeView 使用教程