之前做个几个大模型的应用,都是使用Python语言,后来有一个项目使用了Java,并使用了Spring AI框架。随着Spring AI不断地完善,最近它发布了1.0正式版,意味着它已经能很好的作为企业级生产环境的使用。对于Java开发者来说真是一个福音,其功能已经能满足基于大模型开发企业级应用。借着这次机会,给大家分享一下Spring AI框架。

注意由于框架不同版本改造会有些使用的不同,因此本次系列中使用基本框架是 Spring AI-1.0.0,JDK版本使用的是19,Spring-AI-Alibaba-1.0.0.3-SNAPSHOT
代码参考: https://github.com/forever1986/springai-study

目录

  • 1 embedding模型
    • 1.1 说明
    • 1.1 代码演示
  • 2 ImageModel
    • 2.1 说明
    • 2.2 代码演示
  • 3 语音合成模型
    • 3.1 说明
    • 3.2 代码演示
  • 4 其它模型

在上一章中通过Spring AI Alibaba框架,可以引入更多的聊天记忆存储类型。这一章将针对除了聊天模型之外的模型进行演示

代码参考lesson24子模块的ali-model子模块

前期准备:

1)在lesson24子模块下,新建ali-model子模块,其pom引入如下:

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter-dashscope</artifactId></dependency>
</dependencies>

2)新建application.properties配置文件

spring.ai.dashscope.api-key=你的阿里百炼API KEY

1 embedding模型

1.1 说明

向量化模型能够将文本、图像、视频等数据转换为数学空间中的向量。通过计算向量之间的距离或夹角,可以量化数据的相似度,从而作用于精准搜索、智能推荐、自动分类及异常检测等任务。之前在《系列之二十一 - EmbeddingModel》中讲过。这里通过Spring AI Alibaba框架,可以使用阿里云上的很多个embedding模型。具体可以参考《官方文档》,除了阿里本身的模型之外,还支持多模态的embedding模型:
在这里插入图片描述

1.1 代码演示

代码示例

import org.springframework.ai.embedding.EmbeddingModel;
import org.springframework.ai.embedding.EmbeddingResponse;
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.util.List;
import java.util.Map;@RestController
public class EmbeddingModelController {private final EmbeddingModel embeddingModel;@Autowiredpublic EmbeddingModelController(EmbeddingModel embeddingModel) {this.embeddingModel = embeddingModel;}@GetMapping("/ai/embedding")public Map embed(@RequestParam(value = "message", defaultValue = "测试embedding") String message) {EmbeddingResponse embeddingResponse = this.embeddingModel.embedForResponse(List.of(message));return Map.of("embedding", embeddingResponse);}
}

演示效果

http://localhost:8080/ai/embedding?message=测试embedding

在这里插入图片描述

2 ImageModel

2.1 说明

通义万相-文生图模型支持通过一句话生成图像,分为V2版和V1版。全面升级的文生图V2版模型提升了语义理解能力,通过预置智能改写功能帮助您快速上手图像创作。此外,V2版支持任意分辨率,输出图像最高可达200万像素。推荐优先使用文生图V2版模型。可以其《官方文档》

除了阿里的通义万相,也支持Stable Diffusion、FLUX等第三方模型

在这里插入图片描述

2.2 代码演示

代码示例

import com.alibaba.cloud.ai.dashscope.image.DashScopeImageModel;
import com.alibaba.cloud.ai.dashscope.image.DashScopeImageOptions;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.ai.image.ImageMessage;
import org.springframework.ai.image.ImageOptions;
import org.springframework.ai.image.ImagePrompt;
import org.springframework.ai.image.ImageResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.net.URL;
import java.util.List;@RestController
public class ImageModelController {private final DashScopeImageModel dashScopeImageModel;@Autowiredpublic ImageModelController(DashScopeImageModel dashScopeImageModel) {this.dashScopeImageModel = dashScopeImageModel;}@GetMapping("/ai/imagegenerate")public void generate(@RequestParam(value = "message", defaultValue = "生成一只老虎!") String message, HttpServletResponse response) throws IOException {ImageResponse image = this.dashScopeImageModel.call(new ImagePrompt(new ImageMessage(message), DashScopeImageOptions.builder().build()));// 返回的URLString url = image.getResult().getOutput().getUrl();// 将URL转为Stream输出到HttpServletResponseURL imageURL = URI.create(url).toURL();InputStream inputStream = imageURL.openStream();response.setHeader("Content-Type", MediaType.IMAGE_PNG_VALUE);response.getOutputStream().write(inputStream.readAllBytes());response.getOutputStream().flush();}}

演示效果

http://localhost:8080/ai/imagegenerate

在这里插入图片描述

3 语音合成模型

3.1 说明

Qwen-TTS 系列是通义千问系列的语音合成模型,支持输入中文、英文、中英混合的文本,并流式输出音频。除了Qwen系列,还支持,详情见《官方文档》

3.2 代码演示

代码示例

import com.alibaba.cloud.ai.dashscope.api.DashScopeSpeechSynthesisApi;
import com.alibaba.cloud.ai.dashscope.audio.DashScopeSpeechSynthesisModel;
import com.alibaba.cloud.ai.dashscope.audio.DashScopeSpeechSynthesisOptions;
import com.alibaba.cloud.ai.dashscope.audio.synthesis.SpeechSynthesisMessage;
import com.alibaba.cloud.ai.dashscope.audio.synthesis.SpeechSynthesisPrompt;
import com.alibaba.cloud.ai.dashscope.audio.synthesis.SpeechSynthesisResponse;
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.io.File;
import java.io.FileOutputStream;
import java.io.IOException;@RestController
public class AudioSpeechController {private final DashScopeSpeechSynthesisModel dashScopeSpeechSynthesisModel;@Autowiredpublic AudioSpeechController(DashScopeSpeechSynthesisModel dashScopeSpeechSynthesisModel) {this.dashScopeSpeechSynthesisModel = dashScopeSpeechSynthesisModel;}@GetMapping("/ai/audio")public void generate(@RequestParam(value = "message", defaultValue = "你怎么这样凭空污人清白……窃书不能算偷……窃书!……读书人的事,能算偷么?") String message) {DashScopeSpeechSynthesisOptions speechOptions = DashScopeSpeechSynthesisOptions.builder().model("cosyvoice-v2") // 使用扣子模型.voice("longtao_v2") // 使用粤语语音.responseFormat(DashScopeSpeechSynthesisApi.ResponseFormat.WAV) // WAV格式.speed(1.0f) // 正常语速.build();SpeechSynthesisPrompt speechPrompt = new SpeechSynthesisPrompt(new SpeechSynthesisMessage(message), speechOptions);SpeechSynthesisResponse speechResponse = dashScopeSpeechSynthesisModel.call(speechPrompt);File file = new File("lesson24/ali-model/ali-output.wav");try (FileOutputStream fileOutputStream = new FileOutputStream(file)){fileOutputStream.write(speechResponse.getResult().getOutput().getAudio().array());fileOutputStream.flush();}catch (IOException e){// do something}}
}

演示效果

http://localhost:8080/ai/audio

在这里插入图片描述

4 其它模型

在阿里的百炼平台上,还有很多其它模型,比如语音合成与识别、视频编辑与生成、特定行业模型等。这里就不一一列举了。之所以写这一章,是为了让用户能够知道使用Spring AI Alibaba框架,基本上和Spring AI用法一致,而且很容易就能集成百炼平台的各类模型。

结语:通过本章演示不同类型大模型的使用,相信用户现在可以知道Spring AI Alibaba的价值。下一章继续讲解Spring AI Alibaba基于企业级应用实践的一个扩展点:基于Nacos的MCP

Spring AI系列上一章:《Spring AI 系列之二十九 - Spring AI Alibaba-聊天记忆》

Spring AI系列下一章:《Spring AI 系列之三十一 - Spring AI Alibaba-基于Nacos的MCP》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/93953.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/93953.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/93953.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Flutter3.8x】flutter从入门到实战基础教程(五):Material Icons图标的使用

flutter给我们内置准备了很多图标&#xff0c;这些图标可以使我们在没有设计师的前提下&#xff0c;也能做出自己满意的app icon网站 https://material.io/tools/icons/进入网站后&#xff0c;点击我们需要的图标&#xff0c;然后滑动找到flutter的tab选项&#xff0c;就可以看…

算法训练营day38 动态规划⑥ 322. 零钱兑换、279.完全平方数、139.单词拆分、多重背包

动态规划的第六篇&#xff01;背包问题总结篇&#xff01; 322. 零钱兑换 题目中说每种硬币的数量是无限的&#xff0c;可以看出是典型的完全背包问题。但是如何找最小的“组合”呢&#xff1f;&#xff08;通过dp数组的不同定义 与 递推公式&#xff09; 确定dp数组以及下标的…

vue+element 实现下拉框共享options

背景 用户的需求总是多样的&#xff0c;这不用户想做个下拉连选&#xff0c;每选一个基金&#xff0c;下方表格多一行&#xff0c;选择对应的重要性&#xff0c;任务&#xff1b;问题 其他都好弄&#xff0c;任务是远程搜索&#xff0c;选择人的单选下拉&#xff0c;如果每个下…

centos服务器安装minio

1.创建目录和下载文件 #创建相关文件夹 mkdir -p /home/minio mkdir -p /home/minio/bin mkdir -p /home/minio/data#进入上面创建的bin目录下 cd /home/minio/bin#下载minio&#xff08;最新版minio无法通过页面的控制台配置accesskey建议选择2024年的版本操作&#xff09; ht…

【云故事探索】NO.16:阿里云弹性计算加速精准学 AI 教育普惠落地

智能精准学寒雪老师 X 阿里云弹性计算&#xff1a;以坚实算力底座&#xff0c;实现 AI 一对一教育普惠的愿景 【导语】 当全球首个 K12 教育超级智能体“寒雪老师”在深夜为万千学子答疑解惑&#xff0c;支撑其流畅互动的&#xff0c;是阿里云弹性计算 15 年淬炼的坚实算力底座…

forge篇——配置

从这篇文章开始,我们开始研究forge代码,以下是forge源代码和代码解析 ForgeConfigSpec 类详细解析 ForgeConfigSpec 是 Minecraft Forge 模组开发中的核心配置类,基于 NightConfig 库实现,提供了类型安全、验证和自动纠正功能。以下是关键部分的详细解释: 1. 类定义与基…

全新发布|知影-API风险监测系统V3.3,AI赋能定义数据接口安全新坐标

7月31日&#xff0c;全知科技「知影-API风险监测系统V3.3」版本正式上线。在版本发布直播中&#xff0c;全知科技资深产品经理裴向南系统讲解了V3.3版本的核心亮点、能力升级与后续产品规划方向。作为全知科技自主研发的核心产品&#xff0c;「知影-API风险监测系统」自2017年起…

动作捕捉技术重塑具身智能开发:高效训练与精准控制的新范式

具身智能&#xff08;Embodied AI&#xff09;是指智能体通过与环境交互实现感知、学习和决策的能力&#xff0c;其核心在于模拟人类或生物的形态与行为。具身智能的发展意义在于突破传统AI的局限性&#xff0c;使机器能够适应复杂多变的真实场景&#xff0c;从而在工业制造、医…

【Andriod Studio】勾选不了Android SDK,提示unavailable

首先&#xff0c;直接说结论——网络&#xff08;代理&#xff09;有问题 先看第一个文章里面说的&#xff0c;https://blog.csdn.net/weixin_53485880/article/details/128200878 要确定自己没有开启代理&#xff08;就是Set proxy里选cancel&#xff09;&#xff0c;安装SDK…

数据结构与算法——字典(前缀)树的实现

参考视频&#xff1a;左程云--算法讲解044【必备】前缀树原理和代码详解 类实现&#xff1a; class Trie {private:class TrieNode {public:int pass;int end;vector<TrieNode*> nexts;TrieNode(): pass(0), end(0), nexts(26, nullptr) {}};TrieNode* root; // 根指针…

STORM代码阅读笔记

默认的 分辨率是 [160,240] &#xff0c;基于 Transformer 的方法不能做高分辨率。 Dataloader 输入是 带有 pose 信息的 RGB 图像 eval datasets ## 采样帧数目 20 num_max_future_frames int(self.timespan * fps) ## 每次间隔多少个时间 timesteps 取一个context image n…

2025电赛G题-发挥部分-参数自适应FIR滤波器

&#xff08;1&#xff09;测评现场提供由RLC元件&#xff08;各1个&#xff09;组成的“未知模型电路”。 按照图3所示&#xff0c;探究装置连接该电路的输入和输出端口&#xff0c;对该电路进行 自主学习、建模&#xff08;不可借助外部测试设备&#xff09;&#xff0c;2分钟…

Linux基础 -- 内核快速向用户态共享内核变量方案之ctl_table

系统化、可直接上手的 /proc/sys sysctl 接口使用文档。内容涵盖&#xff1a;机制原理、适用场景、ctl_table 字段详解、常用解析器&#xff08;proc_handler&#xff09;完整清单与选型、最小样例到进阶&#xff08;范围校验、毫秒→jiffies、字符串、数组、每网络命名空间&a…

【RH124知识点问答题】第3章 从命令行管理文件

1. 怎么理解“Linux中一切皆文件”&#xff1f;Linux是如何组织文件的&#xff1f;&#xff08;1&#xff09;“Linux中一切皆文件”的理解和文件组织&#xff1a;在Linux中&#xff0c;“一切皆文件”指的是Linux将各种设备、目录、文件等都视为文件对象进行管理。这种统一的文…

练习javaweb+mysql+jsp

只是简单的使用mysql、简单的练习。 有很多待完善的地方&#xff0c;比如list的servlet页面&#xff0c;应该判断有没有用户的。 比如list.jsp 应该循环list而不是写死 index.jsp 样式可以再优化一下的。比如按钮就特丑。 本文展示了一个简单的MySQL数据库操作练习项目&#x…

使用Nginx部署前端项目

使用Nginx部署前端项目 一、总述二、具体步骤 2.1解压2.2将原来的html文件夹的文件删除&#xff0c;将自己的静态资源文件放进去&#xff0c;点击nginx.exe文件启动项目2.3查看进程中是否有ngix的两个进程在浏览器中输入“localhost:端口号”即可访问。 2.4端口被占用情况处理 …

【论文学习】KAG论文翻译

文章目录KAG: Boosting LLMs in Professional Domains via Knowledge Augmented Generation摘要1 引言2 方法论2.1 LLM友好型知识表示2.2 互索引机制2.2.1 语义分块2.2.2 带丰富语境的的信息抽取2.2.3 领域知识注入与约束2.2.4 文本块向量与知识结构的相互索引2.3 逻辑形式求解…

24黑马SpringCloud安装MybatisPlus插件相关问题解决

目录 一、前言 二、菜单栏没有Other 三、Config Database里的dburl需要加上时区等配置 一、前言 在学习24黑马SpringCloud的MybatisPlus-12.拓展功能-代码生成器课程时&#xff0c;发现由于IDEA版本不同以及MybatisPlus版本更新会出现与视频不一致的相关问题&#xff0c;本博…

人工智能赋能聚合物及复合材料模型应用与实践

近年来&#xff0c;生成式人工智能&#xff08;包括大语言模型、分子生成模型等&#xff09;在聚合物及复合材料领域掀起革命性浪潮&#xff0c;其依托数据驱动与机理协同&#xff0c;从海量数据中挖掘构效关系、通过分子结构表示&#xff08;如 SMILES、BigSMILES&#xff09;…

MyBatis-Plus3

一、条件构造器和常用接口 1.wapper介绍 MyBatis-Plus 提供了一套强大的条件构造器&#xff08;Wrapper&#xff09;&#xff0c;用于构建复杂的数据库查询条件。Wrapper 类允许开发者以链式调用的方式构造查询条件&#xff0c;无需编写繁琐的 SQL 语句&#xff0c;从而提高开…