系列篇章💥
前言
在前面的文章中,我们已经学习了如何使用 Spring AI 构建基础聊天服务、流式对话、上下文记忆、角色设定、动态提示词模板、结构化输出、语音识别与合成等能力。本文将聚焦于多模态 AI 能力中的图像生成部分。
我们将基于 spring-ai-openai-image
示例项目,详细介绍如何通过 Spring AI 集成 OpenAI 的 [DALL·E]模型,根据自然语言描述生成高质量图像,并演示其在不同分辨率、模型版本和生成参数下的应用效果。
一、开发环境准备
(一)Java 版本要求
本项目采用Java 17进行编译和运行,请务必确保你的开发环境已成功安装JDK 17。你可以在命令行中输入以下命令进行检查:
java -version
输出应类似如下内容:
openjdk version "17.0.8" 2023-07-18
OpenJDK Runtime Environment (build 17.0.8+7)
OpenJDK 64-Bit Server VM (build 17.0.8+7, mixed mode, sharing)
(二)Maven 构建工具
确保你已安装 Maven 并配置好环境变量:
mvn -v
输出应类似如下内容:
Apache Maven 3.8.8 (4c87b05d9aedce574290d1acc98575ed5eb6cd39)
Maven home: D:\Program Files (x86)\apache-maven-3.8.8
Java version: 17.0.12, vendor: Oracle Corporation, runtime: D:\Program Files\jdk-17.0.12
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
(三)OpenAI API 密钥
你需要注册 OpenAI 官网 获取 API Key(国内可以直接使用中转地址),并设置为环境变量:
export OPENAI_API_KEY="your_openai_api_key"
export OPENAI_API_URL="https://api.openai.com/v1"
注意:出于安全考虑,不建议将密钥硬编码在代码中,推荐使用环境变量或配置中心进行管理。
二、POM依赖引入
(一)Spring AI与OpenAI集成依赖包
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-openai</artifactId>
</dependency>
此依赖包用于实现Spring AI与OpenAI的集成,为后续与OpenAI API进行交互提供了必要的支持。
(二)SpringAI相关依赖包版本管理
版本管理
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>1.0.0-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
部分通过引入spring-ai-bom,实现了对SpringAI相关依赖包版本的统一管理。这样,在项目中使用Spring AI相关依赖时,无需在每个依赖声明中单独指定版本号,只需遵循spring-ai-bom中定义的版本即可,极大地简化了依赖管理工作,同时确保了项目中依赖版本的一致性和稳定性。
三、配置文件详解
在配置文件 application.yml 中,对 OpenAI 相关参数进行配置:
server:
port: 8892
#spring:
# ai:
# openai:
# base-url: ${OPENAI_API_URL}
# api-key: ${OPENAI_API_KEY}
# chat:
# options:
# model: gpt-3.5-turbo
# temperature: 0.7
spring:
ai:
openai:
base-url: ${OPENAI_API_URL}
api-key: ${OPENAI_API_KEY}
image:
options:
model: dall-e-2
四、核心代码详解
(一)Application启动类
这是 Spring Boot 的启动类,非常简洁:
@SpringBootApplication
public class SpringAiApplication {
public static void main(String[] args) {
SpringApplication.run(SpringAiApplication.class, args);
}
}
Spring Boot会自动扫描并加载所有的Controller、Service等Bean,为项目的启动和运行奠定基础。它通过@SpringBootApplication注解开启了Spring Boot的自动配置功能,使得项目能够快速搭建起一个完整的Spring应用环境。
(二)图像生成控制器
该类使用 ImageModel
接口来构建通用的文本生成图像服务。
@RestController
@RequestMapping("/img")
public class ImageController {
private final ImageModel imageModel;
public ImageController(ImageModel imageModel) {
this.imageModel = imageModel;
}
// 方法实现省略...
}
(三)使用默认选项生成图像 /image1
@GetMapping("/image1")
public String image1(@RequestParam String message) {
var imageResponse = imageModel.call(new ImagePrompt(message, ImageOptionsBuilder.builder()
.height(256)
.width(256)
.build()));
return imageResponse.getResult().getOutput().getUrl();
}
- 使用默认配置调用图像生成模型;
- 支持指定图片宽度和高度(如 256x256);
- 返回值为生成图像的 URL,可直接用于前端展示或下载。
(四)使用自定义选项生成图像 /image2
@GetMapping("/image2")
public String image2(@RequestParam String message) {
var imageResponse = imageModel.call(new ImagePrompt(message, OpenAiImageOptions.builder()
.withQuality("standard")
.withN(1)
.withHeight(1024)
.withWidth(1024)
.withModel(OpenAiImageApi.ImageModel.DALL_E_3.getValue())
.withResponseFormat("url")
.build()));
return imageResponse.getResult().getOutput().getUrl();
}
- 支持指定模型版本(如
dall-e-2
,dall-e-3
); - 支持控制生成数量(
n=1
表示只生成一张图); - 支持调整图像尺寸(
width
,height
); - 支持设置图像质量(
quality
); - 更适合企业级图像生成场景,如海报设计、产品可视化、内容创作辅助等。
五、部署与测试
(一)启动应用
可以直接基于IntelliJ IDEA启动并运行Spring Boot应用程序,也可以进入项目根目录,执行 mvn clean package 进行打包,之后采用 java -jar xxx.jar 命令进行部署运行。运行成功后,应用将在 http://localhost:8890 启动。
(二)测试接口
你可以使用 Postman、curl 或浏览器访问以下接口:
- 生成图像(默认选项):
GET /img/image1?message=一只可爱的猫咪在窗台上晒太阳
- 生成图像(自定义选项):
GET /img/image2?message=一只可爱的猫咪在窗台上晒太阳
返回结果为图像的 URL 地址,例如:
https://images.openai.com/xxx.png
你可以在浏览器中直接打开查看生成效果。
六、图像生成的核心能力解析
(一)DALL·E 是什么?
DALL·E 是由 OpenAI 开发的大型文本到图像生成模型,能够根据自然语言描述生成高质量图像。它不仅支持生成创意图像,还能理解复杂的语义关系,并在细节上表现出色。
(二)核心功能特性
功能 | 描述 |
---|---|
✅ 文本生成图像 | 输入自然语言描述 → 输出图像链接 |
✅ 多模型支持 | 支持 dall-e-2 和 dall-e-3 |
✅ 支持多种分辨率 | 可设置 256x256、512x512、1024x1024 等 |
✅ 支持图像数量控制 | 可一次生成多张图像 |
✅ 支持图像质量设定 | 如 standard 、hd 等 |
(三)常用参数说明
参数 | 描述 |
---|---|
[prompt] 图像生成的文本提示词 | |
model | 使用的图像生成模型(dall-e-2 或 dall-e-3 ) |
size | 图像尺寸,如 1024x1024 |
n | 生成图像的数量,默认为 1 |
response_format | 返回格式,支持 url (默认)或 b64_json |
quality | 图像质量,如 standard (标准)、hd (高清) |
style | 对于 dall-e-3 ,可选择 vivid (生动)或 natural (自然)风格 |
七、进阶实践与优化建议
(一)控制图像风格
你可以通过 .withStyle()
设置图像生成风格:
.withStyle("natural")
vivid
:视觉冲击力强,适用于卡通、艺术风格;natural
:更贴近现实,适用于摄影风格图像。
(二)控制图像数量
你可以通过 .withN()
控制每次请求生成多少张图像:
.withN(2)
这对于 A/B 测试、多样化设计需求非常有用。
(三)设置响应格式
你可以通过 .withResponseFormat()
控制返回格式:
.withResponseFormat("b64_json")
url
:返回图像的临时访问地址;b64_json
:返回 Base64 编码的图像数据,便于嵌入网页或移动端使用。
(四)结合 PromptTemplate 实现动态提示词
你可以结合之前文章介绍的 PromptTemplate
,实现动态图像生成提示词:
String prompt = promptTemplate.create(Map.of("subject", "猫", "style", "水墨画"));
这样可以统一管理图像生成逻辑,提升复用性。
八、应用场景与拓展方向
(一)创意设计辅助
设计师可以通过自然语言快速生成草图,再进行后期优化,提高创意效率。
(二)个性化内容生成
电商平台可根据商品描述自动生成宣传图;教育平台可为课程内容生成封面图。
(三)游戏与动画制作
游戏开发者可以快速生成角色、场景草图,作为美术资源的灵感来源。
(四)数据可视化增强
对于图表、流程图等抽象内容,可通过图像生成模型生成更具表现力的视觉素材。
结语
通过本文的实践,我们掌握了如何在 Spring AI 中使用 ImageModel
接口调用 OpenAI 的 DALL·E 模型实现文本生成图像的功能,了解了如何通过 ImagePrompt
和 OpenAiImageOptions
实现灵活的图像生成配置,为后续构建图像生成、多模态处理、AI 设计助手等高级 AI 应用打下了坚实基础。在下一篇文章中,我们将继续深入 Spring AI 的能力,介绍如何使用 VectorStore
实现本地知识库检索(RAG),以及如何结合 FunctionCalling
实现插件化功能调用。
若您对本文介绍的技术内容感兴趣,希望进一步探索和实践,欢迎关注我,通过私信的方式与我联系,获取完整的项目代码,
开启您的 Spring AI 开发之旅。
🎯🔖更多专栏系列文章:AI大模型提示工程完全指南、AI大模型探索之路(零基础入门)、AI大模型预训练微调进阶、AI大模型开源精选实践、AI大模型RAG应用探索实践🔥🔥🔥 其他专栏可以查看博客主页📑
😎 作者介绍:资深程序老猿,从业10年+、互联网系统架构师,目前专注于AIGC的探索(CSDN博客之星|AIGC领域优质创作者)
📖专属社群:欢迎关注【小兵的AI视界】公众号或扫描下方👇二维码,回复‘入群’ 即刻上车,获取邀请链接。
💘领取三大专属福利:1️⃣免费赠送AI+编程📚500本,2️⃣AI技术教程副业资料1套,3️⃣DeepSeek资料教程1套🔥(限前500人)
如果文章内容对您有所触动,别忘了点赞、⭐关注,收藏!加入我们,一起携手同行AI的探索之旅,开启智能时代的大门!