多模态 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 所需的所有抽象。

Spring AI Message API

UserMessagecontent 字段主要用于文本输入,而可选的 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 为以下聊天模型提供多模态支持: