核心特性
- 注解驱动:使用
@Tool和@ToolParam快速定义工具 - 响应式编程:原生支持
Mono/Flux异步执行 - 自动 Schema:自动生成 JSON Schema 供 LLM 理解
- 工具组管理:动态激活/停用工具集合
- 预设参数:隐藏敏感参数(如 API Key)
- 并行执行:支持多工具并行调用
快速开始
定义工具
注意:@ToolParam的name属性必须指定,因为 Java 默认不保留参数名。
严格模式(Strict Mode)
strict 用于控制支持严格 Schema 检查的模型提供商是否应严格遵循工具参数 Schema。
@Tool(..., strict = true)注解驱动的工具注册AgentTool接口实现(通过getStrict()方法)Toolkit#registerSchema(...)和Toolkit#registerSchemas(...)方式
注册和使用
工具类型
同步工具
直接返回结果,适合快速操作:异步工具
返回Mono<T> 或 Flux<T>,适合 I/O 操作:
流式工具
使用ToolEmitter 发送中间进度,适合长时间任务(进度仅对 Hook 可见,不会发送给 LLM):
返回类型
工具组
按场景管理工具,支持动态激活/停用:- 权限控制:根据用户角色激活不同工具
- 场景切换:不同对话阶段使用不同工具集
- 性能优化:减少 LLM 可见的工具数量
预设参数
隐藏敏感参数(如 API Key),不暴露给 LLM:to 和 subject 参数,apiKey 自动注入。
工具执行上下文
传递业务对象(如用户信息)给工具,无需暴露给 LLM:详细配置参见 智能体 文档。
内置工具
文件工具
Shell 命令工具
快速使用:
多模态工具
子智能体工具
可以将智能体注册为工具,供其他智能体调用。详见 Agent as Tool。AgentTool 接口
需要精细控制时,直接实现接口:配置选项
元工具
让智能体自主管理工具组:工具挂起(Tool Suspend)
工具执行时抛出ToolSuspendException,可暂停 Agent 执行并返回给调用方,由外部完成实际执行后再恢复。
使用场景:
- 工具需要外部系统执行(如远程 API、用户手动操作)
- 需要异步等待外部结果
仅 Schema 工具(Schema Only Tool)
只注册工具的 Schema(名称、描述、参数),不提供执行逻辑。当 LLM 调用该工具时,框架自动触发挂起,返回给调用方执行。 使用场景:- 工具由外部系统实现(如前端、其他服务)
- 动态注册第三方工具
TOOL_SUSPENDED → 外部执行 → 提供结果恢复。
完整示例
- 工具调用示例: ToolCallingExample.java
- 工具组示例: ToolGroupExample.java
- 多模态工具示例: MultiModalToolExample.java