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

Spring AI Multimodality

多模态 API
“一切天然相关的事物都应结合起来教授”——约翰·阿摩司·夸美纽斯,《世界图解》,1658年

人类同时通过多种数据输入模式处理知识。我们的学习方式、我们的经历都是多模态的。我们不仅仅有视觉、仅仅有音频或仅仅有文本。

与这些原则相反,机器学习往往侧重于针对单一模态进行特化的专用模型。例如,我们开发了用于文本转语音或语音转文本等任务的音频模型,以及用于目标检测和分类等任务的计算机视觉模型。

然而,新一波多模态大语言模型开始涌现。例如,OpenAI 的 GPT、Google 的 Gemini、Anthropic 的 Claude,以及开源方案 Llama、LLaVA 和 BakLLaVA,它们能够接受多种输入,包括文本、图像、音频和视频,并通过整合这些输入来生成文本响应。

多模态大语言模型(LLM)特性使模型能够结合图像、音频或视频等其他模态来处理和生成文本。
Spring AI 多模态
多模态指的是模型能够同时理解并处理来自各种来源的信息的能力,这些来源包括文本、图像、音频和其他数据格式。

Spring AI 的 Message API 提供了支持多模态 LLM 所需的全部抽象。

Spring AI Message API
UserMessagecontent字段主要用于文本输入,而可选的media字段则允许添加一个或多个其他模态的附加内容,例如图像、音频和视频。MimeType用于指定模态类型。根据所使用的 LLM,Media的数据字段既可以是作为Resource对象的原始媒体内容,也可以是内容的 URI。

目前,media字段仅适用于用户输入消息(例如UserMessage),对于系统消息没有意义。包含 LLM 响应的AssistantMessage仅提供文本内容。要生成非文本媒体输出,应使用专用的单模态模型之一。*

例如,我们可以将以下图片(multimodal.test.png)作为输入,并要求 LLM 解释它所看到的内容。

多模态测试图像
对于大多数多模态 LLM,Spring AI 的代码大致如下:

varimageResource=newClassPathResource("/multimodal.test.png");varuserMessage=UserMessage.builder().text("解释一下你在这张图片中看到了什么?")// content.media(newMedia(MimeTypeUtils.IMAGE_PNG,this.imageResource))// media.build();ChatResponseresponse=chatModel.call(newPrompt(this.userMessage));

或者使用流畅的 ChatClient API:

Stringresponse=ChatClient.create(chatModel).prompt().user(u->u.text("解释一下你在这张图片中看到了什么?").media(MimeTypeUtils.IMAGE_PNG,newClassPathResource("/multimodal.test.png"))).call().content();

并产生类似这样的响应:

这是一张水果碗的图片,设计简约。碗由金属制成,带有弯曲的金属丝边缘,构成开放式结构,使水果从各个角度都可见。碗里有两根黄香蕉,放在一个看起来像是红苹果的上面。香蕉略微过熟,果皮上有棕色斑点。碗顶部有一个金属环,很可能用作提手。碗被放置在一个平坦的表面上,背景为中性色,可以清晰地看到里面的水果。

Spring AI 为以下聊天模型提供了多模态支持:

  • Anthropic Claude
  • AWS Bedrock Converse
  • Mistral AI(例如 Mistral Pixtral 模型)
  • Ollama(例如 LLaVA、BakLLaVA、Llama 模型)
  • OpenAI(例如 GPT 模型)
  • Google Gemini
http://www.jsqmd.com/news/1083134/

相关文章:

  • 地磁传感技术在智能交通中的创新应用与挑战
  • Linux命令-pwunconv(从影子密码返回传统密码)
  • 3分钟极速安装:Windows系统完美连接苹果设备的终极指南
  • 登顶顶会|BlockSec 联合研究成果获 SIGMETRICS 2026 最佳论文 Runner-up
  • 【异常】执行脚本提示 `uvx` 命令未找到的原因与解决方案
  • 2026年AI大模型API加速站全维度测评
  • 印度行情数据API接入实战:Nifty 50指数WebSocket推送与异常处理
  • 从零掌握Locust:Python代码驱动的分布式负载测试实战
  • Proxmark3GUI:RFID卡片读写图形化终极指南,3分钟从新手到专家
  • Skydive安全加固实战:RBAC、TLS与访问控制最佳实践
  • 2025年网盘直链下载工具完整指南:九大平台全兼容解决方案
  • 3分钟彻底清理Windows“此电脑“顽固图标:MyComputerManager终极解决方案
  • 人形机器人最难的不是走路,而是手脚并用, TeleAI提出OASIS实现仿真数据和模型闭环
  • 3分钟终极指南:免费解锁VMware的macOS隐藏功能
  • 2026年,人类文明的“操作系统“该升级了——一个中国学者,用14年做了一件事
  • 数据垃圾,正在悄悄毁掉很多企业的AI计划
  • 工业控制中的5V转±12V电源与PWM继电器集成设计
  • Chatbox终极指南:3步安装配置,打造你的桌面AI助手
  • 计算机毕业设计之《大美河山旅游》网站的设计与实现
  • Mac NTFS读写难题终结者:Nigate免费工具完全指南
  • VBA代码版本控制革命:VbaDeveloper让Excel开发更高效专业
  • 3步搭建开源游戏串流服务器:Sunshine让你的游戏无处不在
  • 海康威视安防平台前台RCE漏洞深度剖析与防御实践
  • 鸿蒙应用开发:Stack堆叠组件实战——实现微信消息角标效果
  • Flowise低代码搭建CSV数据问答AI代理实战
  • AirtestIDE 5分钟搞定Web自动化:图形化低代码测试实战与Chrome配置详解
  • Metasploit渗透测试框架:从核心原理到实战演练
  • 覆盖图构造:将自由积子群嵌入可视化图的算法与实践
  • N_m3u8DL-RE:跨平台流媒体下载终极指南,轻松搞定DASH/HLS/MSS
  • 终极VBA开发者指南:如何用VbaDeveloper实现Excel代码的专业版本控制