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

成功解析:

相关推荐
VortMall2 分钟前
全维度打磨细节体验,赋能商城稳定有序运营|VortMall 微服务商城 v1.3.11 版本发布
java·微服务·云原生·架构·商城系统·开源商城·vortmall
Tirzano5 分钟前
java 精简使用ffmpeg
java·开发语言·ffmpeg
唐青枫10 分钟前
Java Jersey 实战指南:用 JAX-RS 注解写清晰的 REST API
java
农村小镇哥13 分钟前
python操作配置文件ini
开发语言·python
一只小小Java1 小时前
Naocs本地部署&安装3.2.3+Spring boot 3.2.0
java·spring boot·后端·nacos
JL151 小时前
Spring Boot vs Gin:Java 人搭第一个 Go REST API
java·spring boot·gin
神明不懂浪漫2 小时前
【第七章】Java中的常用类
java·开发语言·前端·经验分享·笔记
程序喵大人10 小时前
【C++进阶】STL容器与迭代器 - 01 STL 容器先解决元素放在哪里
开发语言·c++·stl
cui_ruicheng10 小时前
Python从入门到实战(十六):多进程编程
开发语言·python
Jelena1577958579211 小时前
电商运营分析数据比价接口实战:多平台价格监控与智能决策系统
java·大数据·数据库