Spring AI 接入OpenAI实现文字生成图片功能

news2024/10/6 20:34:36

Spring AI 框架集成的图片大模型

2022年出现的三款文生图的现象级产品,DALL-E、Stable Diffusion、Midjourney。

  • OpenAI
    • dall-e-3
    • dall-e-2
  • Auzre OpenAI
    • dall-e-3
    • dall-e-2
  • Stability
    • stable-diffusion-v1-6
  • ZhiPuAI
    • cogview-3

OpenAI 与 Auzer OpenAI 使用的图片大模型都是 dall-e 系列的。还有一些其它图片大模型,Spring AI 框架并未支持集成,如:Midjourney 发布的 Midjourney 模型。

一探文生图大模型的技术核心

关键词:Diffusion模型、CLIP 模型、热平衡、熵驱动、马尔可夫链。

Diffusion模型

Diffusion模型亦即扩散模型,最早是2015年在《基于非平衡热力学的深度无监督学习》(Deep Unsupervised Learning using Nonequilibrium Thermodynamics)论文中提出的。作者受统计热力学的启发,开发了一种新的生成模型。想法其实很简单:首先向训练数据集中的图像不断加入噪声,使之最终变成一张模糊的图像,这个过程就类似于向水中加入一滴墨水,墨水扩散,水变成淡蓝色,然后教模型学习如何逆转这一过程,将噪声转化为图像。

扩散模型的算法实现分为两个过程:

  • 正向扩散过程可以描述为逐渐将高斯噪声应用于图像,直到图像变得完全无法识别。整个过程可以描述为正向过程的马尔可夫链(描述从一个状态到另一个状态的转换的随机过程)。同理我们可以将每一张图片定义为一个状态,那每一张图片是什么样子只跟上一张图片有关
  • 逆向扩散过程通过神经网络学习的方式近似计算逆向过程的概率分布。

image.png

CLIP 模型

CLIP全称为contrastive language-image pre-training,即基于对比学习的大规模图文预训练模型。CLIP模型不仅有着语义理解的功能,还有将文本信息和图像信息结合,并通过注意力机制进行耦合的功能。

我们看一下 Stability AI 公司开发的 Stability AI 模型,其中就使用了CLIP 模型,首先看下其实现架构;

  • 文本编码器:将语义转化为计算机可以处理的语言,文本编码器就是使用了CLIP模型,对文本进行编码处理
  • 图像生成器:将编码后的结果转换为符合语义的图像

CLIP模型就是在从网上收集到的4亿张图片和它们对应的文字描述基础上训练出来的。其训练过程如下;

image.png

CLIP模型在Stable Diffusion的文本编码器部分发挥了最核心的作用。 该部分内容参考丁磊·生成式人工智能

Spring AI 接入OpenAI实现文生图

代码实现

package org.ivy.controller;

import jakarta.annotation.Resource;
import org.springframework.ai.image.Image;
import org.springframework.ai.image.ImagePrompt;
import org.springframework.ai.image.ImageResponse;
import org.springframework.ai.openai.OpenAiImageModel;
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;

@RestController
public class ImageController {

    @Resource
    private OpenAiImageModel openAiImageModel;

    /**
     * 根据提示词生成图片,并返回图片的URL
     *
     * @param prompt 提示词
     * @return 图片的URL
     */
    @GetMapping("/image")
    public String image(String prompt) {
        ImageResponse imageResponse = openAiImageModel.call(
                new ImagePrompt(prompt, OpenAiImageOptions.builder() // 默认model为 dall-e-3
                        .withModel(OpenAiImageApi.ImageModel.DALL_E_2.getValue())
                        .withResponseFormat("url") // url or base
                        .build()
                )
        );
        Image image = imageResponse.getResult().getOutput();
        return String.format("<img src='%s' alt='%s'>", image.getUrl(), prompt);
    }
}

浏览器测试结果

image.png

使用的dall-e-2模型生成,看着生成的小狗还是比较丑的。

OpenAiImageOptions 参数说明

spring.ai.openai.image.options.n:一次生成图片的张数,dell-e-2时n为1~10, dell-e-3时,n只能为1

spring.ai.openai.image.options.model:指定的模型,默认dell-e-3

spring.ai.openai.image.options.quality:图片生成的质量,只对dell-e-3模型生效

spring.ai.openai.image.options.response_format:图片返回的方式,url和b64_json两种

spring.ai.openai.image.options.size:图片生成的尺寸,dell-e-2只能是 256x256, 512x512, 1024x1024 ,dell-e-3只能是1024x1024, 1792x1024,1024x1792

那么,我们该如何学习大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

一、大模型全套的学习路线

学习大型人工智能模型,如GPT-3、BERT或任何其他先进的神经网络模型,需要系统的方法和持续的努力。既然要系统的学习大模型,那么学习路线是必不可少的,下面的这份路线能帮助你快速梳理知识,形成自己的体系。

L1级别:AI大模型时代的华丽登场

L2级别:AI大模型API应用开发工程

L3级别:大模型应用架构进阶实践

L4级别:大模型微调与私有化部署

一般掌握到第四个级别,市场上大多数岗位都是可以胜任,但要还不是天花板,天花板级别要求更加严格,对于算法和实战是非常苛刻的。建议普通人掌握到L4级别即可。

以上的AI大模型学习路线,不知道为什么发出来就有点糊,高清版可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

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

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

相关文章

商务风格可视化插图怎么绘制?一行代码搞定~~

上期推文推出使用极少代码绘制顶级期刊要求的学术图表(一行代码绘制符合)后&#xff0c;有小伙伴就问了&#xff0c;有没有可以使用较少代码绘制偏商业风的技巧分享&#xff1f;还别说&#xff0c;我还真有这样的技巧准备分享给爱学习的你们&#xff01;话不多说&#xff0c;咱…

基于MATLAB仿真的BCC卷积码维特比译码算法

&#x1f9d1;&#x1f3fb;个人简介&#xff1a;具有3年工作经验&#xff0c;擅长通信算法的MATLAB仿真和FPGA实现。代码事宜&#xff0c;私信博主&#xff0c;程序定制、设计指导。 &#x1f680;基于MATLAB仿真的BCC卷积码维特比译码算法 目录 &#x1f680;1.BCC卷积码概…

182.二叉树:二叉搜索树的最小绝对差(力扣)

代码解决 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* Tre…

【代码随想录】【算法训练营】【第30天 1】 [322]重新安排行程 [51]N皇后

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day 30&#xff0c;周四&#xff0c;好难&#xff0c;会不了一点~ 题目详情 [322] 重新安排行程 题目描述 322 重新安排行程 解题思路 前提&#xff1a;…… 思路&#xff1a;回溯。 重点&…

transformer和Non-local

两者本质上是一个东西&#xff0c;都是用来求自注意力的&#xff0c;但具体而言还是有一些差别&#xff1b; 1&#xff1a;首先说Non-local&#xff0c;它是像素级别的self-attention,算的是图片中各个像素点对指定像素点的影响&#xff1b; 2&#xff1a;transformer我们拿s…

JVM产生FullGC的原因有哪些?

JVM产生FullGC的原因有哪些&#xff1f; 在Java虚拟机&#xff08;JVM&#xff09;中&#xff0c;垃圾回收&#xff08;Garbage Collection&#xff0c;简称GC&#xff09;是一个非常重要的机制。GC的目的是自动管理内存&#xff0c;回收不再使用的对象&#xff0c;防止内存泄…

揭秘!5大策略让广告变现长久有效

在数字化时代的浪潮下&#xff0c;广告变现作为自媒体和APP开发者重要的收入来源&#xff0c;越来越受到重视。 但如何让这种变现方式长久持续&#xff0c;成为许多内容创作者与平台运营者思考的问题。 本文旨在探讨广告变现的持久之道&#xff0c;通过分析前端展示、合规性、…

通过元学习优化增益模型的性能:基础到高级应用总结

在当今数据驱动的决策过程中&#xff0c;因果推断和增益模型扮演了至关重要的角色。因果推断帮助我们理解不同变量间的因果关系&#xff0c;而增益模型则专注于评估干预措施对个体的影响&#xff0c;从而优化策略和行动。然而&#xff0c;要提高这些模型的精确度和适应性&#…

lammps聚合物断键拉伸模拟

本文介绍聚合物的断键拉伸。 在lammps模拟中&#xff0c;所有的键默认是永久存在的&#xff0c;非正常情况下&#xff0c;不能断开&#xff0c;否则会产生"bond atoms missing”错误。 聚合物的拉伸模拟过程中&#xff0c;聚合物链并没有被拉断&#xff0c;而只是把不同的…

tmega128单片机控制的智能小车设计

第1章 绪论1.1 选题背景和意义 自第一台工业机器人诞生以来,机器人的民展已经遍及机械、电子、冶金、交通、宇航、国防等领域。近年来机器人的智能水平不断提高,并且迅速地改变着人们的生活方式。人们在不断探讨、改造、认识自然的过程中,制造能替代人工作的机器一…

国学诗词app开发,学古贯今,句句珠玑

“鹅鹅鹅&#xff0c;曲项向天歌。”这是很多人学会的第一首诗&#xff0c;国学诗词作为中华传统文化的重要组成部分&#xff0c;不仅在历史中占据重要地位&#xff0c;也是儿童学前启蒙的不二选择。对于家长来说&#xff0c;他们更喜欢在学前教孩子一些经典国学和古诗词&#…

180.二叉树:二叉搜索树(力扣)

代码解决 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* Tre…

好用的FTP客户端 Transmit 5中文

Transmit 5是一款专为macOS设计的FTP客户端软件&#xff0c;由Panic公司开发。它支持FTP、SFTP、WebDAV和Amazon S3等多种传输协议&#xff0c;满足用户多样化的文件传输需求。Transmit 5拥有用户友好的界面设计&#xff0c;提供了清晰的文件传输状态和详细的信息&#xff0c;让…

Java面经总结

一、java基础 1.重载和重写的区别 重载&#xff1a; 发生在同一类中&#xff0c;函数名必须一样&#xff0c;参数类型、参数个数、参数顺序、返回值、修饰符可以不一样。重写&#xff1a; 发生在父子类中&#xff0c;函数名、参数、返回值必须一样&#xff0c;访问修饰符必须…

【Android面试八股文】1. 你说一说Handler机制吧 2. 你知道Handler的同步屏障吗? 3. Looper一直在循环,会造成阻塞吗?为什么?

文章目录 一. 你说一说Handler机制吧二、你知道Handler的同步屏障吗&#xff1f;2.1 Handler消息的分类2.2 什么是同步屏障2.3 为什么要设计同步屏障2.4 同步屏障的用法 三、Looper一直在循环&#xff0c;会造成阻塞吗&#xff1f;为什么&#xff1f;扩展阅读 一. 你说一说Hand…

PostgreSQL和Oracle的数据类型对比:时间类型 #PG培训

在数据库管理系统中&#xff0c;时间数据类型是非常关键的一部分。时间数据类型的选择和使用直接影响到数据存储、查询效率和应用程序的设计。本文将对比PostgreSQL和Oracle在时间类型方面的实现和特性。 #PG考试#postgresql培训#postgresql考试#postgresql认证 日期和时间类型…

JAVA开发 创建TXT文件,写入并读取数据流输出到控制台

通过BufferedReader类和BufferedWriter类操作txt文件 1、BufferedReader类和BufferedWriter类1.1 BufferedReader类1.1.1 构造方法1.1.2 重要方法1.1.3 作用 1.2 BufferedWriter类1.2.1 构造方法1.2.2 重要方法1.2.3 作用 1.3 总结 2、案例2.1 实现代码2.2 输出 1、BufferedRea…

STM32理论 —— μCOS-Ⅲ(2/2):时间管理、消息队列、信号量、任务内嵌信号量/队列、件标志组

文章目录 9. 时间管理9.1 OSTimeDly()9.2 OSTimeDlyHMSM()9.3 OSTimeDlyResume()9.4 延时函数实验 10. 消息队列10.1 创建消息队列函数OSQCreate()10.2 发送消息到消息队列函数(写入队列)OSQPost()10.3 获取消息队列中的消息函数(读出队列)OSQPend()10.4 消息队列操作实验 11. …

产品经理简要介绍主流电商平台商品API接口的重要应用价值

主流电商平台&#xff1a; 截至目前&#xff08;2024年6月&#xff09;&#xff0c;主流电商平台通常指的是国内外知名的在线购物平台&#xff0c;包括但不限于以下几家&#xff1a; 1. 中国电商平台&#xff1a; - 淘宝网&#xff08;taobao.com&#xff09; - 天猫商…

阿里云香港服务器怎么样?

大家都知道阿里云是国内最受欢迎的云服务商&#xff0c;那么阿里云香港服务器究竟怎么样呢&#xff1f;和硅云的香港服务器用于做外贸网站等业务相比各有哪些优缺点呢&#xff1f; 阿里云和硅云在香港云服务领域有着广泛的应用和良好的口碑。然而&#xff0c;它们各自的特点和…