多模态API

“万物相连皆应并教”——约翰·阿莫斯·夸美纽斯,《世界图解》,1658年spring-doc.cadn.net.cn

人类处理知识,同时在多种数据输入模式下进行。 我们的学习方式、经历都是多模态的。 我们不仅仅有视觉感知,还有听觉和文本信息。spring-doc.cadn.net.cn

与这些原则相反,机器学习通常侧重于专门针对处理单一模态定制的模型。 例如,我们为文本转语音或语音转文本等任务开发了音频模型,为对象检测和分类等任务开发了计算机视觉模型。spring-doc.cadn.net.cn

然而,多模态大型语言模型的新一波开始兴起。 例如,OpenAI的GPT-4o、Google的Vertex AI Gemini 1.5、Anthropic的Claude3以及开源版本Llama3.2、LLaVA和BakLLaVA能够接受多种输入,包括文本、图像、音频和视频,并通过整合这些输入生成文本响应。spring-doc.cadn.net.cn

多模态大型语言模型(LLM)功能使模型能够处理和生成文本以及其他模态的内容,如图片、音频或视频。

Spring AI 多模态

多模态指的是模型同时理解和处理来自多种来源的信息的能力,包括文本、图像、音频以及其他数据格式。spring-doc.cadn.net.cn

Spring AI消息API提供了所有必要的抽象来支持多模态LLM。spring-doc.cadn.net.cn

Spring AI Message API

The UserMessage 的 `content` 字段主要用于文本输入,而可选的 `media` 字段允许添加一个或多个不同模态的内容,例如图片、音频和视频。 `MimeType` 指定内容的模态类型。 根据使用的 LLMs(大型语言模型),`Media` 数据字段可以是原始媒体内容的 `Resource` 对象,或者是一个指向内容的 `URI` 链接。spring-doc.cadn.net.cn

媒体字段目前仅适用于用户输入消息(例如:UserMessage)。它不对系统消息具有意义。包含LLM响应的AssistantMessage仅提供文本内容。要生成非文本媒体输出,您应该利用一个专用的、单一模态的模型。spring-doc.cadn.net.cn

例如,我们可以将以下图片(multimodal.test.png)作为输入,并要求LLM解释它看到了什么。spring-doc.cadn.net.cn

Multimodal Test Image

对于大多数多模态LLM,Spring AI的代码可能会如下所示:spring-doc.cadn.net.cn

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

or with the fluent ChatClient API:spring-doc.cadn.net.cn

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();

and produce a response like:spring-doc.cadn.net.cn

这是一张展示水果碗的图片,设计简约。这个碗由金属制成,边缘呈曲线状的钢丝形成开放结构,使得从各个角度看都能看到里面的水果。碗里有两个黄色香蕉放在一个看起来是红色苹果的顶部。这两个香蕉略显成熟过度,因为它们的皮上有棕色斑点。碗的顶部有一个金属环,很可能是用来提拿的把手。这个碗放置在一个中性色背景的平面上,提供了一个清晰展示内部水果的视角。spring-doc.cadn.net.cn

Spring AI 提供了对以下聊天模型的多模态支持:spring-doc.cadn.net.cn