Spring AI 系列之二十二 - ImageModel

之前做个几个大模型的应用,都是使用Python语言,后来有一个项目使用了Java,并使用了Spring AI框架。随着Spring AI不断地完善,最近它发布了1.0正式版,意味着它已经能很好的作为企业级生产环境的使用。对于Java开发者来说真是一个福音,其功能已经能满足基于大模型开发企业级应用。借着这次机会,给大家分享一下Spring AI框架。

注意由于框架不同版本改造会有些使用的不同,因此本次系列中使用基本框架是 Spring AI-1.0.0,JDK版本使用的是19
代码参考: https://github.com/forever1986/springai-study

目录

  • 1 Spring AI 的 ImageModel
    • 1.1 ImagePrompt
    • 1.2 ImageResponse
  • 2 示例演示

上一章讲了一个非常重要的EmbeddingModel,这一章来讲讲ImageModel。

1 Spring AI 的 ImageModel

前面提到聊天模型和嵌入模型时,都说过Spring AI封装了一个ChatModel和EmbeddingModel,所以关于图像模型,Spring AI 同样封装了一个ImageModel接口,为了统一各个模型供应商的封装。下面是ImageModel的源码:

import org.springframework.ai.model.Model;@FunctionalInterface
public interface ImageModel extends Model<ImagePrompt, ImageResponse> {// 返回图像ImageResponse call(ImagePrompt request);
}

可以看到ImageModel 非常简单,就是只有一个方法call用于调用大模型的API,并返回图像。但是关于call方法,需要关注的是其参数ImagePrompt和返回值ImageResponse。

1.1 ImagePrompt

关于ImagePrompt,它包括两个重要部分:ImageMessage和ImageOptions:

  • ImageMessage:这个参数包括一个提示语和一个权重值,提示词当然就是提示生成图片的提示语,而权重值则需要模型能够支持权重设置的模型才起作用
  • ImageOptions:这个是配置选项,包括:模型、生成几张图片、高度、宽度等等信息,当然这个也是需要模型本身支持某些配置选择才行。比如可以看一下智谱实现的ZhiPuAiImageOptions,里面仅仅包括设置模型,并没有其它配置选项。

1.2 ImageResponse

关于ImageResponse,它包括两个重要部分:ImageGeneration和ImageResponseMetadata:

  • ImageGeneration:继承自 ModelResult 类,用于表示输出响应(也就是图片)以及关于该图片的相关元数据。这是一个list,也就是支持多张图片生成(如果模型允许的话)
  • ImageResponseMetadata:该对象用于存储有关人工智能模型响应的元数据。

2 示例演示

代码参考lesson18

示例说明:这里使用智谱的免费图像模型CogView-3-Flash进行图片生成演示

1)关于如何找图片大模型,可以去各大模型平台上面找,比如下面是在智谱官方的文生图模型

在这里插入图片描述

说明:这次选用CogView-3-Flash,因为免费。。。

2)新建lesson18子模块,其pom引入如下:

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-zhipuai</artifactId></dependency>
</dependencies>

3)配置application.properties文件

# API KEY
spring.ai.zhipuai.api-key=你的智谱模型的API KEY

4)新建演示类ImageModelController:

import jakarta.servlet.http.HttpServletResponse;
import org.springframework.ai.image.ImageMessage;
import org.springframework.ai.image.ImagePrompt;
import org.springframework.ai.image.ImageResponse;
import org.springframework.ai.zhipuai.ZhiPuAiImageModel;
import org.springframework.ai.zhipuai.ZhiPuAiImageOptions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.net.URL;@RestController
public class ImageModelController {private final ZhiPuAiImageModel imageModel;@Autowiredpublic ImageModelController(ZhiPuAiImageModel imageModel) {this.imageModel = imageModel;}@GetMapping("/ai/imagegenerate")public void generate(@RequestParam(value = "message", defaultValue = "生成一只老虎!") String message, HttpServletResponse response) throws IOException {ImageResponse image = this.imageModel.call(new ImagePrompt(new ImageMessage(message)// ZhiPuAiImageOptions参数可以设置模型、图片数量、图片大小等信息,这里必须是图像模型, ZhiPuAiImageOptions.builder().model("cogview-3-flash").build()));// 返回的URLString url = image.getResult().getOutput().getUrl();// 将URL转为Stream输出到HttpServletResponseURL imageURL = URI.create(url).toURL();InputStream inputStream = imageURL.openStream();response.setHeader("Content-Type", MediaType.IMAGE_PNG_VALUE);response.getOutputStream().write(inputStream.readAllBytes());response.getOutputStream().flush();}}

5)新建启动类Lesson18Application:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class Lesson18Application {public static void main(String[] args) {SpringApplication.run(Lesson18Application.class, args);}}

6)演示效果:

http://localhost:8080/ai/imagegenerate

在这里插入图片描述

结语:本章介绍Spring AI的ImageModel,包括其源码、参数和返回值。同时也通过示例演示如何访问智谱的图像模型,可以看出Spring AI对于图像模型也是封装了一个非常简便的ImageModel,让用户无需关心底层的访问逻辑。下一章将继续讲非聊天大模型之音频大模型。

Spring AI系列上一章:《Spring AI 系列之二十一 - EmbeddingModel》

Spring AI系列下一章:《Spring AI 系列之二十三 - AudioModels》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/90327.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/90327.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis集群高可用与性能优化实战指南

Redis集群高可用与性能优化实战指南 一、业务场景描述 在大型分布式系统中&#xff0c;Redis不仅承担缓存职责&#xff0c;还常用于限流、排行榜、会话管理等高并发场景。随着访问量的激增和集群规模的扩展&#xff0c;如何保证Redis服务的高可用性与高性能&#xff0c;成为后端…

基于SpringBoot+Vue的高校特长互助系统(WebSocket实时聊天、协同过滤算法、ECharts图形化分析)

“ &#x1f388;系统亮点&#xff1a;WebSocket实时聊天、协同过滤算法、ECharts图形化分析”01系统开发工具与环境搭建前后端分离架构项目架构&#xff1a;B/S架构运行环境&#xff1a;win10/win11、jdk17前端&#xff1a;技术&#xff1a;框架Vue.js&#xff1b;UI库&#x…

于纵横交错的矩阵间:二维数组与多维数据的默契和鸣

大家好啊,我是小象٩(๑ω๑)۶ 我的博客:Xiao Xiangζั͡ޓއއ 很高兴见到大家,希望能够和大家一起交流学习,共同进步。* 接着上节课的内容,这一节我们来学习二维数组,学习二维数组的概念和创建,明白二维数组的初始化,学会不完全初始化,完全初始化,按照行初始化的…

SHA-3算法详解

SHA-3&#xff08;Secure Hash Algorithm 3&#xff09;是美国国家标准与技术研究院&#xff08;NIST&#xff09;于 2015 年发布的新一代密码哈希算法标准&#xff0c;其核心基于比利时密码学家团队设计的Keccak 算法。SHA-3 的诞生旨在应对 SHA-1 和 SHA-2 系列算法可能面临的…

前端笔记:同源策略、跨域问题

只有前端才会有跨域问题后端不受限制 一、什么是“同源策略”&#xff08;Same-Origin Policy&#xff09; ✅ 定义&#xff1a; 浏览器的 同源策略 是一种 安全机制&#xff0c;限制一个源的 JavaScript 访问另一个源的资源&#xff0c;以防止恶意网站窃取用户敏感信息。 ✅ “…

java通过com进行pdf转换docx丢失

使用&#xff0c;通过com调用&#xff0c;发现pdf转换成docx后&#xff0c;没有看到docx输出到指定目录。直接说解决方案:关闭的保护模式即可&#xff0c;打开工具&#xff0c;编辑->首选项 找到安全性(增强)&#xff0c;关闭启动时启用保护模式关闭后&#xff0c;docx正常输…

SQL基础⑫ | 视图篇

0 序言 本文将系统讲解数据库中视图的相关知识&#xff0c;包括视图的定义、作用、创建&#xff08;单表、多表、基于视图创建&#xff09;、查看、更新、修改与删除操作&#xff0c;以及视图的优缺点。 通过学习&#xff0c;你能够掌握视图的基本概念&#xff0c;理解何时及如…

移动云×华为昇腾:“大EP+PD分离”架构实现单卡吞吐量跨越式提升!

在面向下一代AI基础设施的关键技术攻关中&#xff0c;移动云与华为昇腾计算团队深度协同&#xff0c;实现了大模型推理引擎的架构级突破。双方基于昇腾AI基础软硬件平台&#xff0c;针对DeepSeek大模型完成了大规模专家并行&#xff08;Expert Parallelism&#xff0c;简称“大…

配电自动化终端中电源模块的设计

配电自动化终端中电源模块的设计 引言 配电终端设备的可靠性和自动化程度,直接影响到整个配电自动化系统的可靠性和自动化水平。由于配电终端设备一般安装于户外或比较偏僻的地方,不可能有直流电源提供,因此,配电网终端设备的直流供电方式成为各配网自动化改造中必须要研究…

性能测试-groovy语言1

课程&#xff1a;B站大学 记录软件测试-性能测试学习历程、掌握前端性能测试、后端性能测试、服务端性能测试的你才是一个专业的软件测试工程师 Jmeter之Groovy语言Groovy简介为何性能测试中选择Groovywindows下载Groovy进入官网配置环境变量Groovy的数据类型groovy的保留字字符…

天邑TY1613_S905L3SB_安卓9-高安非-高安版-通刷-TTL线刷固件包

天邑TY1613_S905L3SB_安卓9-高安非-高安版-通刷-TTL线刷固件包刷机说明&#xff1a;本固件为TTL刷机方式&#xff0c;需要准备如下工具&#xff1b;电烙铁TTL线刷机优盘TTL接触点位于处理器左侧&#xff0c;从上往下数第二脚GND、3TXD、4RXD跑码工具-【工具大全】-putty跑码工具…

【硬件-笔试面试题】硬件/电子工程师,笔试面试题-7,(知识点:晶体管放大倍数计算)

目录 1、题目 2、解答 3、相关知识点 晶体管的电流分配关系 直流电流放大系数\(\overline{\beta}\) 交流电流放大系数\(\beta\) 晶体管的放大条件 总结 【硬件-笔试面试题】硬件/电子工程师&#xff0c;笔试面试题汇总版&#xff0c;持续更新学习&#xff0c;加油&…

力扣-152.乘积最大子数组

题目链接 152.乘积最大子数组 class Solution {public int maxProduct(int[] nums) {int[] dpMax new int[nums.length]; //包括nums[i]的乘积最大值int[] dpMin new int[nums.length]; //包括nums[i]的乘积最小值int res nums[0];dpMax[0] nums[0];dpMin[0] nums[0];fo…

HTTP/1.0、HTTP/1.1 和 HTTP/2.0 主要区别

一句话总结 HTTP/1.0: 短连接&#xff0c;每次请求都需要建立一个新的 TCP 连接&#xff0c;性能较差。HTTP/1.1: 长连接&#xff0c;默认开启 Keep-Alive&#xff0c;连接可复用&#xff0c;解决了 1.0 的大部分问题&#xff0c;是目前使用最广泛的版本。HTTP/2.0: 二进制、多…

Navicat 17.3 正式发布 | 现已支持达梦、金仓和 IvorySQL 数据库

&#x1f680;&#x1f680;&#x1f680; Navicat 很高兴地宣布&#xff1a;Navicat 17.3 版本正式发布。此次更新包含多项突破性功能&#xff0c;包括新增对达梦、金仓和 IvorySQL 等数据库的支持&#xff0c;全面强化 AI 功能并新增阿里通义千问等 AI 大模型&#xff0c;同…

前端性能新纪元:Rust + WebAssembly 如何在浏览器中实现10倍性能提升(以视频处理为例)

前端性能新纪元&#xff1a;Rust WebAssembly 如何在浏览器中实现10倍性能提升&#xff08;以视频处理为例&#xff09; JavaScript&#xff0c;作为 Web 开发的基石&#xff0c;是动态的、灵活的&#xff0c;但在性能上&#xff0c;它也存在着天生的“软肋”。对于那些计算密…

Web前端:JavaScript find()函数内判断

&#x1f3af; find是什么&#xff1f;find() 是 JavaScript 数组&#xff08;Array&#xff09;提供的一个内置方法&#xff0c;用于在数组中查找第一个满足条件的元素。简单来说&#xff1a;它像侦探一样遍历数组&#xff0c;找到第一个符合条件的成员就返回它。⚙️ 核心作用…

MySQL详解三

MySQL详解三事务ACID特性原子性一致性隔离性持久性事务的隔离级别读未提交(Read Uncommitted)读已提交&#xff08;Read Committed&#xff09;可重复读&#xff08;Repeatable Read&#xff09;串行化&#xff08;serializable&#xff09;MVCC聚集索引的隐藏列read view锁全局…

ABQ-LLM:用于大语言模型的任意比特量化推理加速

温馨提示&#xff1a; 本篇文章已同步至"AI专题精讲" ABQ-LLM&#xff1a;用于大语言模型的任意比特量化推理加速 摘要 大语言模型&#xff08;LLMs&#xff09;在自然语言处理任务中取得了革命性的进展。然而&#xff0c;其实际应用受到巨大的内存与计算开销的限制…

kafka的shell操作

Kafka 提供了丰富的 shell 命令工具&#xff0c;位于 Kafka 安装目录的 bin/ 目录下&#xff08;Windows 系统为 bin/windows/&#xff09;。这些命令用于管理主题、生产者、消费者、分区等核心组件。以下是常用的 Kafka shell 操作大全&#xff1a;一、主题&#xff08;Topic&…