收藏本站,收获最前沿的人工智能与编程资讯!!

Spring AI 多模态 API

技术文档 20℃ 0

多模态 API

「凡是自然相连的事物,都应当结合起来教授」——约翰·阿莫斯·夸美纽斯,《图画中可见的世界》,1658年

人类处理知识时,会同时通过多种数据模态进行。我们的学习方式、人生体验都是多模态的。我们并非只拥有视觉、只拥有听觉,也并非只拥有文本。

与这一规律相反,传统机器学习通常专注于针对单一模态设计的专用模型。例如,我们开发用于文本转语音、语音转文本的音频模型,以及用于目标检测、分类任务的计算机视觉模型。

但如今,新一代多模态大语言模型开始涌现。典型代表包括 OpenAI 的 GPT-4o、谷歌 Vertex AI Gemini 1.5、Anthropic 的 Claude3,以及开源模型 Llama3.2、LLaVA 和 BakLLaVA。这些模型能够接收文本、图像、音频、视频等多种输入,并通过融合这些信息生成文本响应。

多模态大语言模型(LLM)的核心特性,是能够结合图像、音频、视频等其他模态,处理并生成文本内容。

Spring AI 多模态支持

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

Spring AI 消息 API 提供了支持多模态大语言模型所需的全部抽象能力。

Spring AI 消息 API

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

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

例如,我们可以将以下图片(multimodal.test.png)作为输入,让大语言模型描述图片内容。

多模态测试图片

对于大多数多模态大语言模型,Spring AI 代码示例如下:

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:

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 系列模型)

相关推荐