多模態 API
“所有自然連線的事物都應該結合起來教授”——約翰·阿莫斯·誇美紐斯,《感官世界圖》,1658
人類同時透過多種資料輸入模式處理知識。我們學習的方式,我們的經驗都是多模態的。我們不僅僅擁有視覺、聽覺和文字。
與這些原則相反,機器學習通常專注於針對單一模態處理的專用模型。例如,我們開發了用於文字轉語音或語音轉文字等任務的音訊模型,以及用於物件檢測和分類等任務的計算機視覺模型。
然而,新一波多模態大型語言模型開始湧現。例如 OpenAI 的 GPT-4o、Google 的 Vertex AI Gemini 1.5、Anthropic 的 Claude3,以及開源產品 Llama3.2、LLaVA 和 BakLLaVA,它們能夠接受多種輸入,包括文字、影像、音訊和影片,並透過整合這些輸入生成文字響應。
| 多模態大型語言模型(LLM)功能使模型能夠結合其他模態(如影像、音訊或影片)處理和生成文字。 |
Spring AI 多模態
多模態指的是模型同時理解和處理來自各種來源資訊的能力,包括文字、影像、音訊和其他資料格式。
Spring AI 訊息 API 提供了支援多模態 LLM 所需的所有抽象。
UserMessage 的 content 欄位主要用於文字輸入,而可選的 media 欄位允許新增一個或多個不同模態的附加內容,例如影像、音訊和影片。MimeType 指定模態型別。根據所使用的 LLM,Media 資料欄位可以是作為 Resource 物件的原始媒體內容,也可以是內容的 URI。
目前,媒體欄位僅適用於使用者輸入訊息(例如,UserMessage)。它對系統訊息不重要。包含 LLM 響應的 AssistantMessage 僅提供文字內容。要生成非文字媒體輸出,您應該使用專用的、單一模態模型。* |
例如,我們可以將以下圖片(multimodal.test.png)作為輸入,並要求 LLM 解釋它所看到的內容。
對於大多數多模態 LLM,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));
或者使用流暢的 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 為以下聊天模型提供多模態支援