前言
随着生成式 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项目部署工作,记录一些踩的坑,欢迎感兴趣的同学一起研究学习。
声明:本文涉及的链接、图片、代码及相关资料均从公开渠道获取或为个人知识积累,请勿未经本人允许随意复制转载!
资源地址
简介
帮助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导入
- 命令行导入
bash
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 依赖。
xml
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter</artifactId>
<version>1.0.0-M2</version>
</dependency>
为 Spring Bean 注入 ChatClient
java
@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
3、设置 AI_DASHSCOPE_API_KEY 环境变量
bash
# 设置环境变量
export AI_DASHSCOPE_API_KEY="REPLACE-WITH-VALID-API-KEY"
# 查看环境变量
echo ${AI_DASHSCOPE_API_KEY}
4、启动示例项目应用
bash
./mvnw compile exec:java -Dexec.mainClass="com.alibaba.cloud.ai.example.helloworld.HelloWorldExampleApplication"
四、注意事项
问题1:zsh:command not found: mvn?
bash
# 配置 Maven
vim ~/.bash_profile
export MAVEN_HOME=/Library/Maven/apache-maven-3.9.7
export PATH=$MAVEN_HOME/bin:$PATH
source ~/.bash_profile
mvn -version
问题2:zsh: no such file or directory: ./mvnw?
这个错误表明在当前目录下没有找到名为 mvnw 的文件。mvnw 是 Maven Wrapper 的缩写,它是一个脚本,用于确保使用项目定义的 Maven 版本来运行 Maven 构建,而不是系统上安装的任何其他版本。
bash
# 生成 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 依赖中加入如下仓库配置。
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配置文件中进行屏蔽配置:
bash
# 修改maven配置文件
cd ~/.m2
vim settings.xml
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
bash
# JVM配置
sudo vi ~/.bash_profile
export 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:$PATH
source ~/.bash_profile
java -version
项目Modules为JDK 17
启动项目需要更换Project版本为JDK 17
-
IDEA更改
-
命令更改
bash
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是否已配置
bash
# 设置环境变量
export AI_DASHSCOPE_API_KEY="REPLACE-WITH-VALID-API-KEY"
# 查看环境变量
echo ${AI_DASHSCOPE_API_KEY}
- 确保已开通模型调用服务,并处于主业务空间下具备API-Key权限。
五、应用示例
访问本地启动链接,向通义模型提问并得到回答。
xml
http://localhost:8080/ai/chat?input=你是谁?
xml
http://localhost:8080/ai/chat?input=简单介绍一下阿里云?