Spring AI 多模态 API
概述
多模态(Multimodality)指的是模型同时理解和处理来自各种来源信息的能力,包括文本、图像、音频和其他数据格式。Spring AI Message API 提供了支持多模态大语言模型(LLMs)所需的所有必要抽象。
UserMessage的content字段主要用于文本输入,而可选的media字段允许添加一个或多个不同模态的附加内容,如图像、音频和视频。MimeType指定模态类型。根据使用的LLMs的不同,Media数据字段可以是作为Resource对象的原始媒体内容,也可以是指向内容的URI。
目前,media字段仅适用于用户输入消息(例如UserMessage)。对于系统消息,该字段没有意义。包含LLM响应的AssistantMessage仅提供文本内容。要生成非文本媒体输出,您应该使用专用的单模态模型。
例如,我们可以使用以下图片(multimodal.test.png)作为输入,并要求LLM解释它看到了什么。
对于大多数多模态LLMs,Spring AI代码将类似于以下形式:
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));
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模型)