多模态 API
本站(springdoc.cn)中的内容来源于 spring.io ,原始版权归属于 spring.io。由 springdoc.cn 进行翻译,整理。可供个人学习、研究,未经许可,不得进行任何转载、商用或与之相关的行为。 商标声明:Spring 是 Pivotal Software, Inc. 在美国以及其他国家的商标。 |
“所有自然联系的事物都应结合起来传授” — 约翰-阿莫斯-夸美纽斯,《世界图绘》,1658 年
人类通过多模态数据输入并行处理知识。我们的学习方式和体验都是多模态的 — 不只有视觉、听觉或文本的单一感知。
然而,机器学习往往专注于处理单一模态的专用模型。例如,我们开发音频模型用于文本转语音或语音转文本任务,开发计算机视觉模型用于目标检测和分类等任务。
然而,新一代多模态大语言模型正在兴起。例如 OpenAI 的GPT-4o、Google 的Vertex AI Gemini 1.5、Anthropic 的 Claude3,以及开源模型 Llama3.2、LLaVA 和 BakLLaVA,都能接受文本、图像、音频和视频等多种输入,并通过整合这些输入生成文本响应。
多模态大语言模型(LLM)的特性使其能够结合图像、音频或视频等其他模态处理并生成文本。 |
Spring AI 多模态
多模态性指模型同时理解和处理文本、图像、音频及其他数据格式等多源信息的能力。
Spring AI Message API 提供了支持多模态 LLM 所需的所有抽象。

UserMessage
的 content
字段主要用于文本输入,而可选的 media
字段允许添加图像、音频和视频等多模态内容。MimeType
指定模态类型,根据所用 LLM 的不同,Media
数据字段可以是原始媒体内容(作为 Resource
对象)或内容 URI
。
目前 media 字段仅适用于用户输入消息(如 UserMessage ),对系统消息无意义。包含 LLM 响应的 AssistantMessage 仅提供文本内容。要生成非文本媒体输出,应使用专用的单模态模型。
|
例如,我们可以将下图(multimodal.test.png
)作为输入,要求 LLM 解释它所识别的内容。

对于大多数多模态 LLM,Spring AI 代码通常如下所示:
var imageResource = new ClassPathResource("/multimodal.test.png");
var userMessage = new UserMessage(
"Explain what do you see in this picture?", // 内容
new Media(MimeTypeUtils.IMAGE_PNG, this.imageResource)); // 媒体
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 为以下聊天模型提供多模态支持: