LangChain4j 多模态

多模态

简单来说,多模态指的是模型能够同时理解和处理多种不同类型的信息(即"模态")。

比如用户上传一张图片,让大模型解释图片中的内容,这就包含了文本和图片的两种不同的处理能力。

在传统的单模态大模型中:

  • 语言大模型:只能处理文本。你输入文字,它输出文字。它不认识图片,也听不懂音频。
  • 视觉大模型:只能处理图像。它可以识别图片里有什么,但无法和你进行复杂的语言对话。

多模态大模型打破了这种壁垒。它在一个统一的框架下,学习文字、图像、声音、视频等多种数据之间的关系和对应。

在 LangChain4j 中使用多模态模型,核心逻辑非常简单:关键在于选对支持多模态的模型,并通过 UserMessage 将文本和图片等内容一起发给它

文本+图片

java 复制代码
@Configuration
public class LLMConfig {
    @Bean("qwen")
    public ChatModel chatModelQwen() {
        return OpenAiChatModel.builder()
                .apiKey(System.getenv("ALI_QWEN_API_KEY"))
                .modelName("qwen3-vl-plus")
                .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
                .logRequests(true) // request 日志
                .logResponses(true) // response 日志
                .build();
    }
}

ImageController

java 复制代码
@RestController
@RequestMapping("image")
public class ImageController {
    @Resource(name = "qwen")
    private ChatModel chatModelQwen;

    @Value("classpath:static/mysql.png")
    private org.springframework.core.io.Resource resource;

    @GetMapping("/qwen/img1")
    public String img1() {
        try {
            // 将图片转为 Base64 字符串
            byte[] byteArray = resource.getContentAsByteArray();
            String base64 = Base64.getEncoder().encodeToString(byteArray);

            // 构建用户消息
            UserMessage userMessage = UserMessage.from(
                	// 指定提示词
                    TextContent.from("从这张图片中 mysql 事务相关的步骤,请帮我解读这张图要表达的意思。"),
                	// 图片资源
                    ImageContent.from(base64, "image/png")
            );

            // 调用 API
            ChatResponse response = chatModelQwen.chat(userMessage);

            // 输出
            return response.aiMessage().text();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

与第三方平台集成 ------ 生成图

这里我们集成第三方平台-百炼-通义万相。

java 复制代码
@Configuration
public class LLMConfig {
    ...
    @Bean("wanx")
    public WanxImageModel wanxImageModel() {
        return WanxImageModel.builder()
                .apiKey(System.getenv("ALI_QWEN_API_KEY"))
                .modelName("wanx2.1-t2i-turbo")
                .build();
    }
}

ImageController

java 复制代码
@RestController
@RequestMapping("image")
public class ImageController {
    @Resource(name = "wanx")
    private WanxImageModel wanxImageModel;

    @GetMapping("/wanx/img1")
    public String wanximg1() {
        Response<Image> response = wanxImageModel.generate("可爱的石头");
        String url = response.content().url().toString();
        return String.format("<img src='%s' />", url);
    }

    @GetMapping("/wanx/img2")
    public String wanximg2() {
        String prompt = "青春活力的少年";
        // 图片设置
        ImageSynthesisParam param = ImageSynthesisParam.builder()
                .apiKey(System.getenv("ALI_QWEN_API_KEY"))
                .model(ImageSynthesis.Models.WANX_V1)
                .prompt(prompt)
//                .style("<watercolor>")
                .n(1)
                .size("1024*1024")
                .build();

        try {
            ImageSynthesis imageSynthesis = new ImageSynthesis();
            ImageSynthesisResult result = imageSynthesis.call(param);
            
            return JsonUtils.toJson(result);
        } catch (NoApiKeyException e) {
            throw new RuntimeException(e);
        }
    }
}

优先发在:https://juejin.cn/post/7606224197803737107

相关推荐
mask哥10 小时前
力扣算法java实现汇总整理(上)
java·算法·leetcode
Aaswk12 小时前
Java Lambda 表达式与流处理
java·开发语言·python
是宇写的啊12 小时前
Spring AOP
java·spring
万邦科技Lafite12 小时前
京东item_get接口实战案例:实时商品价格监控全流程解析
java·开发语言·数据库·python·开放api·淘宝开放平台
Mr_pyx13 小时前
Spring AI 入门教程:Java开发者的AI应用捷径
java·人工智能·spring
Zephyr_014 小时前
Leedcode算法题
java·算法
苍煜14 小时前
Java开发IO零基础吃透:BIO、NIO、同步异步、阻塞非阻塞
java·python·nio
折哥的程序人生 · 物流技术专研15 小时前
Java面试85题图解版(一):基础核心篇
java·开发语言·后端·面试
AllData公司负责人15 小时前
通过Postgresql同步到Doris,全视角演示AllData数据中台核心功能效果,涵盖:数据入湖仓,数据同步,数据处理,数据服务,BI可视化驾驶舱
java·大数据·数据库·数据仓库·人工智能·python·postgresql
Hello.Reader15 小时前
算法基础(十)——分治思想把大问题拆成小问题
java·开发语言·算法