Spring AI - 多模态 - Orbis Sensualium Pictus

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

更新 2024年07月20日:更新消息 API 层级图并更新支持多模态的模型名称

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

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

学习的这些基本原则是由现代教育之父约翰·阿莫斯·夸美纽斯在他1658年的著作《有感官的世界图画》(Orbis Sensualium Pictus)中阐述的。

orbis-sensualium-pictus2

"自然相连的事物都应该结合起来教授"

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

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

多模态大型语言模型(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();

并产生类似的回应

这是一张水果碗的图片,设计简单。碗由金属制成,边缘带有弯曲的金属丝,形成一个开放的结构,让水果从各个角度都能看到。碗里,有两个黄色的香蕉放在一个红色的苹果上面。香蕉有些过熟,这从它们表皮上的褐色斑点可以看出。碗的顶部有一个金属环,可能是用来作为提手的。碗放在一个平面上,背景颜色中性,可以清楚地看到里面的水果。

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

下一步

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

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

结论

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

当我们拥抱这个多模态人工智能时代时,夸美纽斯所设想的互联学习的愿景正在成为现实。

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

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

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

了解更多

获得支持

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件,只需一份简单的订阅。

了解更多

即将举行的活动

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

查看所有