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

相关推荐
圆山猫6 小时前
[Virtualization](四):Linux KVM/RISC-V 的 vCPU 运行路径
java·linux·risc-v
城管不管7 小时前
ReAct、Plan-and-Execute、Reflection 三大智能 Agent 范式核心区别
java·人工智能·算法·spring·ai·动态规划
IT小白杨7 小时前
从环境制备到自动化工作流:多账号运营的工程化架构拆解
java·经验分享·自动化·安全架构·指纹浏览器
豆瓣鸡7 小时前
算法日记 - Day3
java·开发语言·算法
萧瑟余晖8 小时前
Java深入解析篇九之NIO详解
java·网络·nio
The Chosen One9858 小时前
高进度算法模板速记(待完善)
java·前端·算法
极光代码工作室10 小时前
基于SpringBoot的课程预约系统
java·springboot·web开发·后端开发
Leighteen11 小时前
`try-finally` 里的 `return`:为什么 `finally` 会悄悄改掉返回值、吞掉异常
java·开发语言
名字还没想好☜11 小时前
Go 的 time.After 在 select 循环里内存泄漏:定时器堆积原理与 timer.Reset 正确姿势
java·数据库·golang·go·goroutine
圆山猫12 小时前
[Virtualization](三):RISC-V H-extension 与 Guest 执行模式
android·java·risc-v