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

AI驱动的Java开发框架:Spring AI Alibaba实战部署教程

前言

随着生成式 AI 的快速发展,基于 AI 开发框架构建 AI 应用的诉求迅速增长,涌现出了包括 LangChain、LlamaIndex 等开发框架,但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言,并非十分友好和丝滑。
因此,我们基于 Spring AI 发布并快速演进 Spring AI Alibaba,通过提供一种方便的 API 抽象,帮助 Java 开发者简化 AI 应用的开发。同时,提供了完整的开源配套,包括可观测、网关、消息队列、配置中心等。
——阿里云云原生微服务技术负责人,Spring AI Alibaba 发起人彦林

在这里插入图片描述
无意间看到关于彦林老师在刚刚结束的2024云栖大会上关于Spring AI Alibaba的汇报,由于我在校期间会经常使用LangChain框架基于Python语言搭建智能体应用,结合本人现在也从事Java研发工作,对这种基于Spring开发范式搭建AI应用的框架非常感兴趣,于是结合现有公开的资料,完成了基于Spring AI Alibaba的demo项目部署工作,记录一些踩的坑,欢迎感兴趣的同学一起研究学习。

声明:本文涉及的链接、图片、代码及相关资料均从公开渠道获取或为个人知识积累,请勿未经本人允许随意复制转载!

资源地址

  • Spring AI Alibaba官网
  • Spring AI Alibaba项目地址
  • 阿里云百炼平台

简介

帮助Java开发者快速构建AI原生智能体应用

Spring AI Alibaba是什么?

Spring Al Alibaba开源项目基于Spring Al构建,是阿里云通义系列模
型及服务在Java Al应用开发领域的最佳实践,提供高层次的AI API抽
象与云原生基础设施集成方案,帮助开发者快速构建AI应用。

Spring AI Alibaba提供哪些能力?

  • 专属Spring开发者的Al框架:基于Spring Al官方开源项目,原生支持Spring Boot体系,为你的Bean带来生成式Al能力。
  • Model,Prompt,RAG,Tools:兼具提示词模板、函数调用、格式化输出等低层次抽象与RAG、智能体、对话记忆等高层次抽象。
  • 阿里云大模型与云原生最佳实践:通义系列AI模型驱动,深度集成云原生API网关、模版管理、Serverless、可观测等云原生应用基础设施。

Spring AI Alibaba架构图

在这里插入图片描述

Spring AI Alibaba未来规划

  • Prompt Template管理
  • 事件驱动的AI应用程序
  • 更多Vector Database支持
  • 函数计算等部署模式
  • 可观测性建设
  • AI代理节点开发能力,如滤网、限流、多模型切换等
  • 开发者工具集

实战部署

一、下载项目

  • IDEA导入

在这里插入图片描述

  • 命令行导入
git clone --depth=1 https://github.com/alibaba/spring-ai-alibaba.git

二、添加依赖并注入

总的来说,使用 Spring AI Alibaba 开发应用与使用普通 Spring Boot 没有什么区别,只需要增加 spring-ai-alibaba-starter 依赖,将 ChatClient Bean 注入就可以实现与模型聊天了。

在项目中加入 spring-ai-alibaba-starter 依赖。

<dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter</artifactId><version>1.0.0-M2</version>
</dependency>

为 Spring Bean 注入 ChatClient


@RestController
public class ChatController {private final ChatClient chatClient;public ChatController(ChatClient.Builder builder) {this.chatClient = builder.build();}@GetMapping("/chat")public String chat(String input) {return this.chatClient.prompt().user(input).call().content();}
}

三、运行项目

1、开通模型调用服务

阿里云百炼大模型服务平台
在这里插入图片描述

2、获取合法的 API-KEY

获取API-KEY

在这里插入图片描述

3、设置 AI_DASHSCOPE_API_KEY 环境变量

# 设置环境变量
export AI_DASHSCOPE_API_KEY="REPLACE-WITH-VALID-API-KEY"
# 查看环境变量
echo ${AI_DASHSCOPE_API_KEY}

4、启动示例项目应用

./mvnw compile exec:java -Dexec.mainClass="com.alibaba.cloud.ai.example.helloworld.HelloWorldExampleApplication"

四、注意事项

问题1:zsh:command not found: mvn?

# 配置 Maven
vim ~/.bash_profileexport MAVEN_HOME=/Library/Maven/apache-maven-3.9.7
export PATH=$MAVEN_HOME/bin:$PATHsource ~/.bash_profilemvn -version

在这里插入图片描述

问题2:zsh: no such file or directory: ./mvnw?

这个错误表明在当前目录下没有找到名为 mvnw 的文件。mvnw 是 Maven Wrapper 的缩写,它是一个脚本,用于确保使用项目定义的 Maven 版本来运行 Maven 构建,而不是系统上安装的任何其他版本。

# 生成 mvnw 文件和相关的脚本
mvn clean compile
mvn wrapper:wrapper

问题3:引入spring-cloud-alibaba-ai依赖找不到?

org.springframework.ai:spring-ai-core:jar:1.0.0-M2 was not found in http://mvnrepo.alibaba-inc.com/mvn/repository during a previous attempt.

在这里插入图片描述

注意:由于 spring-ai 相关依赖包还没有发布到中央仓库,如出现 spring-ai-core 等相关依赖解析问题,需要在项目的 pom.xml 依赖中加入如下仓库配置。

<repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository><repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><releases><enabled>false</enabled></releases></repository>
</repositories>

如果maven配置了阿里云镜像,需要在maven配置文件中进行屏蔽配置:

# 修改maven配置文件
cd ~/.m2
vim settings.xml
<!--阿里云仓库-->
<!--修改:<mirrorOf>*</mirrorOf>-->
<mirror><id>aliyunmaven</id><mirrorOf>*,!spring-milestones</mirrorOf><name>阿里云公共仓库</name><url>https://maven.aliyun.com/repository/public</url>
</mirror>

问题4:JDK版本与项目Modules不一致?

com/alibaba/cloud/ai/example/helloworld/HelloWorldExampleApplication has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0

在这里插入图片描述

Project版本为JDK 1.8

# JVM配置
sudo vi ~/.bash_profileexport JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_291.jdk/Contents/Home
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATHsource ~/.bash_profilejava -version

在这里插入图片描述
项目Modules为JDK 17
在这里插入图片描述
启动项目需要更换Project版本为JDK 17

  • JDK17下载
    在这里插入图片描述

  • IDEA更改
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 命令更改

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-17.0.12.jdk/Contents/Home

问题5:API-KEY无效?

org.springframework.ai.retry.NonTransientAiException: 401 - {“code”:“InvalidApiKey”,“message”:“Invalid API-key provided.”,“request_id”:“23e91a5e-9050-9cb5-a84a-f9ac931830ad”}

在这里插入图片描述

  • 检查AI_DASHSCOPE_API_KEY是否已配置
# 设置环境变量
export AI_DASHSCOPE_API_KEY="REPLACE-WITH-VALID-API-KEY"
# 查看环境变量
echo ${AI_DASHSCOPE_API_KEY}
  • 确保已开通模型调用服务,并处于主业务空间下具备API-Key权限。
    • 获取API-KEY
    • 将API-KEY配置到环境变量
    • 如何使用业务空间
    • 子业务空间的模型调用
      在这里插入图片描述

五、应用示例

在这里插入图片描述
访问本地启动链接,向通义模型提问并得到回答。

 http://localhost:8080/ai/chat?input=你是谁?

在这里插入图片描述

 http://localhost:8080/ai/chat?input=简单介绍一下阿里云?

在这里插入图片描述

参考资料

  • Spring AI Alibaba官网
  • Spring AI Alibaba项目地址
  • 阿里云百炼平台
  • Spring Cloud Alibaba专家答疑

相关文章:

  • C++之STL—常用排序算法
  • TDSQL-C电商可视化,重塑电商决策新纪元
  • IoT网关的主要功能有哪些?天拓四方
  • Hive优化高频面试题
  • Centos Stream 9根目录扩容
  • 【MySQL】函数及存储过程
  • GUI-工具栏(页签)和选择网格
  • leetcode621. 任务调度器
  • C++【类和对象】(构造函数与析构函数)
  • 全球200多个国财政数据(1991-2023年)
  • 学习之什么是装饰器
  • Java | Leetcode Java题解之第435题无重叠区间
  • 5.3 克拉默法则、逆矩阵和体积
  • Kafka系列之:安装使用kafka_exporter详细步骤
  • 基于大数据的亚健康人群数据分析及可视化系统
  • [数据结构]链表的实现在PHP中
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • CSS相对定位
  • egg(89)--egg之redis的发布和订阅
  • es6--symbol
  • PAT A1017 优先队列
  • Vue.js-Day01
  • 成为一名优秀的Developer的书单
  • 反思总结然后整装待发
  • 前端js -- this指向总结。
  • 小而合理的前端理论:rscss和rsjs
  • 鱼骨图 - 如何绘制?
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • gunicorn工作原理
  • #### go map 底层结构 ####
  • (CVPRW,2024)可学习的提示:遥感领域小样本语义分割
  • (Matlab)使用竞争神经网络实现数据聚类
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (三)c52学习之旅-点亮LED灯
  • (一)utf8mb4_general_ci 和 utf8mb4_unicode_ci 适用排序和比较规则场景
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • .NET gRPC 和RESTful简单对比
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .Net8 Blazor 尝鲜
  • .sh 的运行
  • @RequestMapping 的作用是什么?
  • @Transactional类内部访问失效原因详解
  • [ IOS ] iOS-控制器View的创建和生命周期
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解
  • [2018/11/18] Java数据结构(2) 简单排序 冒泡排序 选择排序 插入排序
  • [7] CUDA之常量内存与纹理内存
  • [AIGC codze] Kafka 的 rebalance 机制
  • [AIGC] 深入浅出 Python中的`enumerate`函数
  • [boost]使用boost::function和boost::bind产生的down机一例
  • [C#]C# winform实现imagecaption图像生成描述图文描述生成