多模態開發踩坑實錄
你是不是也遇到這種情況:代碼寫完了、跑起來也沒報錯,但模型就是“不看圖”?別急,這事兒很常見——多模態開發不難,難在模型是否真支持多模態。本文用最簡單的方式,帶你把“文字+圖片”的多模態對話跑起來,并告訴你常見坑怎么避。
先把小坑填上:Lombok 報錯這樣一鍵解決
如果你在跑 LangChain4j 的對話 Demo 時,控制臺提示“找不到符號”的 Lombok 錯誤,通常是 IDEA 注解處理器沒配好。
圖片
上圖:典型的 Lombok 報錯提示
解決方法:
? 打開 IDEA 設置 → Annotation Processors
? 勾選 Enable annotation processing
? 改為“使用項目中的 Lombok”
上圖:IDEA 注解處理器正確姿勢
多模態到底是啥?為什么重要
? 多模態=同時處理文字、圖片、音頻、視頻、PDF 等多種數據。
? 典型場景:看圖回答、讀簡歷提要、解析表格截圖、對 PDF 提問、聽音頻寫總結等。
上圖:多模態能理解多種輸入并輸出文本/圖片等
LangChain4j 支持哪些多模態類型
在官方文檔的多模態章節可以看到支持情況:
? 用戶消息可攜帶文本、圖片、音視頻、PDF 等多種內容
? 能不能用,關鍵看“底層模型是否支持”
? 文檔地址(以實測為準):https://docs.langchain4j.info/tutorials/chat-and-language-models#%E5%A4%9A%E6%A8%A1%E6%80%81
上圖:LangChain4j 多模態類型示意
實戰:給對話加一張圖,讓模型“看圖說話”
我們先寫一個能接收自定義 UserMessage 的方法:
public String chatWithMessage(UserMessage userMessage) {
ChatResponse chatResponse = qwenChatModel
.chat(userMessage);
AiMessage aiMessage = chatResponse.aiMessage();
log.info("AI 輸出:{}", aiMessage.toString());
return aiMessage.text();
}然后寫個單測,發一張圖片進去:
@Test
void chatWithMessage() {
UserMessage userMessage = UserMessage
.from(
TextContent.from("描述圖片"),
ImageContent.from("https://it666.chat/images/avatar.jpg")
);
aiCodeHelper.chatWithMessage(userMessage);
}運行效果如下:
上圖:用圖片做輸入的單測結果
為什么沒生效?關鍵原因在“模型不支持”
如果你用的是 qwen-max,可能會發現:它并不能直接看圖。這不是代碼問題,而是“模型能力沒開多模態”。
這點非常關鍵:
? 框架會幫你把文本+圖片打包發出去
? 但如果模型不支持圖片輸入,它就看不到圖,回答只能按文本來
可以參考 LangChain4j 的能力支持表(但務必以實際測試為準):https://docs.langchain4j.dev/integrations/language-models/
上圖:不同模型的能力差異很大,需實測
選型建議:想要“看圖”,優先選這些模型
實測優先考慮(不同廠商地域/版本差異較大,需自己驗證):
? OpenAI 家族:gpt-4o / gpt-4o-mini(圖像理解較穩定)
? Azure OpenAI:對應的 4o 系列
? Qwen:Qwen-VL 系列(區分是否開放接口)
? Google:Gemini 1.5 Flash / Pro(區域與配額限制較多)
注意點:
? 先查清楚“是否支持圖像輸入”和“最大圖片尺寸/大小”
? URL 必須可公網訪問,或使用字節流上傳
? SDK/依賴版本需匹配,LangChain4j 要跟后端模型 SDK 對齊
常見坑與避坑清單(強烈建議收藏)
? 模型能力不一致:同一品牌不同型號能力差別大,別想當然。先跑最小可用 Demo。
? 圖片不可訪問:本地路徑/私網地址不行,換公網 URL 或上傳字節流。
? 圖片太大:超限會被靜默壓縮或拒絕,提前做壓縮或限制尺寸。
? 超時/重試:圖片+文本耗時更長,調大超時并添加重試策略。
? 版本兼容:LangChain4j 版本與底層 SDK/依賴要匹配,升級要看 Release Note。
? 日志與可觀測:把請求/響應元數據打印出來(別打全量敏感內容),方便排錯。
小結
? 多模態不難,難在“模型要真支持”。先跑通最小閉環,再談業務場景。
? LangChain4j 已能優雅地傳遞多模態輸入,但要結合“支持圖像的模型”一起用。
? 建議你把本文的 Demo 跑起來,再換成具備圖像理解能力的模型做實測。
































