大模型之Spring AI实战系列(十):Spring Boot + OpenAI 使用 DALL·E实现文本生成图像功能

系列篇章💥

No.文章
1大模型之Spring AI实战系列(一):基础认知篇 - 开启智能应用开发之旅
2大模型之Spring AI实战系列(二):Spring Boot + OpenAI 打造聊天应用全攻略
3大模型之Spring AI实战系列(三):Spring Boot + OpenAI 实现聊天应用上下文记忆功能
4大模型之Spring AI实战系列(四):Spring Boot + OpenAI 使用OpenAI Embedding实现文本向量化
5大模型之Spring AI实战系列(五):Spring Boot + OpenAI 构建带角色设定的智能对话系统
6大模型之Spring AI实战系列(六):Spring Boot + OpenAI 利用PromptTemplate构建动态提示词系统
7大模型之Spring AI实战系列(七):Spring Boot + OpenAI 构建结构化输出的AI响应系统
8大模型之Spring AI实战系列(八):Spring Boot + OpenAI 使用Whisper实现语音转文本功能
9大模型之Spring AI实战系列(九):Spring Boot + OpenAI 使用TTS实现文本转语音功能
10大模型之Spring AI实战系列(十):Spring Boot + OpenAI 使用 DALL·E实现文本生成图像功能


前言

在前面的文章中,我们已经学习了如何使用 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-2dall-e-3
✅ 支持多种分辨率可设置 256x256、512x512、1024x1024 等
✅ 支持图像数量控制可一次生成多张图像
✅ 支持图像质量设定standardhd

(三)常用参数说明

参数描述
[prompt] 图像生成的文本提示词
model使用的图像生成模型(dall-e-2dall-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 模型实现文本生成图像的功能,了解了如何通过 ImagePromptOpenAiImageOptions 实现灵活的图像生成配置,为后续构建图像生成、多模态处理、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的探索之旅,开启智能时代的大门!

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寻道AI小兵

🐳 感谢你的巨浪支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值