当前位置: 首页 > news >正文

spring-ai-alibaba 1.0.0.2 学习(十)——各种工具调用方式对比

接触过FunctionCallback、ToolCallback、MCP、spring-ai-alibaba的starter-tool-calling包,spring-ai-alibaba的Agent,有没有感觉眼花缭乱?

我们来一起梳理下他们之间到底有什么关系

Spring-ai相关功能

FunctionCallback和ToolCallback

首先是FunctionCallback和ToolCallback概念,这两个都是spring-ai中的概念,FunctionCallback是正式版本之前的名称,从1.0.0版本开始就已经改名为ToolCallback了。ChatClient中也移除了defaultFunctions和functions方法

名称来源版本
FunctionCallbackspring-ai1.0.0之前(不含)
ToolCallbackspring-ai1.0.0之后(含)

FunctionToolCallback和MethodToolCallback

FunctionToolCallback和MethodToolCallback都是ToolCallback接口的实现类,注意这里FunctionToolCallback中间多了个Tool,和前文的FunctionCallback并不是同一个概念。

名称FunctionToolCallbackMethodToolCallback
来源sping-aispring-ai
接口ToolCallbackToolCallback
应用对象实现了Function接口的类方法
编程式使用FunctionToolCallback.builder

使用反射获取方法Method后,

使用MethodToolCallback.builder

声明式

使用@Bean注解到装配方法上,

使用ChatClient的toolNames方法

使用@Tool注解到方法上,

使用ChatClient的tools方法

FunctionToolCallback和MethodToolCallback都有编程式使用方式和声明式使用方式,但过程中使用的类和注解不同。应用对象分别是实现了Function接口的类和方法。

ToolCallback和MCP

ToolCallback和MCP都是对工具的调用,他们之间有区别也有联系。

先来说一下联系,MCP集成进spring-ai框架时,使用的其实就是ToolCallback接口。

以同步模式为例,MCP Client获取到远程的tools信息后,就会将其封装为ToolCallback的实现类SyncMcpToolCallback。使用时将SyncMcpToolCallbackProvider传入ChatClient的toolCallbacks方法即可。

换句话说,MCP底层虽然与传统的ToolCallback(FunctionToolCallback和MethodToolCallback)不同,但是spring-ai框架将其抽象成了ToolCallback的另一种实现。

区别主要在于调用时的入参格式Schema,ToolCallback模式入参格式是静态的,如果要修改则需要修改代码重新部署,而MCP则是动态获取Schema。

ToolCallbackMCP
接口ToolCallbackToolCallback
实现类

FunctionToolCallback

MethodToolCallback

SyncMcpToolCallback

AsyncMcpToolCallback

工具位置一般是本地远程
Schema静态动态

spring-ai-alibaba相关功能

前面是spring-ai相关的能力,接下来我们来看一下spring-ai-alibaba扩展出来的tool-calling包和Agent接口。

tool-calling包和MCP

tool-calling和MCP都能调用远程的工具,但是两者实现方式略有区别

tool-calling是使用FunctionToolCallback的声明式使用方式,实现Function接口,然后通过toolNames方法注册。

而且tool-calling的Schema是定义在tool-calling包中,要修改智能升级tool-calling包。

tool-callingMCP
实现原理基于FunctionToolCallback的声明式基于ToolCallback但自行实现
工具位置远程远程
工具实现jar包远程MCP Server
Schema静态动态

Agent和其他

前面的各种工具调用方式都是在本地给大模型增加各种外挂,无论是ToolCallback还是MCP,最终对工具进行调用的都是本地,大模型返回的结果中说需要调用xxx工具,本地进行调用后,将调用结果传递给大模型,然后大模型进行输出。

然而Agent智能体是大模型自带外挂,对工具的调用也不需要再经过本地,发送请求后,大模型直接对工具进行调用,然后返回结果。(ps:在智能体内部其实仍然是请求大模型->返回结果说需要调用xxx工具->智能体调用工具->调用结果传递给大模型->大模型输出的过程)

换一个视角,A服务访问大模型,并使用ToolCallback或MCP对工具进行了调用,然后将整个功能封装为一个接口对外提供服务

那么此时在另一个服务B眼中,A服务就是一个智能体,B服务只需要调用A服务,那么A服务就会访问大模型,调用工具,返回结果

Agent其他
发送请求次数1次2次
工具调用方智能体本地
是否能对工具执行结果进行优化不可以可以

http://www.dtcms.com/a/267027.html

相关文章:

  • Python 闭包(Closure)实战总结
  • 【网络与系统安全】强制访问控制——BLP模型
  • PortSwigger Labs SQLInjection LAB6-7
  • 汽车功能安全【ISO 26262】概述1
  • Python-GUI-wxPython-布局
  • 黑马python(二十五)
  • hello判断
  • 斜线投影几何分割公式 h = rx·ry/(rx+ry) 的推导方法
  • 【github】想fork的项目变为私有副本
  • boost--io_service/io_context
  • FFmpeg 升级指北
  • 【网络与系统安全】强制访问控制——Biba模型
  • AI生成式软件工程正处在从“辅助编程”到“AI原生开发”的范式转移
  • 使用坚果云扩容Zotero同步空间的简单快捷方法
  • Vue3-组件化-Vue核心思想之一
  • Python 中的余数运算及数论中的同余定理
  • 五层协议介绍
  • 指针篇(7)- 指针运算笔试题(阿里巴巴)
  • CSS——圆形头像外嵌光圈
  • springsecurity02
  • js中的FileReader对象
  • ESP32CAM通过ESPHome接入HomeAssistant(含无线刷固件等)
  • Python-GUI-wxPython-控件
  • 语音大模型速览(一)F5-TTS
  • 《汇编语言:基于X86处理器》第6章 复习题和练习,编程练习
  • Selenium 安装使用教程
  • Python 量化交易安装使用教程
  • 深度学习3(向量化编程+ python中实现逻辑回归)
  • 遗传算法的原理与实现示例
  • XION:玩转您的第一个智能合约