五、Tools 运行时
五、Tools 运行时
关键点:ast 自动解析 + 工具集划分作用域 + 并发执行
tools 被发现和注册
- 1、每个工具文件(.py)都会调用
registry.register(), 声明:1 2 3 4 5
name: 工具名 toolset: 所属工具集 schema: 参数格式 is_async: 是的异步 ...
- 2、AST 扫描工具文件,只有调用了
registry.register()的工具文件才会注册到Tools运行时
哪些工具可以暴露给 LLM
内置(built-in) tools,MCP tools,plugin tools将会暴露给 LLM 。
- 1、每个工具在注册阶段都会被划分到一个/多个工具集
- 2、LLM 在轮次对话中指定可用使用的工具集列表
- 3、对工具集中的所有工具 check(是否弃用,是否缺少 api_key),去重等过滤
- 4、将可用工具转化成 LLM 系统 prompt schema(工具说明书)
agent loop 调用工具
- 校验。校验工具名称,餐食是否合法 json
- 无效 tool call 返回错误,LLM 自我修复
- 追加 tool call 消息
- 只读/无状态共享类工具批量并发执行,等所有工具执行结束,再按原始 tool call 顺序 append 回 messages
- 下一次 loop
工具内部执行流程
- json 参数校验
- json 结果返回
多种运行环境
- local:本机执行,默认值
- docker:Docker/Podman 容器
- modal:Modal cloud sandbox
- ssh:远程 SSH 环境
- 等等
亮点
- ast 解析:可以自动识别新加入的工具文件,无需手动维护列表。ast 只会检索
tools目录,不会影响到其他模块ast目的不是为了注册工具,是为了过滤出工具文件,避免全量 import
tools/*. 最终注册工具还是registry.register() - 工具集:
1 2 3
按平台定制工具: hermes-cli、hermes-discord、hermes-feishu 可以有不同工具 减少 prompt/tool schema 体积: 模型只看到当前需要的工具 降低幻觉调用: 不可用或被禁用的工具不会进入最终 schema
- 并发执行:只读/无状态共享类工具批量并发执行
参考
This post is licensed under CC BY 4.0 by the author.