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

成功解析:

相关推荐
凡人叶枫2 小时前
Effective C++ 条款23:宁以 non-member、non-friend 替换 member 函数
linux·开发语言·c++·嵌入式开发
艳阳天_.2 小时前
星瀚弹框页面实现
java·前端·python
张忠琳2 小时前
【Go 1.26.4】Golang Channel 深度解析
开发语言·后端·golang
盈建云系统2 小时前
B2B产品展示网站怎么做?从产品目录到询盘表单,企业获客页面搭建流程
开发语言·网站搭建·开发网站
不会C语言的男孩2 小时前
Linux 系统编程 · 第 4 章:文件属性与元数据
linux·c语言·开发语言
kernelcraft2 小时前
Boto3:Python 操作 AWS 的官方 SDK
开发语言·python·其他·aws
D3bugRealm2 小时前
cryptography:Python 开发者的加密标准库
开发语言·python·其他
Rain5092 小时前
2.1 Nest.js 项目初始化与模块化架构
开发语言·前端·javascript·后端·架构·数据分析·node.js
小熊美家熊猫系统3 小时前
电子合同技术实现与合规实践
java·开发语言·分布式