当前位置: 首页 > news >正文

LangChain4J-(4)-多模态视觉理解

多模态视觉理解指的是从视觉与其他多种不同模态,像文本、音频等的数据中提取并融合信息,进而更全面、深入地理解数据含义的技术。

LangChain4j可接入多种支持多模态视觉理解的大模型,以完成图像描述、视觉问答等基于图像内容理解分析的任务。

一、支持多模态的模型

  • DashScope 多模态模型:阿里达摩院 DashScope 的多模态能力已在 LangChain4j 中获得内置支持。利用它可完成多样的图像理解任务,像是识别图片中的猫咪品种,分析 UI 截图能够进行的操作,解读流程图核心逻辑等。可选模型含 qwen-vl、qwen-vl-plus 等,后者更适配流程图、漫画分析之类的复杂视觉推理任务。

  • 智谱清言多模态模型:LangChain4j 集成了智谱清言的能力,图像识别任务运用 ZhipuAiChatModel 对象发送消息,在 UserMessage 里指定待处理图像与对应文字任务描述即可。若为图像生成任务,则需采用 ZhipuAiImageModel 对象。

二、撸代码-图像理解

step1

准备一张图片,让大模型去理解,笔者在同花顺截取了一张图;

step2

选一个能做图像理解的大模型,笔者选择的是qwen-vl-max

step3

在笔者之前的工程中修改LLMConfig

package com.xxx.demo.config;import dev.langchain4j.model.chat.ChatModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.util.List;@Configuration
public class LLMConfig {@Bean(name = "qwen")public ChatModel chatModelQwen(){return OpenAiChatModel.builder().apiKey(System.getenv("aliqwen-apikey")).modelName("qwen-vl-max").baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1").build();}
}

step4

将图片发送到大模型并接收结果

按以下思路实现:

  • 图片转码:通过Base64编码将图片转化成字符串;

  • 提示词指定:结合ImageContent和TextContent一起发送到模型进行处理

  • API调用:使用OpenAiChatModel来构建请求,并通过chat()方法调用模型。请求内容包括文本提示和图片,模型根据输入返回分析结果。

  • 解析与输出:从ChatResponse中获取AI大模型的回复,打印处理后的结果。

package com.xxx.demo.controller;import dev.langchain4j.data.message.AiMessage;
import dev.langchain4j.data.message.ImageContent;
import dev.langchain4j.data.message.TextContent;
import dev.langchain4j.data.message.UserMessage;
import dev.langchain4j.model.chat.ChatModel;
import dev.langchain4j.model.chat.response.ChatResponse;
import dev.langchain4j.model.output.Response;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.Resource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.io.IOException;
import java.util.Base64;@RestController
public class Image2ChatController {@Autowiredprivate ChatModel chatModel;@Value("classpath:image/jieguo.png")private Resource resource;/*** @Description: 通过Base64编码将图片转化为字符串,结合ImageContent和TextContent* 一起发送到模型进行处理。* @Auther: zzyybs@126.com*测试地址:http://localhost:9006/image/call*/@GetMapping(value = "/image/call")public String readImageContent() throws IOException{byte[] byteArray = resource.getContentAsByteArray();String base64Data = Base64.getEncoder().encodeToString(byteArray);UserMessage userMessage = UserMessage.from(TextContent.from("从以下图片中获取股价走势"),ImageContent.from(base64Data,"image/jpg"));ChatResponse chatResponse = chatModel.chat(userMessage);String result = chatResponse.aiMessage().text();System.out.println(result);return result;}
}

step5

查看结果

三、撸代码-文生图

文生图顾名思义就是给模型一句话生成图片。

step1

选择一个合适的模型,这次我们选择wanx2.1-t2i-turbo

step2

在我们从第一张开始构建的父工程pom中添加依赖

        <!--langchain4j-community 引入阿里云百炼平台依赖管理清单--><langchain4j-community.version>1.0.1-beta6</langchain4j-community.version>         <!--引入阿里云百炼平台依赖管理清单https://docs.langchain4j.dev/integrations/language-models/dashscope--><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-community-bom</artifactId><version>${langchain4j-community.version}</version><type>pom</type><scope>import</scope></dependency>

step3

在实现文生图的子工程的pom中添加依赖

        <!--DashScope (Qwen)接入阿里云百炼平台https://docs.langchain4j.dev/integrations/language-models/dashscope--><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-community-dashscope-spring-boot-starter</artifactId></dependency>

step4

修改LLMConfig,添加文生图的调用

    /*** @Description: 测试通义万象来实现图片生成,* 官网说明:https://help.aliyun.com/zh/model-studio/text-to-image**/    
public WanxImageModel wanxImageModel(){return WanxImageModel.builder().apiKey(System.getenv("aliqwen-apikey")).modelName("wanx2.1-t2i-turbo") //图片生成 https://help.aliyun.com/zh/model-studio/text-to-image.build();}

step5

写一个controller试试效果

package com.xxx.demo.controller;import com.alibaba.dashscope.aigc.imagesynthesis.ImageSynthesis;
import com.alibaba.dashscope.aigc.imagesynthesis.ImageSynthesisParam;
import com.alibaba.dashscope.aigc.imagesynthesis.ImageSynthesisResult;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.utils.JsonUtils;
import dev.langchain4j.community.model.dashscope.WanxImageModel;
import dev.langchain4j.data.image.Image;
import dev.langchain4j.model.output.Response;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.io.IOException;@RestController
public class WanxImageModelController {@Autowiredprivate WanxImageModel wanxImageModel;// http://localhost:9006/image/create2@GetMapping(value = "/image/create2")public String createImageContent2() throws IOException{System.out.println(wanxImageModel);Response<Image> imageResponse = wanxImageModel.generate("美女");System.out.println(imageResponse.content().url());return imageResponse.content().url().toString();}@GetMapping(value = "/image/create3")public String createImageContent3() throws IOException{String prompt = "影子飒爽的短发美女,中国古典风格,近景";ImageSynthesisParam param =ImageSynthesisParam.builder().apiKey(System.getenv("aliqwen-apikey")).model(ImageSynthesis.Models.WANX_V1).prompt(prompt).style("<watercolor>").n(1).size("1024*1024").build();ImageSynthesis imageSynthesis = new ImageSynthesis();ImageSynthesisResult result = null;try {System.out.println("---sync call, please wait a moment----");result = imageSynthesis.call(param);} catch (ApiException | NoApiKeyException e){throw new RuntimeException(e.getMessage());}System.out.println(JsonUtils.toJson(result));return JsonUtils.toJson(result);}
}

step6

打开图片,试试效果。

http://www.dtcms.com/a/366735.html

相关文章:

  • 少儿编程C++快速教程之——2. 字符串处理
  • SMARTGRAPHQA —— 基于多模态大模型的PDF 转 Markdown方法和基于大模型格式校正方法
  • Unity之安装教学
  • GcWord V8.2 新版本:TOA/TA字段增强、模板标签管理与PDF导出优化
  • 无需任何软件禁用 10 年 windows 更新
  • ArcGIS答疑-如何消除两张栅格图片中间的黑缝
  • 《D (R,O) Grasp:跨机械手灵巧抓取的机器人 - 物体交互统一表示》论文解读
  • 零售消费企业的数字化增长实践,2025新版下载
  • 三目摄像头 是一种配备三个独立摄像头模块的视觉系统
  • 苍穹外卖Day9 | 用户端、管理端接口功能开发、百度地图解析配送范围
  • 算法之二叉树
  • 不用服务器也能监控网络:MyIP+cpolar让中小企业告别昂贵方案
  • Wisdom SSH 是一款集成了强大 AI 助手功能的 SSH 工具,助你高效管理服务器。
  • 以OWTB为核心的三方仓运配一体化平台架构设计文档V0.1
  • 【软件测试】第1章 认识测试
  • Qt实现2048小游戏:看看AI如何评估棋盘策略实现“人机合一
  • OPENCV复习第二期
  • .NET GcPDF V8.2 新版本:人工智能 PDF 处理
  • Lucene 8.7.0 版本的索引文件格式
  • 学习资料1(粗略版)
  • android View详解—自定义ViewGroup,流式布局
  • Android 项目:画图白板APP开发(三)——笔锋(多 Path 叠加)
  • MySQL主从复制之进阶延时同步、GTID复制、半同步复制完整实验流程
  • Html重绘和重排
  • 25高教社杯数模国赛【C题国一学长思路+问题分析】
  • 观测云产品更新 | LLM 监测、查看器、事件中心、监控等
  • void*指针类型转换笔记
  • SpringBoot中 Gzip 压缩的两种开启方式:GeoJSON 瘦身实战
  • k8s基础(未完待续)
  • 拜占庭攻击与投毒攻击