跳到主要内容

多模态 API

Deepseek 3.2 中英对照 Multimodality Multimodality API

"所有自然关联的事物都应当结合起来进行教学"——约翰·阿摩司·夸美纽斯,《世界图解》,1658年

人类处理知识时,会同时接收多种数据输入模式。我们的学习方式和经历都是多模态的。我们不仅仅有视觉、听觉或文字处理能力。

与这些原则相反,机器学习常常专注于专门处理单一模态的定制化模型。例如,我们开发了用于文本转语音或语音转文本等任务的音频模型,以及用于目标检测和分类等任务的计算机视觉模型。

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

备注

多模态大语言模型(LLM)功能使模型能够处理并结合图像、音频或视频等其他模态生成文本。

Spring AI 多模态

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

Spring AI Message API 提供了支持多模态大型语言模型所需的所有必要抽象。

Spring AI Message API

UserMessagecontent字段主要用于文本输入,而可选的media字段允许添加一种或多种不同模态的附加内容,例如图像、音频和视频。MimeType用于指定模态类型。根据所使用的 LLM,Media数据字段可以是作为Resource对象的原始媒体内容,也可以是内容的URI

备注

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

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

多模态测试图片

对于大多数多模态大语言模型(LLM),Spring AI 的代码大致会如下所示:

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

或者使用流畅的 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 为以下聊天模型提供了多模态支持: