多模态 API
“所有自然相连的事物都应该结合在一起来教授”——约翰·阿莫斯·夸美纽斯,“Orbis Sensualium Pictus”,1658 年
人类跨多种数据输入模式同时处理知识。 我们的学习方式、我们的体验都是多模式的。 我们不仅有视觉,只有音频和文本。
与这些原则相反,机器学习通常专注于为处理单一模态而量身定制的专用模型。 例如,我们为文本转语音或语音转文本等任务开发了音频模型,并为对象检测和分类等任务开发了计算机视觉模型。
然而,新一波多模态大型语言模型开始出现。 示例包括 OpenAI 的 GPT-4o、Google 的 Vertex AI Gemini 1.5、Anthropic 的 Claude3 以及开源产品 Llama3.2、LLaVA 和 Balklava 能够接受多种输入,包括文本图像、音频和视频,并通过集成这些输入来生成文本响应。
多模态大型语言模型 (LLM) 功能使模型能够与其他模态(如图像、音频或视频)一起处理和生成文本。 |
Spring AI 多模态
多模态是指模型同时理解和处理来自各种来源的信息(包括文本、图像、音频和其他数据格式)的能力。
Spring AI 消息 API 提供了支持多模态 LLM 的所有必要抽象。
UserMessage 的字段主要用于文本输入,而 optional 字段允许添加不同形式的一个或多个其他内容,例如图像、音频和视频。
指定模态类型。
根据使用的 LLM,data 字段可以是作为对象的原始媒体内容,也可以是内容的 a。content
media
MimeType
Media
Resource
URI
media 字段当前仅适用于用户输入消息(例如 )。它对系统消息没有意义。的 (包括 LLM 响应)仅提供文本内容。要生成非文本媒体输出,您应该使用专用的单模态模型之一。UserMessage AssistantMessage |
例如,我们可以将以下图片 () 作为输入,并要求 LLM 解释它所看到的内容。multimodal.test.png
对于大多数多模态 LLM,Spring AI 代码将如下所示:
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));
或使用 Fluent 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 为以下聊天模型提供多模态支持: