SpringAI介紹及本地模型使用方法

博客原文地址

前言

Spring在Java語言中一直穩居高位,與AI的洪流碰撞后也產生了一些有趣的”化學反應“,當然你要非要說碰撞屬于物理反應也可以,

在經歷了一系列復雜的反應方程后,Spring家族的新成員——SpringAI,就此誕生。

需要注意的是,springai目前仍處于試驗階段,可能會出現許多不穩定因素,希望各位使用者能放平心態面對BUG(或者去issues里發表自己的見解

簡介

Spring AI 項目為開發 AI 應用程序提供了 Spring 友好的 API 和抽象類。

其目標是將 Spring 生態系統設計原則(如可移植性和模塊化設計)應用于 AI 領域,并將使用 POJO 作為應用程序的構建塊推廣到 AI 領域。

github倉庫:spring-projects/spring-ai: An Application Framework for AI Engineering

目前該項目已經集成了OpenAI、Azure OpenAI、Hugging Face、Ollama等API。

我們一般對于AI類項目嵌入JAVA的做法為:

  1. 開發java后端和前端部分代碼

  2. 確定功能需求,如文本生成類項目,即接收部分參數,返回一個String文本

  3. 確定模型主題,如BERT/T5等等

  4. 對模型進行訓練或微調,并編寫使用方法代碼

  5. 使用web框架(如:FastAPI/Flask)開放接口,規范接參收參格式

  6. java使用webclient(也可以用別的)請求接口調用AI服務

  7. 測試聯調(你也可以選擇一步一測試,都可以)

對于具體的模型對接代碼可以參考我的Transformers文章中有詳細的對于模型使用和訓練的代碼:transformer庫 | ADulcimer Blog

所以SpringAI也就相當于是集合了大部分廠商的API接口,提供調用,再進行一些java適配和代碼優化等等。最終也是通過接慘(文本和key等等)然后傳參,被java接收

請注意:springai的API調用并不能讓你在離線模式進行大模型的訪問,如果你是AI開發人員,那么springai可以讓你在java中離線運行本地torch或其他模型,但是相比于python還是較為局限,但如果你只是通過此技術調用大模型API,那么離線模式下是無法實現對話功能的

應該足夠清楚的表明了: springAI到底是個什么技術,總結一下:

Spring AI 是一個強大的工具,適合那些已經在使用 Spring 框架的開發者,并且希望將 AI 能力集成到他們的企業級應用中。它的優勢在于與 Spring 生態系統的無縫集成和企業級支持,但對于初學者或者需求較簡單的 AI 項目來說,它可能過于復雜

Python開AI接口區別

SpringAI在解決復雜問題時,會比傳統的AI開接口更加優秀,請注意,這里說的是復雜的業務邏輯,如果是復雜的AI功能,比如,需求不斷微調,訓練,或者更換模型,對模型進行更改等等等等,Python開接口的方式還是會更加靈活,如果說業務復雜,但AI需求功能單一,則使用SpringAI,如果業務邏輯簡單,則都可以使用python接口的方式,因為SpringAI是一個很重的框架

1、企業級架構與可擴展性
  • Spring AI 是構建在 Spring 框架 上的,Spring 本身就是為企業級、分布式、高并發系統設計的框架。因此,如果你的需求涉及到復雜的業務邏輯、大規模的用戶交互或者高可用、高并發的環境,Spring AI 提供的 可擴展性可靠性 將使得系統更加穩定。

  • Spring CloudSpring Boot 等工具,使得它在微服務架構中的表現非常出色,這對于那些需求復雜的系統(如需要多個模塊、服務和組件的系統)來說,是一個很大的優勢。

2. 集成能力
  • Spring AI 能夠無縫集成 Java 生態系統中的其他工具和技術,比如數據庫、消息隊列、緩存系統、認證與授權、安全等模塊。如果你的系統已經在使用 Spring 框架,這使得 Spring AI 能夠與現有的基礎設施進行更好的集成。

  • 如果需要和傳統的 Java 后端服務企業級應用第三方服務(如支付、ERP 系統) 進行集成,Spring 提供的成熟的解決方案和豐富的生態系統使得這種集成更加順暢。

3. 高并發和高可靠性
  • Spring 框架和相關工具(如 Spring Boot、Spring Cloud)具有極強的 高并發 支持和 高可用 設計。對于大規模用戶請求、海量數據處理等需求,Spring 框架能夠通過 多線程、異步處理、負載均衡、服務容錯、分布式系統管理等技術 來確保系統的穩定性和高效運行。

  • 在這些場景下,Spring AI 提供的 性能優化容錯機制 使得系統更加可靠,而 Python 寫的模型可能需要通過額外的優化和工具來應對這些挑戰。

4. 生產環境的成熟度與穩定性
  • Spring 框架已經在 生產環境 中得到了廣泛的應用,尤其是在 大型企業級應用 中,具有非常高的穩定性和可靠性。Spring 提供了很多企業級功能,如 事務管理、緩存、日志記錄、調試工具 等,這些功能對于復雜需求的應用至關重要。

  • 對比之下,傳統的 Python 接口通常更多用于 原型開發、快速部署中小規模應用,雖然在靈活性和開發速度上有優勢,但在大規模生產環境中的穩定性和可維護性上可能沒有 Spring 那么強。

5. 安全性
  • 在涉及到 敏感數據、權限管理、認證與授權 的復雜需求時,Spring 提供了豐富的 安全機制。通過 Spring Security 等工具,可以高效地管理和控制用戶權限、進行身份驗證、數據加密等,確保系統的安全性。

  • Python 雖然也有相關的庫(如 Flask-Security、Django Security 等),但在集成和管理方面可能沒有 Spring 的安全框架那么成熟和全面。

6. DevOps 支持與自動化部署
  • Spring 在 DevOps 和自動化部署方面也有很強的支持,Spring Boot 和 Spring Cloud 的集成功能使得部署、監控、日志管理和版本管理等任務更加自動化,極大地提高了運維效率。

  • Python 部署方面也可以使用 Docker、Kubernetes 等工具,但由于 Spring 提供的微服務架構和生產環境支持更加豐富,Spring AI 在大規模應用部署和運維上表現更佳。

7. 維護與支持
  • 對于 大型團隊長期項目,Spring 框架提供了成熟的企業級支持,文檔和社區也非常強大。對于一些需求復雜、時間長的項目,使用 Spring AI 可以更容易進行 長期維護團隊協作

  • Python 的開發者社區雖然龐大,但在企業級開發、集成和維護方面,可能不如 Spring 框架在行業中的積淀和支持那么全面。

代碼部分

根據官方文檔,分為兩種方式調用,一種是springboot項目,交給spring管理

參考官方文檔:transforms(我們以它為例)

(ONNX)變形金剛 ((ONNX) Transformers) _ Spring AI 1.0.0-SNAPSHOT 中文文檔(官方文檔中文翻譯) —— CADN開發者文檔中心

參考maven文檔:

repo.spring.io

1、Springboot管理
1、引入依賴:
    <repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository><repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><releases><enabled>false</enabled></releases></repository></repositories><dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>1.0.0-SNAPSHOT</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-transformers-spring-boot-starter</artifactId>
</dependency>
2、編寫application.yml配置文件
spring:ai:embedding:transformer:onnx:model-uri: https://huggingface.co/intfloat/e5-small-v2/resolve/main/model.onnxtokenizer:uri: https://huggingface.co/intfloat/e5-small-v2/raw/main/tokenizer.jsoncache:directory: /tmp/ai-embedding-transformerenabled: true

部分的配置詳情如下:

Property

Description

spring.ai.embedding.transformer.enabled

啟用 Transformer Embedding 模型。

spring.ai.embedding.transformer.tokenizer.uri

Transformer分詞器地址

spring.ai.embedding.transformer.tokenizer.options

模型的一些參數,max_length這些

spring.ai.embedding.transformer.cache.enabled

是否啟用緩存

spring.ai.embedding.transformer.cache.directory

緩存路徑

spring.ai.embedding.transformer.onnx.modelUri

Transformers預訓練模型地址

spring.ai.embedding.transformer.onnx.gpuDeviceId

GPU設備ID

這些是一些常用的,具體請參考官方文檔

3、搭建controller和service層
import com.adulcimer.ai.service.ToxicityService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
class MyController {@Resourceprivate ToxicityService toxicityService;@PostMapping("/test")public String test() throws Exception {toxicityService.modelTest();return "Hello, World!";}
}import jakarta.annotation.Resource;
import org.springframework.ai.transformers.TransformersEmbeddingModel;
import org.springframework.stereotype.Service;import java.util.Arrays;@Service
public class ToxicityService {@Resourceprivate TransformersEmbeddingModel transformersEmbeddingModel;public void modelTest() throws Exception {float[] embed = transformersEmbeddingModel.embed("Hello World");System.out.println(Arrays.toString(embed));}
}
4、結果

我們已經得到模型的返回值了,成功使用springboot調用了AI模型

具體的業務邏輯也可以輕松嵌入,是不是很輕松?

2、自定義配置

當然你也可以不使用spring的管理

TransformersEmbeddingModel embeddingModel = new TransformersEmbeddingModel();embeddingModel.setTokenizerResource("classpath:/onnx/all-MiniLM-L6-v2/tokenizer.json");embeddingModel.setModelResource("classpath:/onnx/all-MiniLM-L6-v2/model.onnx");embeddingModel.setResourceCacheDirectory("/tmp/onnx-zoo");embeddingModel.setTokenizerOptions(Map.of("padding", "true"));embeddingModel.afterPropertiesSet();List<List<Double>> embeddings = this.embeddingModel.embed(List.of("Hello world", "World is big"));

然后正常使用架構搭建即可

最后

以上部分內容和圖片來自于官方文檔,本文中已聲明原作地址。

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

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

相關文章

ip地址是手機號地址還是手機地址

在數字化生活的浪潮中&#xff0c;IP地址、手機號和手機地址這三個概念如影隨形&#xff0c;它們各自承載著網絡世界的獨特功能&#xff0c;卻又因名稱和功能的相似性而時常被混淆。尤其是“IP地址”這一術語&#xff0c;經常被錯誤地與手機號地址或手機地址劃上等號。本文旨在…

車載以太網__傳輸層

車載以太網中&#xff0c;傳輸層和實際用的互聯網相差無幾。本篇文章對傳輸層中的IP進行介紹 目錄 什么是IP&#xff1f; IP和MAC的關系 IP地址分類 私有IP NAT DHCP 為什么要防火墻穿透&#xff1f; 廣播 本地廣播 直接廣播 本地廣播VS直接廣播 組播 …

Docker 數據卷(Volume)詳細介紹

Docker 數據卷&#xff08;Volume&#xff09;詳細介紹 1. 什么是 Docker 數據卷&#xff1f; Docker 數據卷&#xff08;Volume&#xff09;是一種用于 持久化數據 和 容器間數據共享 的機制。由于容器的存儲是臨時的&#xff0c;容器刪除后其中的數據會丟失&#xff0c;因此…

wxWidgets生成HTML文件,帶圖片轉base64數據

編譯環境大家可以看我之前的文章,CodeBlocks + msys2 + wx3.2,win10 這里功能就是生成HTML文件,沒用HTML庫,因為是自己固定的格式,圖片是一個vector,可以動態改變數量的。 效果如下: #include <wx/string.h> #include <wx/file.h> #include <wx/ima…

網絡原理一>數據鏈路層協議->以太網協議

目錄 以太網協議的結構&#xff1a;類型&#xff1a;ARP請求應答報文&#xff1a;CRC&#xff1a;MTU: 為什么需要mac地址&#xff1a;mac地址和IP地址的區別&#xff1a; 以太網協議的結構&#xff1a; 以太網是數據鏈路層和物理層的主要協議 源IP&#xff0c;目的IP就不多說…

瘋狂SQL轉換系列- SQL for Milvs2.4

鑒于Milvus仍在不停的迭代新版本&#xff0c;推出新功能&#xff0c;其SDK目前并不穩定。目前其2.4版本的SDK接口已與之前的2.2版本有了較大的差別&#xff0c;功能上也有了一定的調整。為此&#xff0c;我們重新提供了針對[Milvus2.4](https://github.com/colorknight/moql-tr…

售后板子HDMI無輸出分析

問題&#xff1a; 某產品售后有1例HDMI無輸出。 分析&#xff1a; 1、測試HDMI的HPD腳&#xff08;HDMI座子的19pin&#xff09;&#xff0c;測試電壓4.5V&#xff0c;屬于正常。 2、用萬用表直流電壓檔&#xff0c;測試HDMI的3對數據腳和1對時鐘腳&#xff08;板子通過HDM…

【聲音轉文字CapsWriter】聲音隨時轉化為文字,CapsWriter提高工作效率

文章目錄 前言1. 軟件與模型下載2. 本地使用測試3. 異地遠程使用3.1 內網穿透工具下載安裝3.2 配置公網地址3.3 修改config文件3.4 異地遠程訪問服務端 4. 配置固定公網地址4.1 修改config文件 5. 固定tcp公網地址遠程訪問服務端 前言 今天我要給大家安利一個神器——CapsWrit…

使用 Python 編程語言來實現機器學習小項目教程案例

以下是一個簡單的機器學習小項目教程案例,使用 Python 編程語言和 Scikit-learn 庫來實現一個分類任務。我們將使用經典的鳶尾花(Iris)數據集來訓練一個分類器,預測鳶尾花的種類。 項目目標 使用機器學習算法對鳶尾花數據集進行分類,預測鳶尾花的類別(Setosa、Versicolor…

DKG(Distributed Key Generation)協議

一、DKG是什么 DKG(分布式密鑰生成)提供了一種去中心化的方法,使各個參與方在不相互信任的情況下生成共享密鑰,以確保安全通信和多方參與的機密性。 DKG技術的關鍵思想是使用多方計算(secure multiparty computation)和秘鑰共享(secret sharing)的概念。 秘鑰共享 則…

十二、Docker Compose 部署 SpringCloudAlibaba 微服務

一、部署基礎服務 0、項目部署結構 項目目錄結構如下: /home/zhzl_hebei/ ├── docker-compose.yml └── geochance-auth/└── Dockerfile└── geochance-auth.jar └── geochance-system/└── Dockerfile└── geochance-system.jar └── geochance-gateway/…

使用 Docker(Podman) 部署 MongoDB 數據庫及使用詳解

在現代開發環境中&#xff0c;容器化技術&#xff08;如 Docker 和 Podman&#xff09;已成為部署和管理應用程序的標準方式。本文將詳細介紹如何使用 Podman/Docker 部署 MongoDB 數據庫&#xff0c;并確保其他應用程序容器能夠通過 Docker 網絡成功連接到 MongoDB。我們將逐步…

Games104——游戲引擎Gameplay玩法系統:基礎AI

這里寫目錄標題 尋路/導航系統NavigationWalkable AreaWaypoint NetworkGridNavigation Mesh&#xff08;尋路網格&#xff09;Sparse Voxel Octree Path FindingDijkstra Algorithm迪杰斯特拉算法A Star&#xff08;A*算法&#xff09; Path Smoothing Steering系統Crowd Simu…

Win11非虛擬機安裝ISE14.7

官網下載6.18GB 的 Full Installer for Windows 7/XP/Server解壓后運行安裝程序不勾選Enable WebTalk to send software, IP ...安裝程序卡死在ISE:Configure WebTalk&#xff0c;此時打開任務管理器&#xff0c;在詳情中找到xwebtalk&#xff0c;右鍵結束任務。安裝程序繼續進…

從0開始達芬奇(3.8)

剪視頻有主次之分&#xff0c;主就是Aroll&#xff0c;次就是Broll。 智能媒體夾&#xff1a; 媒體池的智能媒體夾部分可以很好區分主次。這個相當于智能搜索&#xff0c;當有大量的素材時&#xff0c;可以為這些素材標明信息&#xff0c;下次使用不需要反復看&#xff0c;直…

【Elasticsearch】parent aggregation

在Elasticsearch中&#xff0c;Parent Aggregation是一種特殊的單桶聚合&#xff0c;用于選擇具有指定類型的父文檔&#xff0c;這些類型是通過一個join字段定義的。以下是關于Parent Aggregation的詳細介紹&#xff1a; 1.基本概念 Parent Aggregation是一種聚合操作&#x…

自學Java-面向對象編程入門

自學Java-面向對象編程入門 一、靜態方法的注意事項二、簡易版電影信息展示系統1、測試類2、電影類3、電影操作類 一、靜態方法的注意事項 1、靜態方法中可以直接訪問靜態成員&#xff0c;不可以直接訪問實例成員 2、實例方法中既可以直接訪問靜態成員&#xff0c;也可以直接訪…

python算法和數據結構刷題[3]:哈希表、滑動窗口、雙指針、回溯算法、貪心算法

回溯算法 「所有可能的結果」&#xff0c;而不是「結果的個數」&#xff0c;一般情況下&#xff0c;我們就知道需要暴力搜索所有的可行解了&#xff0c;可以用「回溯法」。 回溯算法關鍵在于:不合適就退回上一步。在回溯算法中&#xff0c;遞歸用于深入到所有可能的分支&…

【自學筆記】Python的基礎知識點總覽-持續更新

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 Python基礎知識總覽1. Python簡介2. 安裝與環境配置3. 基本語法3.1 變量與數據類型3.2 控制結構3.3 函數與模塊3.4 文件操作 4. 面向對象編程&#xff08;OOP&#…

文件上傳到騰訊云存儲、簽名及設置過期時間

將文件上傳到騰訊云對象存儲&#xff08;COS&#xff0c;Cloud Object Storage&#xff09;可以通過騰訊云提供的 SDK 實現。以下是詳細的步驟和示例代碼&#xff0c;幫助您完成文件上傳操作。 步驟 注冊騰訊云賬號并創建存儲桶&#xff1a; &#xff08;1&#xff09;登錄騰訊…