Spring AI:多模态 AI 大模型

历史文章

Spring AI:对接DeepSeek实战
Spring AI:对接官方 DeepSeek-R1 模型 ------ 实现推理效果
Spring AI:ChatClient实现对话效果
Spring AI:使用 Advisor 组件 - 打印请求大模型出入参日志
Spring AI:ChatMemory 实现聊天记忆功能
Spring AI:本地安装 Ollama 并运行 Qwen3 模型
Spring AI:提示词工程
Spring AI:提示词工程 - Prompt 角色分类(系统角色与用户角色)
Spring AI:基于 "助手角色" 消息实现聊天记忆功能
Spring AI:结构化输出 - 大模型响应内容
Spring AI:Docker 安装 Cassandra 5.x(限制内存占用)&& CQL
Spring AI:整合 Cassandra - 实现聊天消息持久化

什么是多模态?

多模态(Multimodal) AI 大模型的是指能够处理和理解多种不同类型(模态)数据的人工智能模型。 这些模型能够从不同来源的输入中获取信息,并通过综合这些信息来做出更全面、更准确的判断和预测。常见的模态包括:

  • 文本: 书面或口头语言。

  • 图像: 照片、图画、图标等。

  • 音频: 声音、音乐、语音。

  • 视频: 动态图像序列,通常包含音频。

  • ...

多模态的 AI 大模型能够将这些不同模态的数据进行融合处理。例如,能够理解图像中的内容并结合文本信息生成描述,或者结合语音和图像来识别视频中的对象或场景。

核心能力与特点

多模态 AI 大模型的核心能力与特点如下:

1、跨模态理解与关联: 这是最核心的能力。模型不仅能理解每种模态内部的信息,更能理解不同模态信息之间的关联。例如:

  • 理解一张图片描绘的内容,并用文字描述出来(看图说话)。
  • 根据一段文字描述,生成符合描述的图像(文生图)。
  • 理解视频中发生了什么,并回答相关问题(视频问答)。
  • 分析医学影像(图像模态)并结合病历报告(文本模态)做出诊断建议。
  • 理解语音指令(音频模态)并操控智能家居设备(可能需要关联传感器模态)。

2、跨模态生成: 模型可以基于一种模态的信息,生成另一种模态的内容。例如:

  • 文生图:输入文字描述,生成图片。
  • 图生文:输入图片,生成描述、故事或回答问题。
  • 文生视频:输入文字描述,生成短视频。
  • 语音合成:输入文字,生成逼真的语音(文生音频)。
  • 音乐生成:根据描述或情绪生成音乐。

3、信息互补与增强: 不同模态的信息可以相互补充,提供更全面、更准确的理解。例如,一段视频配上文字解说,理解起来比单独看视频或单独看文字更清晰。多模态模型能自动利用这种互补性。

4、更接近人类感知世界的方式: 人类天生就是多模态的。我们通过眼睛看(图像/视频)、耳朵听(音频)、嘴巴说和阅读(文本)等多种方式来感知和理解世界。多模态大模型的目标就是模拟这种更自然、更全面的感知和理解方式。

挑选多模态 AI 大模型

为了能够上手感受一下,我们登录到阿里百炼 的 "模型广场" 中,找一款多模态 AI 大模型,我这里挑选的是 "全模态 | 通义千问-Omni-Turbo" 模型,如下图所示,Qwen-Omni 系列模型支持输入多种模态的数据,包括视频、音频、图片、文本,并输出音频与文本,而且它兼容 OpenAI 接口调用方式。

点击 "API参考",查看模型文档,复制其模型名称 qwen-omni-turbo :

配置模型

此配置对接的是阿里的百练大模型 (支持openai )

增加依赖

java 复制代码
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-starter-model-openai</artifactId>
</dependency>

编辑 application.yml 文件,编辑 openai 节点下的模块名称,将其修改为 qwen-omni-turbo :

java 复制代码
spring:
  ai:
    openai:
      base-url: https://dashscope.aliyuncs.com/compatible-mode # OpenAI 服务的访问地址,这里使用的是阿里云百炼
      api-key: sk-=xxxxxxxxxxxxxx  #API Key, 该成你自己的
      chat:
        options:
          model: qwen-omni-turbo # 模型名称
          temperature: 0.7 # 温度值

添加一张测试图片

为了等会能够测试多模态大模型,在 /resources 资源目录下,新建一个 /images 文件夹,并添加一张图片

新增 Controller 控制器

java 复制代码
@RestController
@RequestMapping("/v9/ai")
public class MultimodalityController {

    @Resource
    private OpenAiChatModel chatModel;

    /**
     * 流式对话
     * @param message
     * @return
     */
    @GetMapping(value = "/generateStream", produces = "text/html;charset=utf-8")
    public Flux<String> generateStream(@RequestParam(value = "message") String message) {
        // 1. 创建媒体资源
        Media image = new Media(
                MimeTypeUtils.IMAGE_PNG,
                new ClassPathResource("/images/img.png")
        );

        // 2. 附加选项(可选),如温度值等等
        Map<String, Object> metadata = new HashMap<>();
        metadata.put("temperature", 0.7);

        // 3. 构建多模态消息
        UserMessage userMessage = UserMessage.builder()
                .text(message)
                .media(image)
                .metadata(metadata)
                .build();

        // 4. 构建提示词
        Prompt prompt = new Prompt(List.of(userMessage));
        // 5. 流式调用
        return chatModel.stream(prompt)
                .mapNotNull(chatResponse -> {
                    Generation generation = chatResponse.getResult();
                    return generation.getOutput().getText();
                });

    }

}

解释一下上述代码的处理流程:

  • 创建一个 Media 媒体资源,声明其类型为 png 图片,并指定资源所在路径;
  • 创建一个附加选项 Map 字典,比如指定 temperature 温度值,这是可选的,可以不添加任何参数;
  • 构建 UserMessage 多模态消息,包括提示词、输入的图片等等;
  • 构建 Prompt 构建提示词;
  • 流式调用 qwen-omni-turbo 模型,注意,此模型只支持流式调用,不支持同步调用;

测试一下

完成上述工作后,重启后端项目,浏览器请求如下地址,询问 AI 大模型 "图片里面的是什么东西":

java 复制代码
http://localhost:8080/v9/ai/generateStream?message=图片里面是什么东西

如下图所示, qwen-omni-turbo 多模态模型成功识别出了图片

相关推荐
@小匠35 分钟前
Read Frog:一款开源的 AI 驱动浏览器语言学习扩展
人工智能·学习
一灯架构3 小时前
90%的人答错!一文带你彻底搞懂ArrayList
java·后端
网教盟人才服务平台4 小时前
“方班预备班盾立方人才培养计划”正式启动!
大数据·人工智能
Y4090014 小时前
【多线程】线程安全(1)
java·开发语言·jvm
芯智工坊4 小时前
第15章 Mosquitto生产环境部署实践
人工智能·mqtt·开源
菜菜艾4 小时前
基于llama.cpp部署私有大模型
linux·运维·服务器·人工智能·ai·云计算·ai编程
TDengine (老段)4 小时前
TDengine IDMP 可视化 —— 分享
大数据·数据库·人工智能·时序数据库·tdengine·涛思数据·时序数据
小真zzz4 小时前
搜极星:第三方多平台中立GEO洞察专家全面解析
人工智能·搜索引擎·seo·geo·中立·第三方平台
布局呆星4 小时前
SpringBoot 基础入门
java·spring boot·spring
风吹迎面入袖凉5 小时前
【Redis】Redisson的可重入锁原理
java·redis