有了Spring AI ,Java也能做人工智能了
人工智能主要分为两个部分:一是大语言模型的训练,二是基于这些大模型进行业务应用。在构建基于大模型的业务应用时,Java是最为适合的选择之一。这是因为大量的传统应用程序都是用Java编写的,因此利用Java来开发新的人工智能功能能够更加无缝地集成进现有的技术架构中,极大地促进了技术栈的一致性和可维护性。
但过去,由于缺乏统一且成熟的应用框架,不同AI供应商之间的接口差异给开发者带来了不少困扰;而现在,有了像Spring AI这样的解决方案,不仅简化了跨平台迁移的过程,还允许团队专注于创新而非底层技术细节。总之,随着Java与先进AI技术结合得越来越紧密,未来将有更多机会让传统的Java应用程序焕发出新的生命力。
通过使用Spring AI Alibaba这样的框架,开发者可以更方便地在Java项目中引入AI能力。比如,在聊天机器人、图片生成与识别、语音处理以及文档分析等场景下,借助于该框架提供的标准化API和工具,使得Java程序可以直接调用阿里云通义系列中的强大AI模型,从而显著提升用户体验。
本文主要有两个例子: 1)是文生文,语音聊天 2)是文生图 , 也就是根据文字出图
使用的是通义千问的模型,qwen , 这个在国内的评比中比较领先,然后也有免费额度。
24年12月截止了,赶紧来拿奖金!总计30万,Spring AI Alibaba 应用框架挑战赛开赛点此了解****
Spring AI介绍
Spring AI是一个专为AI工程设计的应用框架,它继承了Spring生态系统的优良传统,比如可移植性、模块化设计等。该框架致力于将POJOs(Plain Old Java Objects)作为构建块应用于AI领域,使得开发者能够利用熟悉的Java语言和面向对象编程范式来创建复杂的AI应用程序。Spring AI最核心的优势在于提供了一套统一的接口标准,允许开发者编写一次代码即可轻松切换不同的AI服务提供商(例如OpenAI、Azure、阿里云等),极大地简化了跨平台迁移的工作量。此外,其对Spring生态系统的完美兼容性意味着现有基于Spring的应用可以无缝集成AI功能,进一步降低了开发门槛。
Spring AI alibaba介绍
Spring AI Alibaba是基于Spring AI框架构建的实现,专注于接入阿里云百炼系列的大模型服务。通过Spring AI Alibaba,开发者可以轻松地利用通义大模型进行文本生成、图像生成、语音合成等任务。其核心优势在于提供了统一的API接口,使得开发者能够以一致的方式调用不同类型的AI服务,并且只需修改配置即可切换不同的AI提供者,极大地简化了开发过程中的复杂度。此外,Spring AI Alibaba还支持本地部署及多种主流AI框架(如OpenAI和Ollama)的集成,进一步增强了其灵活性与适用性。
基于spring ai alibaba 生成做聊天的详细例子
基于Spring AI Alibaba生成做聊天的详细例子,我们将依照给定的知识来分析并提供详细的步骤。首先,要实现一个允许用户输入信息并通过流(Flux)返回响应的聊天API,需要理解的是整个过程依赖于对通义千问大模型的服务调用。下面将逐步说明如何通过配置和编写代码来完成这一目标。
前置条件
确保您的开发环境满足以下要求:
- JDK版本至少为17。
- Spring Boot版本为3.3.x或更高。
- 已经在阿里云上申请了通义千问服务的API Key,并且已经按照指示将其设置到了系统变量中。
配置阿里云API Key
根据我了解的信息中的描述,在命令行中设置环境变量或者直接在application.properties
文件里配置阿里云API Key:
export AI_DASHSCOPE_API_KEY=你的实际API-Key值
或者在application.properties
中添加:
spring.ai.dashscope.api-key=${AI_DASHSCOPE_API_KEY}
Maven仓库配置
由于Spring AI的部分库尚未发布到Maven中央仓库,因此需要额外配置Spring自己的仓库地址至项目的pom.xml中:
<repositories>
<repository>
<id>sonatype-snapshots</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
<snapshots><enabled>true</enabled></snapshots>
</repository>
<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>
添加项目依赖
在pom.xml中引入必要的依赖项,特别是spring-ai-alibaba-starter
以及指定Spring Boot的版本作为父级依赖,以确保自动装配机制能够正确工作:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.4</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter</artifactId>
<version>1.0.0-M3.1</version>
</dependency>
<!-- 其他依赖... -->
</dependencies>
创建Controller处理聊天请求
接下来创建一个控制器类用于接收用户的输入并通过聊天客户端向AI发送请求,同时利用Flux进行流式响应:
@RestController
@RequestMapping("/ai")
@CrossOrigin(origins = "*")
public class ChatController {
private final ChatClient chatClient;
@Value("classpath:correct-and-expand.st")
Resource resource;
public ChatController(ChatClient.Builder builder) {
this.chatClient = builder.build();
}
@GetMapping("/chatStream")
public Flux<String> chatSteam(@RequestParam String input) {
PromptTemplate promptTemplate = new PromptTemplate(resource);
Prompt prompt = promptTemplate.create(Map.of("input", input));
return chatClient.prompt(prompt).stream().content();
}
}
此控制器定义了一个名为/chatStream
的GET方法端点,该端点接受一个名为input
的查询参数,并使用它构造一个提示语句给到聊天客户端。最终结果会以流的形式被客户端消费。
以上步骤详尽地介绍了如何从零开始构建一个基于Spring AI Alibaba支持Prompt与流式输出的聊天API。遵循上述指南,您可以顺利地为您的应用添加强大的AI对话能力。请注意保持所有配置和代码片段的一致性,并根据实际情况调整相关细节如版本号等。
基于spring ai alibaba 生成一个图片的详细例子
根据我了解的信息提供的信息,我们将基于Spring Boot集成Spring AI Alibaba来实现动漫美女图的图像生成。以下是详细的步骤说明:
1. 确认前置要求
- JDK版本需要在JDK17(含)以上。
- Spring Boot版本需为3.3.x或更高。
2. 申请阿里云资源及API KEY
首先,您需要访问阿里云百炼页面并按照以下步骤操作:
- 登录您的阿里云账号。
- 开通“百炼大模型推理”服务,并等待开通成功的短信通知。
- 成功后再次登录阿里云百炼页面,点击右上角的小人图标 -> API-KEY -> 创建新的API-KEY。
- 记录生成的API-KEY,这将在稍后的配置中使用。
接着,设置环境变量以存储API KEY:
export AI_DASHSCOPE_API_KEY=YOUR_GENERATED_API_KEY
3. 开通通义万象图像生成模型
- 进入百炼控制台。
- 在左侧菜单选择“模型广场”,查找并选择图像生成类目下的通义万象模型。
- 点击该模型的“API调用”按钮,在打开的页面顶部复制模型英文名(例如
wanx-v1
),用于后续代码配置。
4. 配置项目依赖
添加仓库地址
在您的pom.xml
文件中加入如下仓库配置以便获取最新版的Spring AI Alibaba组件:
<repositories>
<repository>
<id>sonatype-snapshots</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<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>
添加依赖项
同样地,在pom.xml
内添加必要的依赖包:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.4</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter</artifactId>
<version>1.0.0-M3.1</version>
</dependency>
<!-- 其他必要依赖 -->
</dependencies>
5. 配置应用属性
编辑application.properties
文件,设置API KEY等信息:
spring.ai.dashscope.api-key=${AI_DASHSCOPE_API_KEY}
6. 编写控制器代码
创建一个新的REST控制器ImageModelController.java
,内容如下所示:
@RestController
@RequestMapping("/ai")
public class ImageModelController {
private final ImageModel imageModel;
@Autowired
public ImageModelController(ImageModel imageModel) {
this.imageModel = imageModel;
}
@GetMapping("/image")
public ResponseEntity<String> generateImage(@RequestParam String input) {
try {
ImageOptions options = new ImageOptionsBuilder()
.withWidth(1024)
.withHeight(1024)
.withModel("wanx-v1") // 使用从阿里云获取到的具体模型名称
.withN(1)
.build();
ImagePrompt prompt = new ImagePrompt(input, options);
ImageResponse response = imageModel.call(prompt);
List<ImageGeneration> results = response.getResults();
if (results.isEmpty()) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("No image generated.");
}
String imageUrl = results.get(0).getOutput().getUrl();
return ResponseEntity.ok(imageUrl);
} catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage());
}
}
}
7. 测试接口
启动应用程序后,通过浏览器或者Postman等工具访问http://localhost:8080/ai/image?input=动漫美女
这样的URL来请求生成图像。返回的结果应该是一个指向新生成图片的URL链接。
总结说明
上述步骤首先确保了开发环境满足基本需求,并通过阿里云获得了必要的API权限。然后,我们配置了项目的依赖关系以及关键的环境变量。最终,编写了一个简单的Spring Boot REST控制器来接收用户输入,并利用Spring AI Alibaba框架与通义万象服务交互,从而实现了按需生成特定主题的图片功能。注意,生成的图片链接可能具有时效性,请考虑将重要结果保存至持久化存储如阿里云OSS。