Spring AI 非2.0版本如何接入Agent Skills?可以进来看看
摘要:文章介绍了在SpringAI 2.0以下版本实现AgentSkills的解决方案。通过提取2.0版本核心工具类,自定义ToolCallbackProvider注册基础工具,并动态注册需要ChatClient实例的SmartWebFetchTool,最终将skills作为工具注册到ToolCallbacks中。该方法绕过了版本升级的兼容性问题,利用SpringAI原生机制实现了AgentSki
Spring AI Agent Skills明确表示,自2.0版本才支持Agent Skills,但是在实际项目中,版本升级面临很多痛点,例如以来兼容问题和api变更等。自己也尝试过,写一个skills框架来实现,减少对Spring AI的依赖,增加可拓展性,但是在复杂的skill中表现并不太好,所以还是寻找了官方自己的方式来实现。
这里提供一个版本小于2.0实现Agent Skills的做法,其实就是自己升级Spring AI,但非版本升级。
我的上一篇文章粗略的讲了Spring AI Agent Skills的实现原理,其实本质上就是ToolCalling。
实现方案:
1、将2.0版本的几个核心工具挪过来。

2、创建一个ToolCallBackProvider的Bean,主要用来拓展注册2.0的几个核心工具。(不注册SmartWebFetchTool,后面会说)
@Bean
@Primary
public ToolCallbackProvider skillsToolCallbackProvider() {
try {
// 创建MethodToolCallbackProvider,注册DynamicSkillTool
return MethodToolCallbackProvider.builder()
.toolObjects(FileSystemTools.builder().build(),
GlobTool.builder().build(), GrepTool.builder().build(),
ShellTools.builder().build(),TodoWriteTool.builder().build())
.build();
} catch (Exception e) {
// 如果技能注册失败,返回空的ToolCallbackProvider
System.err.println("Failed to register skills as tools: " + e.getMessage());
return MethodToolCallbackProvider.builder().build();
}
}
3、在能获取到ChatClient的实例内注册SmartWebFetchTool,因为这个tool对象需要传入ChatClient才能构建,但需要确保你进行对话时所使用的chatclient实例与你注册工具的chatclient是同一个实例,否则不会生效。

4、最后构建SkillsTool对象,将skills注册到ToolCallBacks中当作工具,这样完成了Spring AI自己托管skills了,执行时Spring Ai会获取ToolCallBacks中的Tool信息传给LLM,由LLM去判断是否需要调用。

这里最核心的就是官方的那几个Tool,涵盖了网络搜索,脚本运行,文件读写等实现。
实现效果展示:


验证:

总结,虽然在低版本实现了Agent Skills,但是在稳定性表现是确实要比2.0版本逊色一些,但是也是可用的。
更多推荐



所有评论(0)