09_Spring AI 干货笔记之多模态

一、多模态 API

"所有自然相连的事物都应结合起来教授" - 约翰·阿摩司·康米纽斯,《世界图解》,1658年

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

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

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

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

二、Spring AI 多模态

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

Spring AI 消息 API 提供了支持多模态 LLM 所需的所有抽象。

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

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

例如,我们可以将以下图片(multimodal.test.png)作为输入,并要求 LLM 解释它所看到的内容。

对于大多数多模态 LLM,Spring AI 代码大致如下所示:

java 复制代码
var imageResource = new ClassPathResource("/multimodal.test.png");

var userMessage = UserMessage.builder()
    .text("Explain what do you see in this picture?") // 文本内容
    .media(new Media(MimeTypeUtils.IMAGE_PNG, this.imageResource)) // 媒体内容
    .build();

ChatResponse response = chatModel.call(new Prompt(this.userMessage));

或者使用流式的 ChatClient API:

java 复制代码
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 为以下对话模型提供多模态支持:

  • Anthropic Claude 3

  • AWS Bedrock Converse

  • Azure Open AI(例如 GPT-4o 模型)

  • Mistral AI(例如 Mistral Pixtral 模型)

  • Ollama(例如 LLaVA, BakLLaVA, Llama3.2 模型)

  • OpenAI(例如 GPT-4 和 GPT-4o 模型)

  • Vertex AI Gemini(例如 gemini-1.5-pro-001, gemini-1.5-flash-001 模型)

相关推荐
NAGNIP6 小时前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
冬奇Lab7 小时前
一天一个开源项目(第36篇):EverMemOS - 跨 LLM 与平台的长时记忆 OS,让 Agent 会记忆更会推理
人工智能·开源·资讯
冬奇Lab7 小时前
OpenClaw 源码深度解析(一):Gateway——为什么需要一个"中枢"
人工智能·开源·源码阅读
AngelPP11 小时前
OpenClaw 架构深度解析:如何把 AI 助手搬到你的个人设备上
人工智能
宅小年11 小时前
Claude Code 换成了Kimi K2.5后,我再也回不去了
人工智能·ai编程·claude
九狼11 小时前
Flutter URL Scheme 跨平台跳转
人工智能·flutter·github
ZFSS11 小时前
Kimi Chat Completion API 申请及使用
前端·人工智能
天翼云开发者社区12 小时前
春节复工福利就位!天翼云息壤2500万Tokens免费送,全品类大模型一键畅玩!
人工智能·算力服务·息壤
知识浅谈12 小时前
教你如何用 Gemini 将课本图片一键转为精美 PPT
人工智能
Ray Liang13 小时前
被低估的量化版模型,小身材也能干大事
人工智能·ai·ai助手·mindx