AI框架之Spring AI與Spring Cloud Alibaba AI使用講解

文章目錄

  • 1 AI框架
    • 1.1 Spring AI 簡介
    • 1.2 Spring AI 使用
      • 1.2.1 pom.xml
      • 1.2.2 可實現的功能
    • 1.3 Spring Cloud Alibaba AI
    • 1.4 Spring Cloud Alibaba AI 實踐操作
      • 1.4.1 pom.xml
      • 1.4.2 配置文件
      • 1.4.3 對接文本模型
      • 1.4.4 文生圖模型
      • 1.4.5 語音合成模型

1 AI框架

1.1 Spring AI 簡介

在軟件開發的世界中,Java一直是企業級應用的主力軍。而Spring框架,尤其是Spring Boot,以其生態系統的豐富性,為開發者提供了無與倫比的便利。現在,Spring Boot正邁向一個新的紀元——人工智-能的時代。
Spring AI項目的推出,不僅標志著Spring生態的進一步擴展,也為廣大Java開發者開啟了一個全新的編程領域。

Spring AI 是從著名的 Python 項目LangChain和LlamaIndex中汲取靈感,它不是這些項目的直接移植,它的成立信念是,下一波生成式人工智能應用程序將不僅適用于 Python 開發人員,而且將在許多編程語言中無處不在。

Spring AI功能,可以看Spring推出的官方文檔:https://spring.io/projects/spring-ai
我們可以從Spring AI的官網描述中,總結出Spring AI的幾個核心的關鍵詞:

  • 提供抽象能力
  • 簡化AI應用的開發
  • 模型與向量支持
  • AI集成與自動配置

Spring AI 簡化了我們構建大型復雜的AI應用的過程,當然如果你的項目僅僅是需要調用一個AI接口,那其實直接調用官方SDK反而更方便。

Spring AI提供的功能如下:

  • SQL類過濾器API: 提供類似SQL的元數據過濾器API,實現跨供應商的一致性。
  • Spring Boot集成: 專為Spring Boot設計的自動配置和啟動器,讓AI集成變得輕而易舉。
  • API可移植性,支持所有主要的模型提供商,如OpenAI,Microsoft,Amazon,Google和Huggingface。支持的模型類型包括聊天和文本到圖像。
  • 跨 AI 提供商的可移植 API,用于聊天和嵌入模型。支持同步和流 API 選項。還支持下拉以訪問特定于模型的功能。
  • 將 AI 模型輸出映射到 POJO。
  • 支持所有主要的向量數據庫,例如 Azure Vector Search、Chroma、Milvus、Neo4j、PostgreSQL/PGVector、PineCone、Qdrant、Redis 和 Weaviate。
  • 跨 Vector Store 提供程序的可移植 API,包括新穎的類似 SQL 的元數據過濾器 API,該 API 也是可移植的。
  • AI 模型和矢量存儲的 Spring Boot stater。
  • 用于數據工程的 ETL 框架

1.2 Spring AI 使用

1.2.1 pom.xml

添加Maven存儲庫: 在項目的pom.xml中添加Spring MilestoneSnapshot存儲庫。

<repositories><!-- Spring Milestone Repository for milestones --><repository><id>spring-milestones</id><url>https://repo.spring.io/milestone</url></repository><!-- Spring Snapshot Repository for snapshots --><repository><id>spring-snapshots</id><url>https://repo.spring.io/snapshot</url></repository>
</repositories>

注意:在集成 Spring AI 或其他較新的 Spring 生態系統組件時,添加 Spring MilestoneSnapshot 存儲庫是為了確保能夠訪問到最新的開發版本、里程碑版本和快照版本。這些版本可能尚未發布到 Maven Central 這樣的穩定倉庫,但包含了最新的特性、修復和改進

導入Spring AI BOM: 使用Spring AI BOM定義,可以確保你使用的是測試過的、兼容的庫版本。

<dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>0.8.1-SNAPSHOT</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>

添加AI功能: 根據你的需求,添加相關的AI模塊依賴項到pom.xml。

<dependencies><!-- 示例:添加OpenAI的支持 --><dependency><groupId>org.springframework.experimental.ai</groupId><artifactId>spring-ai-openai</artifactId></dependency>
</dependencies>

1.2.2 可實現的功能

可實現的功能:

  • 生成式AI:利用Spring AI,你可以通過簡單的API調用,實現文本的生成、翻譯、摘要等功能。
  • 矢量數據庫:當你需要對文本數據進行語義搜索時,Spring AI提供的矢量數據庫支持使得相關操作變得簡單高-效。
  • AI繪畫:對于需要將文本轉換為圖像的應用場景,Spring AI的繪畫功能可以無縫集成到你的應用中。

1.3 Spring Cloud Alibaba AI

原始的Spring AI并沒有國內相關大模型的接入,對國內開發者不太友好。
總的來說,Spring Cloud Alibaba AI 目前基于 Spring AI 0.8.1 版本 API 完成通義系列大模型的接入。

在當前最新版本中,Spring Cloud Alibaba AI 主要完成了幾種常見生成式模型的適配,包括對話、文生圖、文生語音等,開發者可以使用 Spring Cloud Alibaba AI 開發基于通義的聊天、圖片或語音生成 AI 應用,框架還提供 OutParser、Prompt Template、Stuff 等實用能力。
Spring Cloud Alibaba AI 官方還提供了包括聊天對話、文生圖、文生語音等多種應用的開發示例,具體可以前往官網查看:https://sca.aliyun.com

1.4 Spring Cloud Alibaba AI 實踐操作

首先新建一個Maven項目,JDK選的是17版本。

1.4.1 pom.xml

Maven文件需要引入spring-cloud-alibaba-dependenciesspring-cloud-starter-alibaba-ai兩個依賴。

<dependencyManagement><dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2023.0.1.0</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement><dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-ai</artifactId></dependency>
</dependencies>

1.4.2 配置文件

配置阿里云通義千問的Api-Key,沒有的讀者可以從官網上申請。

server:port: 8080
spring:application:name: alibaba-spring-ai-democloud:ai:tongyi:api-key: 你的api-key

1.4.3 對接文本模型

我們首先測試如何對接文本大模型。
新建一個控制器類:新建/simple接口,用來測試基本QA。

@RestController
@RequestMapping("/ai")
@CrossOrigin
public class TongYiController {@Autowired@Qualifier("tongYiSimpleServiceImpl")private TongYiService tongYiSimpleService;@GetMapping("/simple")public String completion(@RequestParam(value = "message", defaultValue = "AI時代下Java開發者該何去何從?")String message) {return tongYiSimpleService.completion(message);}
}

新建一個TongyiService服務類:

public interface TongYiService {/*** 基本問答*/String completion(String message);/*** 文生圖*/ImageResponse genImg(String imgPrompt);/*** 語音合成*/String genAudio(String text);}

具體的實現類如下:由 Spring AI 自動注入 ChatClient、StreamingChatClient,ChatClient 屏蔽底層通義大模型交互細節,后者用于流式調用。

對于QA而言,僅僅通過client.call(prompt)一行代碼就可以完成對模型的調用。

@Service
@Slf4j
public class TongYiSimpleServiceImpl extends AbstractTongYiServiceImpl {/*** 自動注入ChatClient、StreamingChatClient,屏蔽模型調用細節*/private final ChatClient chatClient;private final StreamingChatClient streamingChatClient;@Autowiredpublic TongYiSimpleServiceImpl(ChatClient chatClient, StreamingChatClient streamingChatClient) {this.chatClient = chatClient;this.streamingChatClient = streamingChatClient;}/*** 具體實現:*/@Overridepublic String completion(String message) {Prompt prompt = new Prompt(new UserMessage(message));return chatClient.call(prompt).getResult().getOutput().getContent();}
}

我們發送一個請求,prompt是AI時代下Java開發者該何去何從?測試結果如下:
在這里插入圖片描述

1.4.4 文生圖模型

這里只給出service的代碼,其它代碼同上面的文本問答。

可以看到,只需要實例化一個imagePrompt,再調用模型即可。

@Slf4j
@Service
public class TongYiImagesServiceImpl extends AbstractTongYiServiceImpl {private static final Logger logger = LoggerFactory.getLogger(TongYiService.class);private final ImageClient imageClient;@Autowiredpublic TongYiImagesServiceImpl(ImageClient client) {this.imageClient = client;}@Overridepublic ImageResponse genImg(String imgPrompt) {var prompt = new ImagePrompt(imgPrompt);return imageClient.call(prompt);}
}

測試的prompt是:Painting a boy coding in front of the desk, with his dog.,測試結果如下,效果還是很不錯的:
在這里插入圖片描述
在這里插入圖片描述

1.4.5 語音合成模型

@Slf4j
@Service
public class TongYiAudioSimpleServiceImpl extends AbstractTongYiServiceImpl {private static final Logger logger = LoggerFactory.getLogger(TongYiService.class);private final SpeechClient speechClient;@Autowiredpublic TongYiAudioSimpleServiceImpl(SpeechClient client) {this.speechClient = client;}@Overridepublic String genAudio(String text) {logger.info("gen audio prompt is: {}", text);var resWAV = speechClient.call(text);// save的代碼省略,就是將音頻保存到本地而已return save(resWAV, SpeechSynthesisAudioFormat.WAV.getValue());}
}

測試結果也是成功的:
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/23230.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/23230.shtml
英文地址,請注明出處:http://en.pswp.cn/web/23230.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

NSSCTF-Web題目5

目錄 [SWPUCTF 2021 新生賽]error 1、題目 2、知識點 3、思路 [LitCTF 2023]作業管理系統 1、題目 2、知識點 3、思路 [HUBUCTF 2022 新生賽]checkin 1、題目 2、知識點 3、思路 [SWPUCTF 2021 新生賽]error 1、題目 2、知識點 數據庫注入、報錯注入 3、思路 首先…

淺談InoDB中的行級鎖

行級鎖的類型&#xff1a; Record Lock&#xff0c;記錄鎖&#xff0c;僅僅把?條記錄鎖上&#xff0c;記錄鎖分為排他鎖和共享鎖。Gap Lock&#xff0c;間隙鎖&#xff0c;鎖定?個范圍&#xff0c;但是不包含記錄本身&#xff0c;只存在于可重復讀隔離級別&#xff0c;?的是…

Oracle 重置system用戶的密碼

荊軻刺秦王 如果您忘記了Oracle數據庫的密碼&#xff0c;可以通過以下步驟來重置密碼&#xff1a; Oracle 版本&#xff1a;linux 11g Release 11.2.0.4.0-64bit Froduction 1. 以SYSDBA權限登錄到數據庫。 conn / as sysdba 2. 停止數據庫實例。 shutdown immediate; 3…

vue 文件預覽mp4、txt、pptx、xls、xlsx、docx、pdf、html、xml

vue 文件預覽 圖片、mp4、txt、pptx、xls、xlsx、docx、pdf、html、xml 最近公司要做一個類似電腦文件夾的功能&#xff0c;支持文件夾操作&#xff0c;文件操作,這里就不說文件夾操作了&#xff0c;說說文件預覽操作&#xff0c;本人是后端java開發&#xff0c;前端vue&#…

Nginx通過轉發代理解決跨域問題

前后端分離開發WEB端&#xff08;瀏覽器&#xff09;&#xff0c;不可避免的就是要解決跨域問題&#xff0c;因為這是瀏覽器的一種安全機制&#xff0c;當請求的&#xff08;1&#xff09;域名、&#xff08;2&#xff09;端口、&#xff08;3&#xff09;協議 。其中的一項與源…

MySQL如何多表關聯更新

在 MySQL 中,多表關聯更新可以使用 UPDATE 語句與 JOIN 子句結合來實現。以下是一個多表關聯更新的基本示例: 基本語法 UPDATE table1 JOIN table2 ON table1.column = table2.column SET table1.column = new_value, table2.column = new_value WHERE condition;

Linux系統安裝APITable詳細流程與遠程訪問本地平臺數據分析

文章目錄 前言1. 部署APITable2. cpolar的安裝和注冊3. 配置APITable公網訪問地址4. 固定APITable公網地址 &#x1f4a1;推薦 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。【點擊跳轉到網站】 前言 v…

AMD顯卡和英偉達顯卡哪個好?

顯卡是計算機中負責處理圖形和視頻輸出的硬件設備&#xff0c;主要分為兩種類型&#xff1a;AMD的A卡和NVIDIA的N卡。那么AMD顯卡和英偉達顯卡哪個好&#xff1f;怎么選&#xff1f; 答&#xff1a;不能一概而論地說哪個好&#xff0c;因為它們各有優勢&#xff0c;選擇應基于…

listbox有scrollviewer,點擊后不會觸發selectionchanged事件

這個問題是因為在ListBox中的ScrollViewer處于焦點狀態時&#xff0c;SelectionChanged事件沒有觸發。這通常是因為ScrollViewer在處理鼠標事件時會優先于ListBox。 為了解決這個問題&#xff0c;可以通過以下方法來確保SelectionChanged事件在ListBox中被觸發&#xff1a; 在…

RE_RC4加密

之前做的幾道題目&#xff0c;rc4也是經常遇到&#xff0c;今來系統學學&#xff0c;記錄一下 對稱加密&#xff0c;即加密和解密的密鑰可以相互推導&#xff0c;也有的是相同的。 RC4 是以字節流處理每一個字節&#xff0c;而不是 DES 的分組操作。 包含三個參數&#xff1…

探索通信技術的未來:2024中國通信技術和智能裝備產業博覽會

探索通信技術的未來&#xff1a;2024通信技術產業專場 隨著信息技術的飛速發展&#xff0c;通信技術已成為現代社會不可或缺的基礎設施。2024年10月11日至13日&#xff0c;青島將迎來一場通信技術的盛會——2024中國軍民兩用智能裝備與通信技術產業博覽會。本次博覽會不僅將展…

面試(03)————多線程

目錄 一、線程和進程的區別&#xff1f; 二、并行和并發的區別&#xff1f; 三、線程創建的方式有哪些&#xff1f; 3.1、繼承Thread類 3.2、實現Runnable接口 3.3、實現Callable接口 3.4、線程池 四、Runnable和Callable的區別&#xff1f; 五、在啟動線程的時候&am…

使用packstack快速部署OpenStack

目錄 資源列表 基礎環境 安裝packstack 安裝OpenStack 本文記錄了基于CentOS操作系統使用packstack快速部署openstack。 資源列表 操作系統配置磁盤IP數量CentOS7.94C8G50G192.168.207.1551 基礎環境 服務器開啟虛擬化&#xff0c;我這里使用的是VMware虛擬機&#xff0…

Redis教程(二十二):Redis的過期刪除和緩存淘汰策略

傳送門:Redis教程匯總篇,讓你從入門到精通 一、過期刪除策略 Redis 中的過期刪除策略是與 Redis 管理鍵的生命周期相關的一系列操作,用于刪除過期的Key以釋放內存。Redis 提供了三種主要的過期刪除策略: 1、惰性刪除(Lazy Expiration) 工作原理:當客戶端嘗試訪問一個…

書生·浦語大模型全鏈路開源體系-筆記作業4

XTuner 微調 LLM:1.8B、多模態、Agent 引自&#xff1a;Tutorial/xtuner/personal_assistant_document.md at camp2 InternLM/Tutorial GitHub 1. XTuner介紹 引自&#xff1a;歡迎來到 XTuner 的中文文檔 — XTuner 0.1.18.dev0 文檔 1.1. 什么是 XTuner &#xff1f; X…

修改緩存供應商--EhCache

除了我們默認的緩存形式simlpe之外, 我們其實還有許多其他種類的緩存供應 Ehcache就是其中的一種形式 Ehcache在SpringBoot當中的使用: 其實跟我們之前整合第三方的資源是一樣的形式 1>導入依賴: <!-- 更換緩存, 將默認使用的 Simple 更換為Ehcache--> <depe…

Redis 數據拷貝

一、從db0到db1 將redis數據從db0拷貝到db1&#xff0c;可以使用下面腳本進行復制 REDIS_CLI/usr/local/redis/bin/redis-cli hostredis_host portredis_port passwordredis_password old_base0 new_base1${REDIS_CLI} -h ${host} -p ${port} -a ${password} -n $old_base ke…

【go】windows環境設置goos

場景 本地環境&#xff1a;windows 生產環境&#xff1a;linux 現想在本地將go腳本編譯為可執行二進制文件&#xff0c;轉移至生產中進行運行測試。但go build不生效。 方案&#xff08;修改GOOS&#xff09; cmd打開命令行&#xff0c;執行go env查看本地go環境&#xff0c…

PPT視頻如何16倍速或者加速播放

有兩種方式&#xff0c;一種是修改PPT本身&#xff0c;這種方式非常繁瑣&#xff0c;不太推薦&#xff0c;還有一種就是修改視頻本身&#xff0c;直接讓視頻是16倍速的視頻即可。 如何讓視頻16倍速&#xff0c;我建議人生苦短&#xff0c;我用Python&#xff0c;幾行代碼&…

基本元器件 - 電阻

目錄 電阻的選型 貼片封裝的參數 電阻的阻值 絲印表示方法 標準電阻取值 電阻的失效 0 歐姆電阻的使用 電阻的使用場景 分壓電路 分流電路 限流電路 阻抗匹配電路 RC 充放電電路 上下拉電路 其他電路 電阻的選型 一般來說&#xff0c;要考慮以下四個因素&…