Agent Skill 踩坑记录 | SpringBoot 打包后 Skill 加载失败问题排查与解决

简介: 本文记录 Spring AI Alibaba Agent Skill 在 SpringBoot 打包后出现 Skill not found、ClasspathSkillRegistry 无法加载的问题,通过切换 FileSystemSkillRegistry 实现临时解决,分享完整踩坑排查与代码方案。

在之前的开发中,我使用 ClasspathSkillRegistry 作为 Agent Skill 的查找策略,本地开发环境下调试、运行都一切正常,没有出现任何异常。

感兴趣的小伙伴可以回顾上一篇相关内容:https://www.lucaju.cn/index.php/archives/168/

一、问题出现:上线后频繁报「Skill not found」

本以为本地测试无误后,上线就能顺利运行,结果程序部署到服务器后,日志中频繁出现 Skill not found: 错误,导致相关功能完全无法使用。

二、问题排查:排除常见误区

遇到问题后,首先排查了最容易出现问题的两个点,均排除异常:

  1. 确认 Skill 已成功打包:检查部署的 jar 包,解压后确认 skill 相关文件已正常包含在内,不存在打包遗漏的情况;
  2. 确认 Skill Name 无误:核对代码中调用 Skill 的名称与配置文件中的名称,完全一致,排除拼写错误、大小写错误等问题。

三、问题根源:找到官方 Issue

排除上述常见问题后,推测可能是框架本身的兼容性问题,于是去 GitHub 上搜索相关问题,果然发现已有其他开发者遇到过相同情况,并且提交了 Issue:https://github.com/alibaba/spring-ai-alibaba/issues/4426

skill-issue.png

从 Issue 中得知,问题根源在于 SpringBoot 项目打包成 jar 包后,路径机制发生变化,导致 ClasspathSkillRegistry 无法正常加载 resources 下的 Skill 目录,这是目前 spring-ai-alibaba 框架的一个已知 bug。

四、临时解决方案:改用 FileSystemSkillRegistry

由于官方尚未修复该 bug,为了不影响线上功能正常使用,我采用了临时解决方案:将 Skill 目录存放在服务器的文件系统中,通过指定真实路径获取 Skill,对应的查找策略改用 FileSystemSkillRegistry

修改后的核心代码如下:

/**
 * 获取技能智能体钩子。
 */
private static SkillsAgentHook getSkillsAgentHook() {
   

    // 注释掉原有的ClasspathSkillRegistry方式(本地可用,打包后失效)
    // SkillRegistry registry = ClasspathSkillRegistry.builder()
    //         .classpathPath("skills")
    //         .build();

    /*
      临时解决方案说明:
      spring ai alibaba 目前使用 ClasspathSkillRegistry 打包后,无法获取 Resource 下的目录
      因此修改为使用 FileSystemSkillRegistry,从文件系统真实路径获取 Skill
      相关 Issue:https://github.com/alibaba/spring-ai-alibaba/issues/4426
     */
    String skillPath = SpringUtils.getProperty("doc.skills-path");
    log.info("skillPath: {}",skillPath);

    FileSystemSkillRegistry registry = FileSystemSkillRegistry.builder()
            .projectSkillsDirectory(skillPath)
            .build();
    return SkillsAgentHook.builder()
            .skillRegistry(registry)
            .build();
}

五、后续

需要说明的是,这只是一个临时解决方案——使用该方案后,需要手动将 Skill 配置文件同步到服务器的指定路径(即配置项 doc.skills-path 对应的路径),增加了少量部署成本。

后续会持续关注官方 Issue 的修复进度,待 bug 修复后,再切换回 ClasspathSkillRegistry 方式,减少部署环节的手动操作。

也希望遇到相同问题的小伙伴,能通过这篇踩坑记录少走弯路~

目录
相关文章
|
2天前
|
人工智能 JSON Java
Spring AI Alibaba + MCP:调用MCP市场公开服务实操
本文详细讲解Spring Ai Alibaba调用MCP市场公开服务的全流程,以高德地图MCP服务为例,包含API-Key申请、客户端配置、代码实操,助力开发者快速掌握Spring Ai Alibaba与MCP服务对接技巧。
96 6
Spring AI Alibaba + MCP:调用MCP市场公开服务实操
|
7天前
|
人工智能 前端开发 Java
Agent Skills | Spring Ai Alibaba从零构建可扩展 AI 智能体
本文详细讲解 Spring AI Alibaba Skill 技能体系,从核心概念、组件解析到实战开发,手把手教你基于 ReAct 智能体实现技能发现、工具调用与 PDF 信息提取,助你快速构建可扩展、可插拔的企业级 AI 智能体应用。
378 7
|
人工智能 Java Serverless
【MCP教程系列】搭建基于 Spring AI 的 SSE 模式 MCP 服务并自定义部署至阿里云百炼
本文详细介绍了如何基于Spring AI搭建支持SSE模式的MCP服务,并成功集成至阿里云百炼大模型平台。通过四个步骤实现从零到Agent的构建,包括项目创建、工具开发、服务测试与部署。文章还提供了具体代码示例和操作截图,帮助读者快速上手。最终,将自定义SSE MCP服务集成到百炼平台,完成智能体应用的创建与测试。适合希望了解SSE实时交互及大模型集成的开发者参考。
14647 60
|
Oracle 关系型数据库 数据安全/隐私保护
Navicat 连接Oracle的教程以及注意事项
今天使用Navicat 连接Oracle时晕倒了一些坑,特此记录一下! 楼主就是64位win10系统,安装的Navicat是64位的,刚开始配置32位的oci。配置后连接还是提示“Connot load OCI DLL,87:Instant Client package is required for Basic and TNS connetion.
2200 0
|
运维 监控 网络协议
JAVA 线上故障排查完整套路,从 CPU、磁盘、内存、网络、GC
JAVA 线上故障排查完整套路,从 CPU、磁盘、内存、网络、GC
1349 0
|
SQL
mybatis-plus的sql语句打印
mybatis-plus的sql语句打印
3607 1
|
网络协议 安全 Linux
在 CentOS 7 中打开放指定或特定端口号
在 CentOS 7 中打开放指定或特定端口号
|
4月前
|
监控 数据可视化 Java
Spring Boot 整合 Elasticsearch 及实战应用
这次内容详细介绍如何使用 Spring Boot 整合 Elasticsearch,并提供几个实际应用案例。内容涵盖 Elasticsearch 的基本概念、Spring Boot 整合步骤、实战应用示例以及优化建议。
507 0

热门文章

最新文章