Spring AI教程(三)Image API之绘图快速入门及源码介绍

13 篇文章 0 订阅
11 篇文章 15 订阅

快速入门

 Spring AI提供了图片生成接口,该接口可以用于与各种专门用于图像生成的人工智能模型进行交互,允许开发人员以最少的代码更在在不同的图像相关模型之间切换。
目前,图像生成接口支持OpenAI和Stability AI。后者的API格式是OpenAI的格式。

 对于OpenAI的图像生成,我们继续使用spring-ai-openai-spring-boot-starter依赖即可,对于Stability AI的图像生成,我们就需要引入下面的依赖:

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-stability-ai-spring-boot-starter</artifactId>
</dependency>

 这里我们主要还是以OpenAI为主。

1.1 项目搭建

 引入spring-ai-openai-spring-boot-starter后将相关信息进行配置。

1.2 源码介绍

 在Chat API那章中,我们的对话使用的是ChatClient,举一反三得,绘图接口就是ImageClient。Spring AI的核心绘图接口就是ImageClientspring-ai-openai中对该接口进行具体的实现是OpenAiImageClient类。

 在调用绘图时,我们只需要像调用对话一样传入一个Prompt:ImagePrompt。ImagePrompt中包含了我们需要绘制的图片信息,包括:ImageMessage(绘图指令)、ImageOptions(图片数、图片配置、返回的图片格式、绘图模型等)。AI拿到我们的Prompt后会根据里面的内容对图像进行生产。

 在调用绘图时,我们只需要重点关注ImageOptions即可。ImageMessage一般是以字符串的形式构建,例如:“帮我画一张小狗的图片”、“帮我画一张小猫的图片”。而ImageOptions则涉及到图片的大小、数量、返回的格式以及调用模型等。

 OpenAI的绘图调用有一个对ImageOptions接口的具体实现:OpenAiImageOptions。该类对象的创建采用建造者模式,默认调用的模型是dall-e-3

 需要注意的是,每个模型所支持的图片尺寸有所不同:

  • dall-e-3:1024 x 1024 、 1024 x 1792、1792 x 1024;
  • dall-e-2: 256 x 256、512 x 512 、 1024 x 1024;

 图片的响应格式主要有两种:url 和 b64_json。

1.3 绘图

 下面我们就简单的实现下dall-e-3模型的绘图接口:

package com.ningning0111.controller;

import org.springframework.ai.image.ImageClient;
import org.springframework.ai.image.ImageGeneration;
import org.springframework.ai.image.ImagePrompt;
import org.springframework.ai.image.ImageResponse;
import org.springframework.ai.openai.OpenAiImageOptions;
import org.springframework.ai.openai.api.OpenAiImageApi;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class ImageController {
    private final ImageClient imageClient;

    public ImageController(ImageClient imageClient) {
        this.imageClient = imageClient;
    }

    @GetMapping("/image")
    public String image(String prompt) {
        ImagePrompt imagePrompt =
                new ImagePrompt(prompt, OpenAiImageOptions.builder()
                        .withModel(OpenAiImageApi.ImageModel.DALL_E_3.getValue())
                        .withHeight(1024)
                        .withWidth(1024)
                        .withResponseFormat("url") // URL or b64_json
                        .build());
        ImageResponse imageResponse = imageClient.call(imagePrompt);
        List<ImageGeneration> results = imageResponse.getResults();
        // 图片url
        String url = results.get(0).getOutput().getUrl();
        return String.format("<img src='%s' alt='%s'>",url,prompt);
    }
}

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

PG Thinker

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

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

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

打赏作者

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

抵扣说明:

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

余额充值