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

482次阅读
没有评论

共计 2247 个字符,预计需要花费 6 分钟才能阅读完成。

内容目录

快速入门

 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后将相关信息进行配置。

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

1.2 源码介绍

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

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

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

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

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

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

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

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

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

  • 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);
    }
}

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

正文完
 
PG Thinker
版权声明:本站原创文章,由 PG Thinker 2024-04-23发表,共计2247字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
热评文章
Rust中所有权与借用规则概述

Rust中所有权与借用规则概述

在GC与手动管理内存之间,Rust选择了第三种:所有权机制...