当前位置:   article > 正文

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

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

快速入门

 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>
  • 1
  • 2
  • 3
  • 4

 这里我们主要还是以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);
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/498748
推荐阅读
相关标签
  

闽ICP备14008679号