ToolCallback源码解析
上一节我们知道了Spring AI提供两种定义工具的方式:@Tool注解和Function Bean。那你有没有好奇过:这两种方式在底层有什么区别?Spring AI拿到你的工具定义后,内部是怎么调用的?
这一节我们就来扒一扒源码,搞清楚这些问题。
ToolCallback:工具的统一抽象
不管你用哪种方式定义工具,Spring AI最终都会把它转换成一个叫ToolCallback的东西。这是Spring AI对"可调用工具"的统一抽象。
ToolCallback 核心接口
ToolCallback 接口的两个核心方法:
getToolDefinition():提供工具的"说明书",让模型知道有这个工具可用call():真正干活的方法,接收 JSON 格式的参数,返回执行结果
不管工具是怎么定义的,只要实现了这个接口,Spring AI 就能调用它。
先来看看这个接口长什么样:
public interface ToolCallback {
/**
* 获取工具定义,包含名称、描述、参数规范等信息
* 模型会根据这些信息来决定什么时候调用这个工具
*/
ToolDefinition getToolDefinition();
/**
* 获取工具的元数据,比如是否需要用户确认、返回值是否直接给用户等
*/
default ToolMetadata getToolMetadata() {
return ToolMetadata.builder().build();
}
/**
* 执行工具调用
* @param toolInput 模型传过来的参数,JSON格式
* @return 执行结果,会被发回给模型
*/
String call(String toolInput);
/**
* 带上下文的执行方法,可以传递额外信息
*/
default String call(String toolInput, @Nullable ToolContext toolContext) {
if (toolContext != null && !toolContext.getContext().isEmpty()) {
throw new UnsupportedOperationException("不支持工具上下文");
}
return call(toolInput);
}
}
看完接口定义,几个关键点就清楚了:
getToolDefinition()— 提供工具的"说明书",让模型知道有这个工具可用call()— 真正干活的方法,接收JSON格式的参数,返回执行结果
不管工具是怎么定义的,只要实现了这个接口,Spring AI就能调用它。
付费内容提示
该文档的全部内容仅对「JavaUp项目实战&技术讲解」知识星球用户开放
加入星球后,你可以获得:
- 超级八股文:100万+字的全栈技术知识库,涵盖技术核心、数据库、中间件、分布式等深度剖析的讲解
- 讲解文档:超级AI智能体、黑马点评Plus、大麦、大麦pro、大麦AI、流量切换、数据中台的从0到1的详细文档
- 讲解视频:超级AI智能体、黑马点评Plus、大麦、大麦pro、大麦AI、流量切换、数据中台的核心业务详细讲解
- 1 对 1 解答:可以对我进行1对1的问题提问,而不仅仅只限于项目
- 针对性服务:有没理解的地方,文档或者视频还没有讲到可以提出,本人会补充
- 面试与简历指导:提供面试回答技巧,项目怎样写才能在简历中具有独特的亮点
- 中间件环境:对于项目中需要使用的中间件,可直接替换成我提供的云环境
- 面试后复盘:小伙伴去面试后,如果哪里被面试官问住了,可以再找我解答
- 远程的解决:如果在启动项目遇到问题,本人可以帮你远程解决
进入星球后,即可享受上述所有服务,保证不会再有其他隐藏费用。
