AI 时代,Java 程序员也需要与时俱进,这两个框架你不能不知道。
第一个是 Spring AI,第二个是 Spring Cloud Alibaba AI。
Spring AI
Spring AI 是一个用于 AI 工程的应用框架。它的目标是将 Spring 生态系统设计原则(如可移植性和模块化设计)应用于 AI 领域,并促进将 pojo 作为 AI 领域应用程序的构建块。
可移植 API 支持跨 AI 提供商的聊天、文本到图像和嵌入模型。同时支持同步和流 API 选项。
Spring AI 的核心是提供抽象,作为开发 Java AI 应用程序的基础,提供以下功能:
- 提供多种大模型服务对接能力,包括业界大多数主流大模型服务等;
- 支持灵活的 Prompt Template 和模型输出解析 Output Parsing 能力;
- 支持多模态的生成式 AI 能力,如对话,文生图、文生语音等;
- 提供通用的可移植的 API 以访问各类模型服务和 Embedding 服务,支持同步和流式调用,同时也支持传递特定模型的定制参数;
- 支持 RAG 能力的基础组件,包括 DocumentLoader、TextSpillter、EmobeddingClient、VectorStore 等;
- 支持 AI Spring Boot Starter 实现配置自动装配;
它支持以下模型:
文本模型:OpenAI、Anthropic Claud、Azure Open AI、Google Vertex AI、Moonshot AI 等。
文生图模型:OpenAI with DALL_E,StabilityAI。
语音转文字模型:OpenAI。
Embedding 模型:Amazon Bedrock。
另外,它还支持「向量数据库」如:Azure AI Service、Apache Cassandra、Elasticsearch、MongoDB Atlas、Neo4j、Redis 等。
Spring Cloud Alibaba AI
Spring AI 是 Spring 官方社区项目,旨在简化 Java AI 应用程序开发,让 Java 开发者像使用 Spring 开发普通应用一样开发 AI 应用。 Spring Cloud Alibaba AI 以 Spring AI 为基础,并在此基础上提供阿里云通义系列大模型全面适配,让用户在 5 分钟内开发基于通义大模型的 Java AI 应用。
原生的 Spring AI 首先是不支持国内的大部分常见模型的,比如文心一言、通义千问等。
如果我们没有或者不允许使用魔法的情况下,一个国内能使用的 Spring AI 就是刚需了。
那么,如何在自己的项目中使用 Spring Cloud Alibaba AI 呢?
我们一步一步来
1、在 pom.xml 中引用依赖
代码语言:javascript复制<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2023.0.1.2</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-ai</artifactId>
<version>2023.0.1.2</version>
<exclusions>
<exclusion>
<artifactId>slf4j-simple</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>3.0.0-M4</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<version>3.2.4</version>
</dependency>
2、在applicatoin.properteis
文件中加入大模型配置
在官方申请 API-KEY,如何申请?官网地址如下:
https://help.aliyun.com/zh/dashscope/developer-reference/acquisition-and-configuration-of-api-key?spm=5176.29160081.0.0.1f467a3ctbrdEJ
已经有 API-KEY
的可以直接在控制台查看,控制台地址:
https://dashscope.console.aliyun.com/apiKey
在applicatoin.yml
文件中加入配置
#spring.cloud.ai.tongyi.connection.api-key
spring:
cloud:
ai:
tongyi:
connection:
api-key: {YOUR API-KEY}
这个地方需要注意,官方文档说的地址没有用,我这里也是通过看源码解决的。
可以通过查看源码TongYiConnectionProperties
确认当前版本的 yml 配置前缀具体是什么。
官网的application.yml
文件配置为
spring:
cloud:
ai:
tongyi:
chat:
options:
# Replace the following key with a valid API-KEY.
api-key: sk-a3d73b1709bf4a178c28ed7c8b3b5axx
这个配置,我试了之后是不行的,会报错找不到 api-key
Caused by: com.alibaba.cloud.ai.tongyi.common.exception.TongYiException: Can not find api-key
创建测试类
代码语言:javascript复制import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
@Slf4j
class SpringCloudAlibabaAiTestApplicationTests {
@Resource
ChatModel chatModel;
@Test
void chatTest() {
String message = "介绍一下动漫角色【伍六七】";
String response = chatModel.call(message);
log.info("response={}" response);
}
}
查看返回为:
代码语言:javascript复制2024-08-04T22:23:11.747 08:00 INFO 5284 --- [ main] SpringCloudAlibabaAiTestApplicationTests : response={}《伍六七》是由中国动画制作团队“小疯哦”创作的一部原创国漫,讲述了主人公伍六七在成为一位技艺高超的发型师后,意外卷入一系列奇幻冒险的故事。伍六七的形象是一个有着独特魅力的角色。
**伍六七(主角)**:本名姜无极,性格乐观、善良,但也有时显得有些轻率和冲动。他拥有能够操控头发进行各种奇特攻击的能力——“断发”,以及恢复自我状态的能力——“长发”。虽然在故事开始时只是一名普通的理发师,但在一系列的事件中逐渐揭露了自己的身世之谜,并成为了对抗邪恶势力的关键人物之一。伍六七不仅有着高强的战斗技巧,还具备着一颗温暖的心,总是愿意帮助需要帮助的人。
**背景设定**:故事发生在一个充满神秘元素的世界里,其中融合了东方与西方文化的特点,构建了一个既熟悉又陌生的幻想世界。在这个世界中,存在着各种各样的角色,从普通的市民到强大的反派,每个人物都有其独特的个性和背景故事,共同构成了丰富多样的故事情节。
《伍六七》以其幽默风趣的剧情、鲜明的人物形象、深刻的主题探讨赢得了广大观众的喜爱,尤其受到了年轻群体的欢迎。作品通过伍六七的成长历程,探讨了勇气、友情、家庭等主题,鼓励人们面对困难时不放弃希望,勇敢地追求梦想。
可以看到这个调用非常方便,一行代码就解决了。
需要注意的是,这里我们使用的 ChatModel
,表示是对话模型,框架还提供了其他的类,如图片模型 ImageModel
、语音模型 SpeechModel
、语音翻译模型 TongYiAudioTranscriptionModel
、Embedding
模型 EmbeddingModel
等,非常方便大家使用。
赶快去使用吧