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版本逊色一些,但是也是可用的。

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐