十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

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

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(nameping, toolsetsafe, schemaPING_SCHEMA, handlerping)数据流向一句话模型决定调用工具 → 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(nametext_transform, toolsettext_processing, schemaTEXT_TRANSFORM_SCHEMA, handlertext_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 的name和registry.register的name是否一字不差。进阶与组合工具集组合、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(namekb_lookup, toolsetkb, schema{name: kb_lookup, description: 查内部知识库, parameters: {type: object, properties: {}}}, handlerkb_lookup)什么时候你会需要这个工具只在你自己的机器上用查内部文档、读内部系统日志就不该进tools/核心目录。插件可以按环境开关多人协作时也不互相污染。排错速查自定义工具没生效怎么办 高频问题对照表按现象查改法现象大概率原因一行修复模型从不调用这个工具名字没出现在任何工具集里在 toolsets.py 的TOOLSETS里加上它调用报 handler 找不到schema 的name与register的name不一致让两个name一字不差工具整个没暴露缺环境变量check_fn返回 false 被跳过设置requires_env声明的变量结果解析报错handler 返回了 dict改成json.dumps(...)改了工具集不生效当前会话没重载重启会话或跑hermes tools确认平台未禁用延伸阅读Hermes Agent 插件开发与工具集源码导读toolsets.pyTOOLSETS字典和平台基础工具集继承关系都在这一份文件里看懂它等于看懂菜单的全貌。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),仅供参考
返回列表