Java开发者最实用的大模型开发教程 - 基于spring和国产大模型
在过去,Java 缺乏一个优秀的 AI 应用框架。这给开发者带来了很多不便。Spring AI 的出现填补了这一空白。它是一个专为 AI 工程设计的应用框架。Spring AI 核心优势在于提供了一套统一的接口。这样,开发者只需编写一次代码,通过修改配置就能轻松切换不同的 AI 提供者。Spring AI 与过去的 Spring 生态系统兼容完美。同时,它也和 Java 的面向对象编程完美结合。使
在AI大模型应用的开发中,Java也是一把好手。
本文将从Java开发者的角度,构建并实现一个基础的图片转文字识别应用系统。
图片转文字识别(OCR)在当前阶段应用广泛,本文将通过实现一个图片转文字识别的基础架构,来展示如何开发这样的应用。
主要需求点是:让大模型能够识别并理解图片中的文字内容,并将其转换为文本。
基于AI图片转文字识别的应用可以帮助我们解决哪些问题呢?
✅ 提升数据处理效率:通过自动化的图片转文字识别,可以大幅提升数据处理的效率,减少人工输入的错误和时间成本。
✅ 扩展大模型的应用场景:很多企业内部的文档和数据以图片形式存在,通过图片转文字识别,可以将这些数据转换为可处理的文本,扩展大模型的应用场景,使其能够处理更多类型的数据。
在本文中,你将学习到:
✅ 图片转文字识别工程的基本处理框架流程(基于Java)
通过本文的学习,你将掌握如何使用Java构建一个图片转文字识别的应用系统,并了解OCR技术的基本原理和应用场景。希望这些内容能帮助你在AI大模型应用开发中取得更好的成果。
本文使用spring ai + 通义vl模型实现,目前通义有100w的免费额度可以用,同时因为通义的全部模型也是开源的,你可以自己构建并免费食用
目录
Spring AI介绍
在过去,Java 缺乏一个优秀的 AI 应用框架。这给开发者带来了很多不便。Spring AI 的出现填补了这一空白。它是一个专为 AI 工程设计的应用框架。Spring AI 核心优势在于提供了一套统一的接口。这样,开发者只需编写一次代码,通过修改配置就能轻松切换不同的 AI 提供者。Spring AI 与过去的 Spring 生态系统兼容完美。同时,它也和 Java 的面向对象编程完美结合。使用 Spring AI 可以极大减少程序员的工作量。因为它省去了在不同 AI 提供者之间查找文档对接各种接口的麻烦。
Spring AI alibaba介绍
Spring AI Alibaba 是一个基于 Spring AI 的实现,专注于阿里云百炼系列的大模型接入。它让开发者能够轻松使用通义提供的聊天、图片或语音生成等 AI 应用。Spring AI Alibaba 的核心优势在于其良好的抽象设计,简化了与不同 AI 提供者的对接过程。通过简单的配置更改,即可切换不同的 AI 服务。此外,它还支持本地模型和外部数据接入,提高了开发效率。Spring AI Alibaba 让编写一次代码就能适应多种大模型变得简单易行。
通义千问介绍
通义千问是由阿里集团推出的开源大模型服务,支持全尺寸、多模态的大模型。它在中文开源模型业界处于领先地位,并在国内的思南大模型竞技场排名上名列前茅。
通义千问的核心优势包括:
- 能力排名靠前:QWen在MMLU、TheoremQA、GPQA等客观评测指标上超越了Llama 3 70B,在国产大模型中仅次于OpenAI的GPT、Claude和马斯克的Grek。
- 可访问性和合规性:API调用时具备安全保护措施,无需担心恶意攻击问题。
- 完全开源:提供全尺寸多模态大模型的开源版本,用户可以根据需求选择适合的大小。
- 价格合理:有100万免费token可供使用,调用API成本较低;若自行构建,则可以免费使用。特别推荐关注Qwen和Qwen vl两个模态的模型,它们在国内开源榜单上均位居第一。
更多关于大模型客观测评的方法介绍,可参考基准测试网站 https://huggingface.co/spaces/open-llm-leaderboard/open_llm_leaderboard 和人类评估竞技场模式排行榜 https://lmarena.ai 或国内平台CompassArena CompassArena。
基于spring ai alibaba 做图片识别的详细例子
前置准备
- 确保你的JDK版本在JDK 17(含)以上。
- 确保你的Spring Boot版本在3.3.x以上。
- 在阿里云申请通义千问的API Key:
-
- 打开阿里云百炼页面 -> 登录您的阿里云账号 -> 选择开通“百炼大模型推理”服务,然后等待开通成功的短信 -> 开通成功以后,再登录阿里云百炼页面后,点击右上角小人图标 -> API-KEY -> 点击【创建新的API-KEY】生成一个API-KEY。请记录这个key,后面需要配置在百炼API_KEY里面。
- 配置百炼API KEY:
export AI_DASHSCOPE_API_KEY=${REPLACE-WITH-VALID-API-KEY}
- 开通通义万象图像生成模型:
-
- 打开百炼控制台 [https://bailian.console.aliyun.com/]
-
- 在左边的列表栏选择模型广场,然后找到图像生成,从里面找到通义万象,选择模型对应的“API调用”按钮。
-
- 在打开的页面左上角,模型中文名字的下面有一个英文名字,旁边有个问号和复制按键,那个就是模型的英文名字,也是在配置中要指定的模型名字。这次需要使用的模型是:
qwen-vl-max-latest
,这是一个专门用来做图片识别的特化模型。
- 在打开的页面左上角,模型中文名字的下面有一个英文名字,旁边有个问号和复制按键,那个就是模型的英文名字,也是在配置中要指定的模型名字。这次需要使用的模型是:
- 再次配置百炼API KEY:
export AI_DASHSCOPE_API_KEY=${REPLACE-WITH-VALID-API-KEY}
- 添加Spring仓库:
<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>
- 添加依赖:
<!-- Added Spring Boot parent project -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter</artifactId>
<version>1.0.0-M3.1</version>
</dependency>
...other dependencies ...
</dependencies>
- 构建读图代码:
@RestController
@RequestMapping("/ai")
public class LicensePlateRecognitionController {
private static final Logger logger = LoggerFactory.getLogger(LicensePlateRecognitionController.class);
@Value("classpath:example.png")
private Resource imageResource;
private final ChatModel chatModel;
public LicensePlateRecognitionController(ChatModel chatModel) {
this.chatModel = chatModel;
}
private static final String DEFAULT_PROMPT = "识别图中的文字,保持图片原有的文字和语言。";
private static final String DEFAULT_MODEL = "qwen-vl-max-latest";
@GetMapping("/licensePlateRecognition")
public Flux<String> licensePlateRecognition(
@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()));
Flux<String> fluxString = fluxResponse.map(resp -> resp.getResult().getOutput().getContent());
return fluxString;
}
}
- 将需要进行识别的PNG图片放置在
src/main/resources/example.png
。
这样,通过访问 https://localhost:8080/ai/licensePlateRecognition
即可让模型识别图片中的图片文字,并将结果流式返回。
注意:上述步骤包括了所有的配置和代码,确保每个步骤都正确执行以保证集成的成功。此外,请根据实际情况调整项目结构、路径以及相关参数。
更多推荐
所有评论(0)