多模態 API
"所有自然聯絡的事物都應該結合起來教授" - 約翰·阿摩司·誇美紐斯,《世界圖解》(Orbis Sensualium Pictus),1658 年
人類同時透過多種資料輸入模式處理知識。我們學習的方式、我們的經驗都是多模態的。我們不僅僅擁有視覺、聽覺或文字。
與這些原則相反,機器學習通常專注於為處理單一模態而定製的專門模型。例如,我們開發了用於文字轉語音或語音轉文字等任務的音訊模型,以及用於物件檢測和分類等任務的計算機視覺模型。
然而,新一波的多模態大型語言模型開始湧現。例如 OpenAI 的 GPT-4o、Google 的 Vertex AI Gemini 1.5、Anthropic 的 Claude 3,以及開源模型 Llama 3.2、LLaVA 和 BakLLaVA,它們能夠接受文字、影像、音訊和影片等多種輸入,並透過整合這些輸入生成文字響應。
多模態大型語言模型(LLM)的特性使模型能夠結合影像、音訊或影片等其他模態來處理和生成文字。 |
Spring AI 多模態
多模態是指模型能夠同時理解和處理來自各種來源的資訊,包括文字、影像、音訊和其他資料格式。
Spring AI Message API 提供了支援多模態 LLM 所需的所有抽象。

`UserMessage` 的 `content` 欄位主要用於文字輸入,而可選的 `media` 欄位允許新增一種或多種不同模態的額外內容,如影像、音訊和影片。`MimeType` 指定模態型別。根據所使用的 LLM,`Media` 資料欄位可以是原始媒體內容(作為 `Resource` 物件)或內容的 `URI`。
`media` 欄位目前僅適用於使用者輸入訊息(例如 `UserMessage`)。它對於系統訊息不具有意義。包含 LLM 響應的 `AssistantMessage` 僅提供文字內容。要生成非文字媒體輸出,您應該使用專用的單一模態模型之一。* |
例如,我們可以將以下圖片(`multimodal.test.png`)作為輸入,並要求 LLM 解釋它所看到的內容。

對於大多數多模態 LLM,Spring AI 程式碼看起來像這樣
var imageResource = new ClassPathResource("/multimodal.test.png");
var userMessage = new UserMessage(
"Explain what do you see in this picture?", // content
new Media(MimeTypeUtils.IMAGE_PNG, this.imageResource)); // media
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 為以下聊天模型提供多模態支援