多模态API

“所有自然相连的事物都应结合教导”——约翰·阿莫斯·科米纽斯,《Pictus的感官之环》,1658年spring-doc.cadn.net.cn

人类同时处理多种数据输入模式的知识。 我们的学习方式和经历都是多模态的。 我们不仅有视觉,只有音频和文字。spring-doc.cadn.net.cn

与这些原则相反,机器学习通常专注于专门针对单一模态的模型。 例如,我们开发了文本转语音或语音转文本等任务的音频模型,以及用于物体检测和分类等任务的计算机视觉模型。spring-doc.cadn.net.cn

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

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

春季人工智能多模态

多模态指的是模型能够同时理解和处理来自多种来源的信息,包括文本、图像、音频及其他数据格式。spring-doc.cadn.net.cn

Spring AI 消息 API 提供了支持多模态大型语言模型所需的所有抽象。spring-doc.cadn.net.cn

Spring AI 消息 API

用户消息的内容字段主要用于文本输入,而可选的媒体Field允许添加一种或多种不同模态的内容,如图像、音频和视频。 这模仿类型指定模态类型。 根据所用LLM的不同,媒体数据字段可以是原始媒体内容,作为资源对象或URI内容。spring-doc.cadn.net.cn

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

例如,我们可以拍摄以下图片(multimodal.test.png作为输入,并请LLM解释它所看到的内容。spring-doc.cadn.net.cn

多模态测试图像

对于大多数多模态大型语言模型,Spring AI代码大致如下:spring-doc.cadn.net.cn

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:spring-doc.cadn.net.cn

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-doc.cadn.net.cn

这是一张设计简单的水果碗图片。碗由金属制成,边缘带有弯曲的铁丝,形成开放结构,使水果从各个角度都能看到。碗里有两根黄色香蕉,放在一个看起来像红苹果的东西上。香蕉稍微过熟,果皮上有棕色斑点。碗顶部有一个金属环,可能用作提携把手。碗放在一个平面上,背景为中性色,能清晰看到里面的水果。spring-doc.cadn.net.cn

Spring AI 为以下聊天模型提供多模态支持:spring-doc.cadn.net.cn