如何使用Spring AI实现文生图(Image Model API)?

Spring AI文生图(Image Model API)入门示例

目录

Spring AI文生图(Image Model API)入门示例

1、Image Model API概述

2、Image Model API接口及相关类

3、Spring Boot集成Spring AI框架

4、创建ImageController

5、启动Springboot工程并测试


本章节示例演示如何基于Spring Boot集成Spring AI开源框架,快速集成调用阿里云的百炼大模型AI服务,验证AI大模型“文生图”的功能。

欢迎关注我的公众号

1、Image Model API概述

在Spring AI框架中,Image Model API旨在为与专注于图像生成的各种AI模型进行交互提供一个简单且可移植的接口,使开发者能够以最小的代码改动切换不同的图像相关模型。这一设计符合Spring模块化和互换性的理念,确保开发者可以快速调整其应用程序以适应不同的图像处理相关的AI能力。

此外,通过支持像ImagePrompt这样的辅助类来进行输入封装以及使用ImageResponse来处理输出,图像模型API统一了与致力于图像生成的AI模型之间的通信。它管理请求准备和响应解析的复杂性,为图像生成功能提供直接而简化的API交互。

Image Model API建立在Spring AI通用模型API之上,提供了特定于图像的抽象和实现。

2、Image Model API接口及相关类

  • ImageModel(图像模型)

     这里展示的是ImageModel接口定义:

@FunctionalInterfacepublic interface ImageModel extends Model<ImagePrompt, ImageResponse> {	ImageResponse call(ImagePrompt request);}
  • ImagePrompt(图像提示)

     ImagePrompt是一个封装了ImageMessage对象列表及可选模型请求选项的ModelRequest。下面显示的是ImagePrompt类的一个简化版本,省略了构造函数和其他工具方法:

    public class ImagePrompt implements ModelRequest<List<ImageMessage>> {    private final List<ImageMessage> messages;    private ImageOptions imageModelOptions;    @Override    public List<ImageMessage> getInstructions() {...}	@Override	public ImageOptions getOptions() {...}}
  • ImageMessage(图像消息)

    ImageMessage类封装了用于影响生成图像的文本及其权重。对于支持权重的模型,它们可以是正数或负数。

public class ImageMessage {	private String text; 	private Float weight;    public String getText() {...}	public Float getWeight() {...}}
  • ImageOptions(图像选项)

    表示可以传递给图像生成模型的选项。ImageOptions接口扩展了ModelOptions接口,并用于定义可以传递给AI模型的一些可移植选项。

public interface ImageOptions extends ModelOptions {	Integer getN();	String getModel();	Integer getWidth();	Integer getHeight();	String getResponseFormat(); // openai - url or base64 : stability ai byte[] or base64}
  • ImageResponse(图像响应)

    持有AI模型的输出,每个ImageGeneration实例包含来自单一提示的可能多个输出结果之一。

public class ImageResponse implements ModelResponse<ImageGeneration> {	private final ImageResponseMetadata imageResponseMetadata;	private final List<ImageGeneration> imageGenerations;	@Override	public ImageGeneration getResult() {		// get the first result	}	@Override	public List<ImageGeneration> getResults() {...}	@Override	public ImageResponseMetadata getMetadata() {...}}
  • ImageGeneration(图像生成)

    最终,ImageGeneration类扩展自ModelResult,代表输出响应及有关此结果的元数据。

public class ImageGeneration implements ModelResult<Image> {	private ImageGenerationMetadata imageGenerationMetadata;	private Image image;    @Override	public Image getOutput() {...}
	@Override	public ImageGenerationMetadata getMetadata() {...}}

3、Spring Boot集成Spring AI框架

如何基于Springboot集成Spring AI框架,并调用阿里云AI服务,请参考文章Spring AI Alibaba入门示例,这里不再重复说明。

4、创建ImageController

Spring AI框架的ImageModel API 抽象了应用程序通过模型调用实现“文生图”的交互过程,即应用程序接收文本,调用模型生成图片。ImageModel 的入参为包装类型ImagePrompt,输出类型为ImageResponse

本示例使用spring ai alibaba开源框架,spring-ai-alibaba-starter AutoConfiguration 默认初始化了 ImageModel 实例,我们可以选择直接注入并使用默认实例。

package com.wcy.ai.controller;import jakarta.servlet.http.HttpServletResponse;import org.springframework.ai.image.ImageModel;import org.springframework.ai.image.ImagePrompt;import org.springframework.ai.image.ImageResponse;import org.springframework.http.MediaType;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import java.io.IOException;import java.io.InputStream;import java.net.URI;import java.net.URL;/** * @desc 文生图 * @date: 2025/3/11 * @version: 1.0 */@RestController@RequestMapping("/ai")public class ImageController {    private final ImageModel imageModel;    private static final String DEFAULT_PROMPT = "为人工智能生成一张富有科技感的图片!";    public ImageController(ImageModel imageModel) {        this.imageModel = imageModel;    }
    @GetMapping("/image")    public void image(HttpServletResponse response) {        ImageResponse imageResponse = imageModel.call(new ImagePrompt(DEFAULT_PROMPT));        String imageUrl = imageResponse.getResult().getOutput().getUrl();        try {            URL url = URI.create(imageUrl).toURL();            InputStream in = url.openStream();            response.setHeader("Content-Type", MediaType.IMAGE_PNG_VALUE);            response.getOutputStream().write(in.readAllBytes());            response.getOutputStream().flush();        } catch (IOException e) {            response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);        }    }}

5、启动Springboot工程并测试

启动成功后把下面地址输入到浏览器里,验证AI大模型文生图:

http://localhost:8080/ai/image

显示图片:

图片

### 关于 AI 文生 API使用教程和开源项目 #### Spring AI 文生接口 Spring AI 提供了一种简单而高效的文生功能实现方式。其核心在于提供了一个直观易用的 API 接口,允许开发者通过传递文本提示来生成像[^1]。这些接口通常接收一个或多个字符串形式的描述性文字作为输入参数,并返回生成像数据或者指向该像的 URL 链接。 以下是基于 Spring AI 实现的一个基本代码示例: ```python import requests def generate_image_with_spring_ai(prompt, api_key): url = "https://api.springai.com/v1/generate" headers = { "Authorization": f"Bearer {api_key}", "Content-Type": "application/json", } payload = {"prompt": prompt} response = requests.post(url, json=payload, headers=headers) if response.status_code == 200: image_url = response.json().get("image_url") return image_url else: raise Exception(f"Error generating image: {response.text}") # 调用函数 image_url = generate_image_with_spring_ai("A beautiful sunset over the ocean", "<your_api_key>") print(image_url) ``` 此代码片段展示了如何利用 POST 请求向 Spring AI 发送请求并获取生成像链接。 --- #### 抖音旗下豆包的文生功能 对于预算有限但希望尝试高质量文生服务的情况,可以考虑抖音旗下的 AI 助手——豆包所提供的免费文生功能[^2]。尽管官方并未公开详细的 API 文档,但在某些开源社区中存在针对这一功能的逆向工程成果。需要注意的是,在实际应用过程中应严格遵循相关法律法规以及平台的服务条款,确保行为合法合规。 下面是一个可能用于调用豆包文生功能的概念性伪代码框架(注意:仅作学习交流用途,请勿滥用): ```python import requests def generate_image_with_douyin(prompt): # 假设已知的具体端点和服务密钥 endpoint = "https://doubao.ai/api/text-to-image" service_token = "example_service_token" headers = {"Authorization": f"Token {service_token}"} data = {"text_prompt": prompt} response = requests.post(endpoint, headers=headers, data=data) if response.ok: result = response.json() return result.get("image_url") or None else: print("Failed to generate image:", response.text) return None # 测试调用 url = generate_image_with_douyin("An artistic painting of mountains and rivers.") if url is not None: print("Generated Image URL:", url) else: print("No image generated.") ``` 上述方法仅为理论探讨,具体实施细节需依据实际情况调整。 --- #### Stable Diffusion 自托管解决方案 如果倾向于完全掌控整个流程而不依赖外部服务商,则可选用 **Stable Diffusion** 这一当前最强大的开源文生模型之一[^3]。它支持多种部署模式,既能够下载完整的模型权重到本地运行,也可以借助云服务平台简化操作过程。 以下是从头搭建 Stable Diffusion 环境的大致步骤概述(不涉及敏感技术细节): 1. 安装必要的 Python 库及相关工具链; 2. 获取最新版本的 Stable Diffusion 模型文件; 3. 构建 Web UI 或 RESTful API 层面的支持以便交互; 4. 对硬件资源进行优化配置以提升性能表现。 一段基础命令如下所示: ```bash git clone https://github.com/Stability-AI/stablediffusion.git cd stablediffusion pip install -r requirements.txt python scripts/txt2img.py --prompt "a fantasy landscape with castles floating in the air" --ckpt path/to/model.ckpt ``` 以上脚本执行完毕后将会保存一张由指定文案渲染而成的新图片至默认目录下。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

棉花糖老丫

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值