Spring AI 系列之三十 - Spring AI Alibaba-其它模型

之前做個幾個大模型的應用,都是使用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;從而提高開…