此版本仍在开发中,尚不被认为是稳定的。对于最新的快照版本,请使用 Spring AI 1.0.1spring-doc.cadn.net.cn

多模态 API

“所有自然相连的事物都应该结合起来教导”——约翰·阿莫斯·夸美纽斯,“Orbis Sensualium Pictus”,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 Message API 提供了支持多模态 LLM 所需的所有抽象。spring-doc.cadn.net.cn

Spring AI 消息 API

UserMessage 的content字段主要用于文本输入,而可选的media字段允许添加一个或多个不同模态的附加内容,例如图像、音频和视频。 这MimeType指定模态类型。 根据使用的 LLM,Mediadata 字段可以是原始媒体内容,作为Resourceobject 或URI到内容。spring-doc.cadn.net.cn

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

例如,我们可以拍摄以下图片(multimodal.test.png)作为输入,并要求 LLM 解释它所看到的内容。spring-doc.cadn.net.cn

多模态测试图像

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

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

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

ChatResponse response = chatModel.call(new Prompt(this.userMessage));

或使用流畅的 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();

并生成如下响应:spring-doc.cadn.net.cn

这是一个设计简单的水果盘图像。碗由金属制成,带有弯曲的金属丝边缘,形成开放式结构,使水果从各个角度都可见。碗里有两根黄色的香蕉放在一个红苹果的上面。香蕉稍微过熟了,果皮上的棕色斑点就表明了这一点。碗的顶部有一个金属环,可能用作携带的手柄。碗放在一个平坦的表面上,背景为中性色,可以清楚地看到里面的水果。spring-doc.cadn.net.cn

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