多模态 API
人类通过多种数据输入模式同时处理知识。我们的学习方式,我们的经验都是多模态的。我们不仅仅拥有视觉,也拥有听觉和文本。
这些学习的基本原理是由现代教育之父 约翰·阿莫斯·科梅尼乌斯 在他 1658 年的作品《感官世界图解》中阐述的。
“所有自然联系的事物都应该结合起来教学”
与这些原则相反,过去,我们对机器学习的处理方法通常侧重于专门针对处理单一模态的模型。例如,我们开发了用于文本到语音或语音到文本等任务的音频模型,以及用于目标检测和分类等任务的计算机视觉模型。
然而,新一代多模态大型语言模型开始出现。例如,OpenAI 的 GPT-4 Vision、Google 的 Vertex AI Gemini Pro Vision、Anthropic 的 Claude3 以及开源产品 LLaVA 和 balklava 能够接受多种输入,包括文本图像、音频和视频,并通过整合这些输入生成文本响应。
多模态大型语言模型 (LLM) 的功能使模型能够与图像、音频或视频等其他模态结合处理和生成文本。
Spring AI 多模态
多模态是指模型能够同时理解和处理来自不同来源的信息的能力,包括文本、图像、音频和其他数据格式。
Spring AI 消息 API 提供了支持多模态 LLM 的所有必要抽象。
消息的 content
字段主要用作文本输入,而可选的 media
字段允许添加一个或多个不同模态的附加内容,例如图像、音频和视频。MimeType
指定模态类型。根据使用的 LLM,媒体的数据字段可以是编码的原始媒体内容或指向内容的 URI。
媒体字段目前仅适用于用户输入消息(例如,UserMessage )。它对系统消息没有意义。AssistantMessage 包含 LLM 响应,仅提供文本内容。要生成非文本媒体输出,您应该使用一个专门的单模态模型。*
|
例如,我们可以将以下图片(**multimodal.test.png**)作为输入,并要求 LLM 解释它在图片中看到了什么。
对于大多数多模态 LLM,Spring AI 代码看起来像这样
byte[] imageData = new ClassPathResource("/multimodal.test.png").getContentAsByteArray();
var userMessage = new UserMessage(
"Explain what do you see in this picture?", // content
List.of(new Media(MimeTypeUtils.IMAGE_PNG, imageData))); // media
ChatResponse response = chatModel.call(new Prompt(List.of(userMessage)));
并生成类似的响应
这是一张水果碗的图片,设计简单。碗是用金属制成的,边缘有弯曲的金属丝,形成开放的结构,可以从各个角度看到水果。碗里有两个黄香蕉放在看起来像红苹果的东西上面。香蕉略微过熟,从果皮上的棕色斑点可以看出。碗的顶部有一个金属环,可能是用来作为提手。碗放在一个平面上,背景是中性色,可以清楚地看到里面的水果。
最新版本的 Spring AI 为以下聊天客户端提供多模态支持