总计30万奖金,Spring AI Alibaba 应用框架挑战赛开赛
点此了解
背景说明
在Java场景中,我们经常需要利用图像识别的能力来处理多种业务需求,比如自动分类商品图片、辅助医疗影像分析、提升安防监控效率等。过去,这类需求主要依赖于OCR(光学字符识别)技术或其他传统的图像处理方法,但这些方式的效果往往不尽如人意,尤其是在面对复杂多变的图像内容时。随着大模型技术的发展,如今我们可以借助更加先进的AI模型来进行图像识别任务,不仅提高了准确率和灵活性,而且能够更好地适应不同场景下的具体要求,从而显著改善了应用效果和服务体验。
本次例子使用spring ai alibaba完成,切实可执行,请按步骤一步一步做即可。
Spring AI 介绍:简化Java中AI功能集成的高效框架
在过去,Java 缺乏一个高效且易于使用的 AI 应用框架,这使得开发者在集成AI功能时面临着较大的挑战。为解决这一问题,Spring团队推出了Spring AI,它是一个专为调用各种AI组件而设计的应用框架。Spring AI 的核心优势在于提供了一套统一的接口,允许开发人员只需编写一次代码,并通过简单的配置更改就能切换不同的AI服务提供商。此外,该框架与Spring生态系统无缝兼容,同时支持Java面向对象编程范式,这极大地简化了AI应用程序的开发流程。对于需要处理图像识别任务的项目而言,使用 Java Spring AI 可以轻松接入多种图像识别模型,并将这些复杂的操作封装成简单的API调用来供业务逻辑层调用,从而加速开发进程并降低维护成本。
Spring AI的核心功能介绍
能力名字:模型 Model
一句话说明
Spring AI支持多模态的模型接入,包括但不限于文本、图像等,能够与大模型进行交互,实现对话、文生图、文生语音等多种AI能力。
输入输出举例
- 输入:用户提供的文本或图片
- 输出:根据请求内容生成的响应文字或者合成的语音文件
能力名字:提示 Prompt
一句话说明
允许开发者指定特定的输入格式给到AI模型,以指导其生成符合预期的结果。
输入输出举例
- 输入:一段带有具体问题或指令的文字
- 输出:基于输入的prompt生成的相关回答或执行结果
能力名字:提示词模板 Prompt Template
一句话说明
提供了一种方式来动态地构建Prompt,使得在不改变代码逻辑的情况下可以轻松调整提问的方式。
输入输出举例
- 输入:模板中定义好的变量值(如用户ID)
- 输出:根据变量填充后的完整Prompt字符串
能力名字:嵌入 Embedding
一句话说明
将非结构化数据转换为数值向量表示,便于进一步处理和分析。
输入输出举例
- 输入:原始文本、图片等信息
- 输出:对应的数据向量表示
能力名字:结构化输出 Structured Output
一句话说明
使AI生成的内容能够直接映射到预定义的Java对象上,简化了数据处理流程。
输入输出举例
- 输入:需要被解析成结构化数据的自然语言描述
- 输出:按照指定POJO格式组织的数据
能力名字:检索增强生成 RAG
一句话说明
结合私有知识库与大型语言模型,通过从知识库中检索相关信息来增强模型的回答质量。
输入输出举例
- 输入:查询请求及相关的上下文信息
- 输出:结合了外部知识库资料的答案
能力名字:函数调用 Function Calling
一句话说明
让AI能够在需要时调用预先定义的功能或工具,扩展了AI应用的可能性。
输入输出举例
- 输入:包含对特定功能调用需求的对话消息
- 输出:由该功能执行后返回的结果
能力名字:向量存储 Vector Store
一句话说明
提供了管理和操作向量数据的能力,支持高效地存储、查询大规模向量数据。
输入输出举例
- 输入:待存储或查询的向量数据
- 输出:匹配度最高的向量集合或成功添加/删除状态
以上是Spring AI所拥有的主要能力概述,它极大地简化了开发人员利用AI技术的过程,并提供了灵活且强大的功能支持。
Spring AI Alibaba介绍 :集成阿里云大模型的Spring AI框架
Spring AI Alibaba 是一个专为 Spring 生态系统设计的AI应用框架,专注于集成阿里云的国产大模型服务。它基于Spring AI API实现了对通义系列(如通义千问、通义万象)等国产大模型的支持,使得开发者能够便捷地开发出具备聊天、图像生成等功能的应用。
其核心优势在于提供了统一且标准的接口来访问多种AI能力,支持通过简单的配置变更来切换不同的AI服务提供者,从而极大简化了跨平台迁移和多AI提供商接入的工作。此外,Spring AI Alibaba 还支持包括流式处理在内的高级特性,进一步提升了应用开发效率和灵活性。
使用Spring AI Alibaba进行图像识别的详细示例
1. 前置准备
首先,确保你的开发环境满足以下要求:
- JDK版本需在JDK 17及以上。
- Spring Boot版本需在3.3.x及以上。
2. 申请并配置通义千问的API Key
- 访问阿里云百炼页面,登录您的阿里云账号。
- 开通“百炼大模型推理”服务,并等待开通成功的短信通知。
- 开通成功后,再次访问阿里云百炼页面,点击右上角的小人图标,选择API-KEY,然后点击【创建新的API-KEY】生成一个新的API-KEY。请记录下这个key,后续步骤需要用到。
- 在终端中执行如下命令来配置API Key(将
${REPLACE-WITH-VALID-API-KEY}
替换为你实际获取到的API Key):
export AI_DASHSCOPE_API_KEY=${REPLACE-WITH-VALID-API-KEY}
3. 开通通义万象图像生成模型
- 打开百炼控制台 阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台。
- 在左侧列表栏选择模型广场,找到图像生成部分中的通义万象模型,并点击其对应的“API调用”按钮。
- 在打开的新页面左上角,复制模型的英文名称,本次使用的模型为
qwen-vl-max-latest
,这是一个专用于图片识别的特化模型。
4. 添加Spring仓库及依赖
由于spring-ai-alibaba-starter
尚未提交至Maven官方仓库,请先在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
的依赖:
<dependencies>
<!-- Spring Boot Parent -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.4</version>
<relativePath/>
</parent>
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter</artifactId>
<version>1.0.0-M3.1</version>
</dependency>
<!-- 其他所需依赖... -->
</dependencies>
5. 构建读图代码
在你的项目中创建一个新的Controller类ChatModelController.java
,内容如下所示:
@RestController
@RequestMapping("/ai")
public class ChatModelController {
private static final Logger logger = LoggerFactory.getLogger(ChatModelController.class);
@Value("classpath:catexample.png")
private Resource imageResource;
private final ChatModel chatModel;
public ChatModelController(ChatModel chatModel) {
this.chatModel = chatModel;
}
private static final String DEFAULT_PROMPT = "这些是什么?";
private static final String DEFAULT_MODEL = "qwen-vl-max-latest";
@GetMapping("/imageRecognition")
public Flux<String> imageRecognition(
@RequestParam(value = "prompt", required = false, defaultValue = DEFAULT_PROMPT) String prompt,
HttpServletResponse response) throws Exception {
response.setCharacterEncoding("UTF-8");
List<Media> mediaList = List.of(new Media(MimeTypeUtils.IMAGE_PNG, imageResource));
UserMessage message = new UserMessage(prompt, mediaList);
message.getMetadata().put(DashScopeChatModel.MESSAGE_FORMAT, MessageFormat.IMAGE);
Flux<ChatResponse> fluxResponse = chatModel.stream(
new Prompt(message, DashScopeChatOptions.builder()
.withModel(DEFAULT_MODEL)
.withMultiModel(true)
.build()));
return fluxResponse.map(resp -> resp.getResult().getOutput().getContent());
}
}
确保你已经在项目的src/main/resources
目录下放置了一张名为catexample.png
的测试图片。
6. 配置应用程序属性
在application.properties
或application.yml
文件中设置之前获取的API Key:
spring.ai.dashscope.api-key=${AI_DASHSCOPE_API_KEY}
至此,您已完成了基于Spring AI Alibaba实现图像识别功能的所有准备工作。现在可以通过访问http://localhost:8080/ai/imageRecognition
端点来测试您的应用,它会根据提供的Prompt返回流式处理的结果。
请注意,以上步骤提供了从零开始搭建此功能所需的全部指导;如果有任何未提及但同样重要的细节,请参考相关文档或社区支持以获得进一步帮助。