Spring AI - 多模态 - 感官世界图

工程 | Christian Tzolov | 2024年4月19日 | ...

更新 2024年7月20日:更新 Message API 层次结构图并更新支持多模态的模型名称

更新 2024年6月2日:添加一个额外的代码片段,演示如何使用新的 ChatClient API。

人类同时处理来自多种数据输入模式的知识。我们的学习方式、我们的经验都是多模态的。我们不仅仅只有视觉、听觉和文本。

现代教育之父约翰·阿莫斯·夸美纽斯(John Amos Comenius)在其1658年的著作《感官世界图》(Orbis Sensualium Pictus)中阐述了这些基础学习原则。

orbis-sensualium-pictus2

“所有自然连接的事物都应结合起来教授”

与这些原则相反,过去我们在机器学习方面的做法通常侧重于专门的模型,这些模型被定制用于处理单一模态。例如,我们开发了用于文本转语音或语音转文本等任务的音频模型,以及用于对象检测和分类等任务的计算机视觉模型。

然而,一股新的多模态大型语言模型浪潮开始涌现。例子包括 OpenAI 的 GPT-4o、谷歌的 Vertex AI Gemini Pro 1.5、Anthropic 的 Claude3,以及开源产品 LLaVA 和 Baklava,它们能够接受多种输入,包括文本、图像、音频和视频,并通过整合这些输入来生成文本响应。

多模态大型语言模型(LLM)的特性**使得模型能够结合其他模态(如图像、音频或视频)处理和生成文本。**

Spring AI - 多模态

多模态指的是模型能够同时理解和处理来自各种来源的信息,包括文本、图像、音频和其他数据格式的能力。

Spring AI 的 Message API 提供了支持多模态 LLM 所需的所有抽象。

spring-ai-message-api

UserMessage 的 **content** 字段主要用作文本输入,而可选的 **media** 字段允许添加一个或多个不同模态的额外内容,例如图像、音频和视频。MimeType 指定模态类型。根据所使用的 LLM,Media 的 data 字段可以是编码的原始媒体内容,也可以是指向内容的 URI。

**注意:** `media` 字段目前仅适用于用户输入消息,例如 `UserMessage`。

示例

例如,我们将以下图片(multimodal.test.png)作为输入,并要求 LLM 解释它在图片中看到的内容。

multimodal.test

对于大多数多模态 LLM,Spring AI 代码大致如下所示

byte[] imageData = new ClassPathResource("/multimodal.test.png").getContentAsByteArray();

var userMessage = new UserMessage(
    "Explain what do you see in this picture?", // text content
    List.of(new Media(MimeTypeUtils.IMAGE_PNG, imageData))); // image content

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

或者使用新的流式 ChatClient API

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

并产生如下响应

这是一张设计简洁的水果碗图片。碗由金属制成,带有弯曲的金属丝边缘,形成开放结构,使水果可以从各个角度看到。碗内有两个黄色的香蕉,放在一个看起来像红苹果的水果上。香蕉有点过熟,表皮有棕色斑点。碗顶部有一个金属环,可能是用于提携的把手。碗放在一个平面上,背景颜色中性,提供了碗内水果的清晰视图。

最新版本(1.0.0-SNAPSHOT 和 1.0.0-M1)的 Spring AI 为以下聊天客户端提供了多模态支持

下一步

接下来,Spring AI 将重构 Document API,以添加类似于 Message API 的多模态支持。

目前,AWS Bedrock Titan EmbeddingClient 支持图像嵌入。需要集成额外的多模态 Embedding 服务,以允许在向量存储中对多模态内容进行编码、存储和搜索。

结论

传统上,机器学习专注于针对单一模态的专用模型。然而,随着 OpenAI 的 GPT-4 Vision 和谷歌的 Vertex AI Gemini 等创新,一个新时代已经到来。

随着我们拥抱多模态 AI 时代,夸美纽斯所设想的互联学习愿景正在成为现实。

Spring AI 的 Message API 促进了多模态 LLM 的集成,使开发人员能够创建创新解决方案。通过利用这些模型,应用程序能够理解和响应各种形式的数据,为 AI 驱动的体验开启新的可能性。

订阅 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

抢占先机

VMware 提供培训和认证,助您快速进步。

了解更多

获取支持

Tanzu Spring 通过一个简单的订阅,为 OpenJDK™、Spring 和 Apache Tomcat® 提供支持和二进制文件。

了解更多

即将举办的活动

查看 Spring 社区的所有即将举办的活动。

查看全部