LangChain4j 开发Java Agent智能体- 多模态支持

大家好,我是Java1234_小锋老师,最近更新《2027版本 LangChain4j 开发Java Agent 智能体 视频教程》专辑,感谢大家支持。

本课程主要介绍和讲解 LangChain4j 简介,阿里云百炼大模型 平台接入,Ollama简介以及安装和使用,HelloWorld 实现,日志配置,集成SpringBoot,Ai Service 使用,对话与提示词工程(Prompt),结构化输出,会话记忆,工具调用(Function Calling),嵌入模型 与向量数据库,RAG(检索增强生成),MCP(模型上下文协议),多模态支持

视频教程+课件+源码打包下载:

链接:https://pan.baidu.com/s/1o-zRfndo1HHrS_uFroOiCw?pwd=1234

提取码:0000

LangChain4j 开发Java Agent智能体- 多模态支持

一,什么是多模态

多模态(Multimodal) 指大模型不仅能处理文本,还能理解或生成其他类型的媒体内容。

常见场景举例:

场景 输入 模型输出
图片描述 一张猫的照片 +「请描述这张图」 自然语言描述
票据识别 发票截图 +「提取金额和日期」 结构化文字
文档问答 PDF 论文 +「总结核心观点」 摘要
视频理解 短视频 +「列出关键章节」 章节列表

在 LangChain4j 中,多模态内容通过 Content 接口的不同实现类来表达,最终组装进 UserMessage 发送给支持该能力的 ChatModel

二,LangChain4j里支持的多模态核心类

复制代码
UserMessage
  └── List<Content>
        ├── TextContent      文本
        ├── ImageContent     图片(URL 或 Base64)
        ├── AudioContent     音频
        ├── VideoContent     视频
        └── PdfFileContent   PDF 文件

对应包路径:

  • dev.langchain4j.data.message.UserMessage
  • dev.langchain4j.data.message.TextContent
  • dev.langchain4j.data.message.ImageContent
  • dev.langchain4j.data.message.AudioContent
  • dev.langchain4j.data.message.VideoContent
  • dev.langchain4j.data.message.PdfFileContent

三,适用模型

LangChain4j 支持多种多模态模型。在选择时,你需要注意模型支持的"模态"(如图像、音频)。常用模型支持情况如下:

模型提供商 (Provider) 支持的多模态输入 (Supported Modalities) 特点描述 (Key Features)
OpenAI (如 GPT-4/GPT-4o) 文本 (Text)、图像 (Image) 技术领先,支持JSON模式等,性能强大。
Google Gemini 文本、图像、音频、视频、PDF (Text, Image, Audio, Video, PDF) 原生多模态,支持文件类型最丰富,适合复杂场景。
DashScope (阿里云) 文本、图像、音频 (Text, Image, Audio) 提供如Qwen-VL等国产模型,对中文场景支持友好。
智谱AI (Zhipu AI) 主要支持图像生成和理解 (Primarily Text and Image) 提供视觉推理模型等,并提供免费模型便于测试。
Anthropic (Claude) 文本 (Text)、图像 (Image) 以强大的推理能力和安全性著称。
Amazon Bedrock 文本、图像、PDF (Text, Image, PDF) 平台服务,适合已在AWS上的用户。
Ollama (本地) 支持文本、图像等 (Supports various local models) 可在本地运行模型,保证数据隐私。

四,具体示例

我们先准备一个图片apple.png:

为了测试方便,我们把图片放target目录下,

新建一个VisionAssistantService

java 复制代码
package com.java1234.service;

import dev.langchain4j.data.message.ImageContent;
import dev.langchain4j.service.SystemMessage;
import dev.langchain4j.service.UserMessage;
import dev.langchain4j.service.spring.AiService;
import dev.langchain4j.service.spring.AiServiceWiringMode;

@AiService(
        wiringMode = AiServiceWiringMode.EXPLICIT, // 手动指定接入模型 手动装配
        chatModel = "openAiChatModel"  // 指定模型
)
public interface VisionAssistantService {

    @SystemMessage("你是图片理解助手。请根据用户提供的图片,用中文准确、简洁地回答用户问题。")
    String analyze(@UserMessage String question, @UserMessage ImageContent image);
}

再新建一个MyVisionController

java 复制代码
package com.java1234.controller;

import com.java1234.service.*;
import dev.langchain4j.data.message.ImageContent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Base64;

@RestController
public class MyVisionController {

    @Autowired
    private VisionAssistantService visionAssistantService;

    @GetMapping("/image")
    public String analyzeApple(
            @RequestParam(defaultValue = "请描述这张图片中的内容") String question) throws Exception {
        Path imagePath = Paths.get("target/apple.png");
        byte[] bytes = Files.readAllBytes(imagePath);
        String base64 = Base64.getEncoder().encodeToString(bytes);
        ImageContent image = ImageContent.from(base64, "image/png");
        return visionAssistantService.analyze(question, image);
    }
}

我们可以浏览器测试下:http://localhost:8080/image

成功解析:

相关推荐
小羊没烦恼!1 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
俊昭喜喜里1 天前
java中的继承和多态的区别
java
小羊没烦恼!1 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
譕痕1 天前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码1 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖1 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时1 天前
01-06-A-JVM排查实战详解
java·jvm
伞伞悦读1 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
vipxieliang1 天前
ValidX 在 DDD 领域驱动设计中的实践
java·spring boot
C语言小火车1 天前
C/C++ 为什么需要编译器?
开发语言·c++