3.6 Spring AI 多模态 API

22 阅读2分钟

Spring AI 多模态 API

概述

多模态(Multimodality)指的是模型同时理解和处理来自各种来源信息的能力,包括文本、图像、音频和其他数据格式。Spring AI Message API 提供了支持多模态大语言模型(LLMs)所需的所有必要抽象。

UserMessagecontent字段主要用于文本输入,而可选的media字段允许添加一个或多个不同模态的附加内容,如图像、音频和视频。MimeType指定模态类型。根据使用的LLMs的不同,Media数据字段可以是作为Resource对象的原始媒体内容,也可以是指向内容的URI。

目前,media字段仅适用于用户输入消息(例如UserMessage)。对于系统消息,该字段没有意义。包含LLM响应的AssistantMessage仅提供文本内容。要生成非文本媒体输出,您应该使用专用的单模态模型。

例如,我们可以使用以下图片(multimodal.test.png)作为输入,并要求LLM解释它看到了什么。

对于大多数多模态LLMs,Spring AI代码将类似于以下形式:

var imageResource = new ClassPathResource("/multimodal.test.png");

var userMessage = UserMessage.builder()
    .text("Explain what do you see in this picture?") // content
    .media(new Media(MimeTypeUtils.IMAGE_PNG, this.imageResource)) // media
    .build();

ChatResponse response = chatModel.call(new Prompt(this.userMessage));
String response = ChatClient.create(chatModel).prompt()
    .user(u -> u.text("Explain what do you see on this picture?")
                .media(MimeTypeUtils.IMAGE_PNG, new ClassPathResource("/multimodal.test.png")))
    .call()
    .content();

并产生如下响应:

这是一个具有简单设计的水果碗图像。碗由金属制成,具有弯曲的金属丝边缘,形成了开放式结构,使水果可以从所有角度看到。碗里面,两根黄色香蕉放在一个红苹果的上面。香蕉有些过熟,如其皮上的棕色斑点所示。碗顶部有一个金属环,可能是作为搬运的把手。碗放置在平坦的表面上,中性色的背景提供了碗内水果的清晰视野。

Spring AI为以下聊天模型提供多模态支持: