首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >多模态开发踩坑实录

多模态开发踩坑实录

作者头像
程序员NEO
发布2026-04-29 19:27:38
发布2026-04-29 19:27:38
1250
举报
你是不是也遇到这种情况:代码写完了、跑起来也没报错,但模型就是“不看图”?别急,这事儿很常见——多模态开发不难,难在模型是否真支持多模态。本文用最简单的方式,带你把“文字+图片”的多模态对话跑起来,并告诉你常见坑怎么避。

先把小坑填上: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 的方法:

代码语言:javascript
复制
public String chatWithMessage(UserMessage userMessage) {
    ChatResponse chatResponse = qwenChatModel
            .chat(userMessage);

    AiMessage aiMessage = chatResponse.aiMessage();
    log.info("AI 输出:{}", aiMessage.toString());
    return aiMessage.text();
}

然后写个单测,发一张图片进去:

代码语言:javascript
复制
@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 跑起来,再换成具备图像理解能力的模型做实测。

如果这篇文章帮到了你,不妨点个分享给同样需要的朋友吧! 你的每一次支持,都是我持续创作的动力!💪

往期推荐:

序号

文章标题

链接

1

MCP协议爆火揭秘

查看详情

2

轻松配置Cursor玩转MCP

查看详情

3

Browser-Tool 前端开发神器

查看详情

4

AI编码焕新:用Context7

查看详情

5

NotebookLM:靠谱知识库

查看详情

6

Spring AI 玩转多轮对话

查看详情

7

Cursor生成UI,加一步封神

查看详情

8

神器!免费替代Postman

查看详情

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-10-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员NEO 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 先把小坑填上:Lombok 报错这样一键解决
  • 多模态到底是啥?为什么重要
  • LangChain4j 支持哪些多模态类型
  • 实战:给对话加一张图,让模型“看图说话”
  • 为什么没生效?关键原因在“模型不支持”
  • 选型建议:想要“看图”,优先选这些模型
  • 常见坑与避坑清单(强烈建议收藏)
  • 小结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档