本节继续学习多模态,多模态是指模型能够同时理解和处理来自各种来源的信息,包括文本、图像、音频和其他数据格式。OpenAI支持文本、视觉和音频输入模式。提供视觉多模态支持的OpenAI模型包括gpt-4、gpt-4o和gpt-4o-mini。
OpenAI用户消息API可以将base64编码的图像或图像URL的列表与消息合并。Spring AI的Message接口通过引入Media类型来促进多模态AI模型。此类型包含有关消息中媒体附件的数据和详细信息,使用Spring的org.springframework.util.MimeType和org.springframework.core.io.Resource用于原始媒体数据。
以下一段代码示例,展示了如何使用GPT-4O模型将用户文本与图像融合。
var imageResource = new ClassPathResource("/multimodal.test.png");var userMessage = new UserMessage("Explain what do you see on this picture?", new Media(MimeTypeUtils.IMAGE_PNG, this.imageResource));ChatResponse response = chatModel.call(new Prompt(this.userMessage, OpenAiChatOptions.builder().model(OpenAiApi.ChatModel.GPT_4_O.getValue()).build()));
或使用gpt-4o模型的图像URL等效物:
var userMessage = new UserMessage("Explain what do you see on this picture?", new Media(MimeTypeUtils.IMAGE_PNG, URI.create("https://docs.spring.io/spring-ai/reference/_images/multimodal.test.png")));ChatResponse response = chatModel.call(new Prompt(this.userMessage, OpenAiChatOptions.builder().model(OpenAiApi.ChatModel.GPT_4_O.getValue()).build()));
该示例显示了一个模型,该模型将multimodal.test.png图像作为输入:
随同文本信息“解释一下你在这张图片上看到了什么?“,并生成如下响应:
This is an image of a fruit bowl with a simple design. The bowl is made of metal with curved wire edges thatcreate an open structure, allowing the fruit to be visible from all angles. Inside the bowl, there are twoyellow bananas resting on top of what appears to be a red apple. The bananas are slightly overripe, asindicated by the brown spots on their peels. The bowl has a metal ring at the top, likely to serve as a handlefor carrying. The bowl is placed on a flat surface with a neutral-colored background that provides a clearview of the fruit inside.
音频
提供输入音频多模态支持的OpenAI模型包括gpt-4o-audio-preview。
OpenAI用户消息API可以将base64编码的音频文件列表与消息合并。Spring AI的Message接口通过引入Media类型来促进多模态AI模型。此类型包含有关消息中媒体附件的数据和详细信息,使用Spring的org.springframework.util.MimeType和org.springframework.core.io.Resource用于原始媒体数据。目前,OpenAI仅支持以下媒体类型:audio/mp3和audio/wav。
以下一段代码示例,展示了如何使用gpt-4o-audio-preview模型将用户文本与音频文件融合。
var audioResource = new ClassPathResource("speech1.mp3");var userMessage = new UserMessage("What is this recording about?", List.of(new Media(MimeTypeUtils.parseMimeType("audio/mp3"), audioResource)));ChatResponse response = chatModel.call(new Prompt(List.of(userMessage), OpenAiChatOptions.builder().model(OpenAiApi.ChatModel.GPT_4_O_AUDIO_PREVIEW).build()));
输出音频
提供输入音频多模态支持的OpenAI模型包括gpt-4o-audio-preview。
OpenAIAssistant Message API可以在消息中包含base64编码的音频文件列表。Spring AI的Message接口通过引入Media类型来促进多模态AI模型。此类型包含有关消息中媒体附件的数据和详细信息,使用Spring的org.springframework.util.MimeType和org.springframework.core.io.Resource用于原始媒体数据。目前,OpenAI仅支持以下音频类型:audio/mp3和audio/wav。
下面是一个代码示例,说明了用户文本沿着音频字节数组的响应,使用gpt-4o-audio-preview模型:
var userMessage = new UserMessage("Tell me joke about Spring Framework");ChatResponse response = chatModel.call(new Prompt(List.of(userMessage), OpenAiChatOptions.builder() .model(OpenAiApi.ChatModel.GPT_4_O_AUDIO_PREVIEW) .outputModalities(List.of("text", "audio")) .outputAudio(new AudioParameters(Voice.ALLOY, AudioResponseFormat.WAV)) .build()));String text = response.getResult().getOutput().getContent(); // audio transcriptbyte[] waveAudio = response.getResult().getOutput().getMedia().get(0).getDataAsByteArray(); // audio data
您必须在audio中指定OpenAiChatOptions模态以生成音频输出。AudioParameters类为音频输出提供语音和音频格式。