news 2026/8/28 12:53:26

Hermes Agent自定义工具怎么开发:3步注册一个能用的自定义工具集

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Hermes Agent自定义工具怎么开发:3步注册一个能用的自定义工具集

Hermes Agent自定义工具怎么开发:3步注册一个能用的自定义工具集

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

你想让 Agent 回答客户问题之前,先自己去查一遍公司知识库,而不是每次都被你手动喂资料。Hermes Agent 自定义工具开发,拆开看就三件事:写一个函数、把它的名字挂进工具集、验证模型真的会调。这篇文章带你把这三件事完整跑一遍。

核心机制拆解:注册中心和工具集是怎么配合的

先给你 5 行代码,把框架里的真实配置抄出来感受一下:

# toolsets.py(内置配置节选) TOOLSETS = { "web": { "description": "Web research and content extraction tools", "tools": ["web_search", "web_extract"], }, }

工具集(Toolset)说白了就是给工具按场景打包的一份清单:tools字段列工具名,includes字段引用别的工具集。模型能"看见"哪些工具,完全由这份清单决定。

最小化的工具注册长这样——一个函数、一段参数描述、一次注册:

from tools.registry import registry def ping(args, **kw): return '{"success": true, "pong": true}' registry.register(name="ping", toolset="safe", schema=PING_SCHEMA, handler=ping)

数据流向一句话:模型决定调用工具 → dispatcher 按名字找到 handler → 你的函数跑完返回 JSON 字符串 → 结果回到模型继续推理。registry 负责 schema 收集、调用分发、可用性检查和错误包装,你自己只写中间那个函数。

类比我熟悉的东西:注册中心像后厨,学会了做菜;工具集像菜单——菜做出来了不写进菜单,客人(模型)是点不到的。

动手实操:把一个自定义工具从写出来到调起来

写一个能跑的工具函数

这一步,把函数、JSON Schema 和注册一次写完,全部放在一个新文件里。

# tools/text_transform.py import json from tools.registry import registry def text_transform(args): """把文本转成大写或小写""" text = args.get("text", "") if not text: return json.dumps({"success": False, "error": "text is required"}) mode = args.get("transform_type", "uppercase") result = text.upper() if mode == "uppercase" else text.lower() return json.dumps({"success": True, "result": result}) TEXT_TRANSFORM_SCHEMA = { "name": "text_transform", "description": "把文本转成大写或小写", "parameters": { "type": "object", "properties": { "text": {"type": "string", "description": "要转换的文本"}, "transform_type": {"type": "string", "enum": ["uppercase", "lowercase"]}, }, "required": ["text"], }, } registry.register(name="text_transform", toolset="text_processing", schema=TEXT_TRANSFORM_SCHEMA, handler=text_transform)

跑起来你应该看到:没有报错(注册动作发生在文件被导入时),此时工具已进注册中心——但模型还看不见它,别急,下一节补菜单。

handler 必须返回 JSON 字符串,返回 dict 会在解析结果时报错。

把工具挂进工具集

这一步,把工具名写进 toolsets.py,让它对模型可见。框架有自动发现机制:tools/下任何顶层带registry.register()调用的文件都会被自动导入,不用维护 import 列表;但工具集接线这一步是刻意的、手动的。

# toolsets.py —— 在 TOOLSETS 字典里加一项 "text_processing": { "description": "Text processing: case conversion", "tools": ["text_transform"], "includes": [], },

跑起来你应该看到:重启会话后模型的系统提示里多了一个text_transform的 schema,它能"看见"这个选项了。

工具集里写了一个不存在的工具名不会报错,只是默默不暴露——这类问题最隐蔽。

用 hermes tools 命令行调起来验证

这一步,确认工具集被当前平台启用,再让 Agent 实际调用一次。

hermes tools # 打开 curses 管理界面,找到 text_processing,确认已启用 # 或者在 config.yaml 里检查 tools.<platform>.disabled 是否把它禁了

跑起来你应该看到:界面列表里出现text_processing且处于启用状态。然后直接在会话里说"帮我把 hello 转成大写",Agent 应回复HELLO

如果模型不知道要调这个工具,先查 schema 的nameregistry.registername是否一字不差。

进阶与组合:工具集组合、includes 继承与插件动态加载

TOOLSETS里的includes是组合和继承的关键,它支持递归展开:

# toolsets.py —— 组合多个工具集 "content_creation": { "description": "Content creation workflow", "tools": ["text_transform"], "includes": ["web", "text_processing"], },

什么时候你会需要这个?当你想让某个平台或场景拥有一组固定搭配的能力时。每个平台的适配器启动时挑一个基础工具集(比如 Telegram 用messaging),再按includes把依赖的工具集全部展开——你改一处配置,整组能力跟着增减,不用逐平台复制工具列表。

另一条不碰核心代码的路是插件动态加载:在~/.hermes/plugins/<name>/下放plugin.yaml__init__.py,用ctx.register_tool(...)注册,插件工具集会被自动发现,随用随启:

# ~/.hermes/plugins/kb_lookup/__init__.py def on_load(ctx): def kb_lookup(args): return '{"success": true, "result": "查知识库"}' ctx.register_tool(name="kb_lookup", toolset="kb", schema={"name": "kb_lookup", "description": "查内部知识库", "parameters": {"type": "object", "properties": {}}}, handler=kb_lookup)

什么时候你会需要这个?工具只在你自己的机器上用(查内部文档、读内部系统日志),就不该进tools/核心目录。插件可以按环境开关,多人协作时也不互相污染。

排错速查:自定义工具没生效怎么办

📋 高频问题对照表,按现象查改法:

现象大概率原因一行修复
模型从不调用这个工具名字没出现在任何工具集里在 toolsets.py 的TOOLSETS里加上它
调用报 handler 找不到schema 的nameregistername不一致让两个name一字不差
工具整个没暴露缺环境变量,check_fn返回 false 被跳过设置requires_env声明的变量
结果解析报错handler 返回了 dict改成json.dumps(...)
改了工具集不生效当前会话没重载重启会话,或跑hermes tools确认平台未禁用

延伸阅读:Hermes Agent 插件开发与工具集源码导读

  • toolsets.py:TOOLSETS字典和平台基础工具集继承关系都在这一份文件里,看懂它等于看懂"菜单"的全貌。
  • tools/registry.py:注册、schema 收集、分发、错误包装的实现,想知道"菜端上桌前还经过谁"就看它。
  • CONTRIBUTING.md:官方"Adding New Tools"章节,核心工具和插件两条路线的完整规范。
  • tests/test_toolsets.py:工具集的测试写法,改完TOOLSETS加个测试用例照抄即可。
  • tests/tools/test_registry.py:注册和分发的单测样例,自定义工具工具集注册方法拿不准时,先跑一遍它。

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

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/28 12:51:42

空间智能决策引擎 × 智能决策:空间会思考,安全有答案

空间智能决策引擎 智能决策&#xff1a;空间会思考&#xff0c;安全有答案危化化工园区、港口码头、能源电站、机库厂区等高安全场景&#xff0c;安全风险错综复杂。人员违规、设备故障、介质泄漏、火情隐患往往交织发生&#xff0c;海量视频、红外、气体、声纹、气象监测数据…

作者头像 李华
网站建设 2026/8/28 12:51:41

大模型接入编程工具链:从报错排查到OpenAI兼容接口配置指南

最近关于大模型厂商竞争格局的讨论越来越多&#xff0c;一个经常被提到的背景是&#xff1a;新一代模型发布节奏明显加快&#xff0c;开放权重、低价 API、OpenAI 兼容接口这三件事同时发生&#xff0c;让开发者第一次感觉到“换模型”不再是一件伤筋动骨的大工程。但真正把模型…

作者头像 李华
网站建设 2026/8/28 12:50:57

工程视角解读最优Agnostic PAC算法:样本复杂度与模型选择

从工程视角读懂《An Optimal Agnostic PAC Algorithm》&#xff1a;不可知学习、最优样本复杂度与模型选择的底层逻辑 当你把一个分类模型的准确率从 91% 追到 91.5%&#xff0c;你花掉的每一万条新标注数据背后&#xff0c;都有一个非常实际的问题&#xff1a; 这个模型离当…

作者头像 李华
网站建设 2026/8/28 12:50:49

如何用AI进行高校教材编写?6个步骤+实用工具,轻松搞定教材!

AI教材编写工具介绍 整理教材知识点其实是一件非常细致的工作&#xff0c;难点主要在于如何做到内容的衔接和难度的合理安排。比如&#xff0c;担心关键知识没覆盖到&#xff0c;或者教材的深度没把握好——小学的内容如果写得太深&#xff0c;学生难以理解&#xff1b;反过来…

作者头像 李华
网站建设 2026/8/28 12:47:09

Skills3:给 Claude 装的「技能包」,如何让它产出能打开的文档

Skills3&#xff1a;给 Claude 装的「技能包」&#xff0c;如何让它产出能打开的文档 【免费下载链接】skills Public repository for Agent Skills 项目地址: https://gitcode.com/GitHub_Trending/skills3/skills 你让 Claude 写一份季度汇报 PPT&#xff0c;文件能打…

作者头像 李华