Spring AI Alibaba

目錄

前言:

一、Spring AI 和Spring AI Alibaba

二、Spring AI Alibaba快速入門

1.環境

2.ollama

3.阿里百煉


前言:

? ? ? ? 2025年真的是AI大爆發的一年,以后無論是什么行業我想都需要AI+了,作為一名計算機人,你不學習AI就會被out。我在想以前的項目都叫做傳統項目,以后的項目都會是傳統+智能結合項目了,處在時代的風口,抓住機會趁現在就起飛吧!

????????我在看現在關于Spring AI的資料很雜,并不像傳統的那些存在了好長時間的技術,如框架、MySQL這些資料齊全。剛好在今年上半年跟隨著老師接觸過大模型,在做學校的大集訓時也翻過Spring AI的官方文檔,結合了傳統項目加上了大模型進行了一個整合,我也不算是零基礎了吧。現在想著再深耕一下Spring AI Alibaba,以下是我的自學筆記:

一、Spring AI 和Spring AI Alibaba

? ? ? ? 我們先來了解一下什么是Spring AI?其官方文檔是這樣說的:

簡介 :: Spring AI 中文文檔

? ? ? ? Spring AI?項目旨在簡化應用程序的開發過程,在不增加不必要的復雜性的前提下整合 AI(人工智能)功能。

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

? ? ? ? 也就是Spring AI = 讓 Java 開發者用最少的代碼,快速把各種 AI 能力(大模型、圖像識別等)塞進自己的程序里。

? ? ? ? 那么什么又是Spring AI Alibaba?再來看官方文檔:

Spring AI Alibaba 概覽-阿里云Spring AI Alibaba官網官網

????????Spring AI Alibaba(SAA) 是一款以 Spring AI 為基礎,深度集成百煉平臺,支持 ChatBot、工作流、多智能體應用開發模式的 AI 框架。

? ? ? ? 也就是Spring AI Alibaba = 用 Spring 的簡單方式,調用阿里的 AI 服務(通義千問、阿里云 AI 等),省去適配阿里接口的麻煩。

? ? ? ? 總結:Spring AI 是 Java 開發者調用各類 AI 服務(大模型、圖像識別等)的統一簡化工具;Spring AI Alibaba 是專門適配阿里系 AI 服務(通義千問、阿里云 AI 等)并深度融合其生態的定制版工具。

二、Spring AI Alibaba快速入門

????????下面我們來使用Spring AI Alibaba來實現一個簡單的聊天機器人吧!

1.環境

注:Spring Boot版本必須選擇3.0以上的版本,JDK也必須選擇17及以上

Spring Boot 3.4.4、JDK17、Spring AI Alibaba 1.0.0.2

pom.xml:

下面將使用兩種方式調用大模型:ollama和阿里百煉,并使用兩種方式輸出:直接輸出和流式輸出。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.hl</groupId><artifactId>spring-demo</artifactId><version>0.0.1-SNAPSHOT</version><name>spring-demo</name><description>spring-demo</description><properties><java.version>17</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>3.4.4</spring-boot.version><spring-ai-alibaba.version>1.0.0.2</spring-ai-alibaba.version><spring-ai.version>1.0.0</spring-ai.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- spring-ai-alibaba --><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter-dashscope</artifactId></dependency><!-- ollama --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-ollama</artifactId></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-bom</artifactId><version>${spring-ai-alibaba.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>${spring-ai.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version><configuration><mainClass>com.hl.springdemo.SpringDemoApplication</mainClass><skip>true</skip></configuration><executions><execution><id>repackage</id><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build></project>

2.ollama

application.yml:

spring:ai:ollama:base-url: http://localhost:11434chat:options:model: qwen2.5:3b#spring事務管理日志
logging:level:org.springframework.jdbc.support.JdbcTransactionManager: debug

?配置ChatClient:

@Configuration
public class ChatClientConfig {@Beanpublic ChatClient ollamaChatClient(@Qualifier("ollamaChatModel") OllamaChatModel ollamaChatModel) {return ChatClient.builder(ollamaChatModel).build();}}

controller測試:

調用兩個接口進行直接輸出和流式輸出:

package com.hl.springdemo.controller;import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;@Slf4j
@RestController
public class ChatController {@Autowired@Qualifier("ollamaChatClient")private ChatClient ollamaChatClient;@GetMapping("/chat1")public String chat(@RequestParam(value = "question", defaultValue = "你是誰?") String question) {log.info("question: {}", question);String content = ollamaChatClient.prompt().user(question).call().content();return content;}@GetMapping(value = "/stream", produces = "text/html;charset=UTF-8")public Flux<String> streamChat(@RequestParam(value = "question", defaultValue = "你是誰?") String question){log.info("question: {}", question);return ollamaChatClient.prompt().user("你是誰?").stream().content();}
}

運行結果:

瀏覽器訪問localhost:8080/chat1?question=你是誰?和localhost:8080/stream?question=你是誰?

流式輸出是大模型持續返回一些話給你知道完成,現在我們使用的平臺(通義和豆包)都是流式輸出。

3.阿里百煉

? ? ? ? 這是第二種調用大模型的方式,需要在阿里云百煉平臺上開通服務并生成一個自己的API Key:

大模型服務平臺百煉控制臺

application.yml:
在上面的yml中繼續配置,完整文件如下:

server:port: 8080spring:ai:ollama:base-url: http://localhost:11434chat:options:model: qwen2.5:3bdashscope:api-key: ${AI_DASHSCOPE_API_KEY}chat:options:model: qwen-max#spring事務管理日志
logging:level:org.springframework.jdbc.support.JdbcTransactionManager: debug

?配置ChatClient:

完整代碼如下:

package com.hl.springdemo.config;import com.alibaba.cloud.ai.dashscope.chat.DashScopeChatModel;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.ollama.OllamaChatModel;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class ChatClientConfig {@Beanpublic ChatClient ollamaChatClient(@Qualifier("ollamaChatModel") OllamaChatModel ollamaChatModel) {return ChatClient.builder(ollamaChatModel).build();}@Beanpublic ChatClient dashscopeChatClient(@Qualifier("dashscopeChatModel")DashScopeChatModel dashscopeChatModel) {return ChatClient.builder(dashscopeChatModel).build();}
}

在controller中添加接口:

@GetMapping("/chat2")public String chat2(@RequestParam(value = "question", defaultValue = "你是誰?") String question) {log.info("question: {}", question);String content = dashscopeChatClient.prompt().user(question).call().content();return content;}

配置環境變量:

打開idea的運行配置,添加環境變量:AI_DASHSCOPE_API_KEY=你的api-key

接著運行訪問localhost:8080/chat2?question=你是誰?即可!

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

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

相關文章

【GaussDB】內存資源告急:深度診斷一起“memory temporarily unavailable“故障

【GaussDB】診斷一起內存臨時不可用的問題 &#x1f4cb; 背景 在客戶測試環境中&#xff08;GaussDB 506.0 SPC0100 集中式&#xff09;&#xff0c;一個重度使用存儲過程的系統&#xff0c;頻繁出現內存臨時不可用的問題(ERROR: memory is temporarily unavailable)。令人困…

FastDFS如何提供HTTP訪問電子影像文件

Nginx 作為高性能的 Web 服務器和反向代理服務器&#xff0c;與 FastDFS 結合使用&#xff0c;本文主要介紹用于處理 FastDFS 存儲文件的 HTTP 訪問請求&#xff0c;方便客戶端通過 HTTP 協議直接訪問存儲在 FastDFS 中的文件&#xff0c;在電子影像系統中&#xff0c;Nginx 可…

水面垃圾識別分割數據集labelme格式2111張8類別

數據集中有部分增強圖片&#xff0c;注意為了提供模型泛化識別能力&#xff0c;有很少一部分不是水面垃圾。具體看圖片數據集格式&#xff1a;labelme格式(不包含mask文件&#xff0c;僅僅包含jpg圖片和對應的json文件)圖片數量(jpg文件個數)&#xff1a;2111標注數量(json文件…

北京-4年功能測試2年空窗-報培訓班學測開-第六十二天-模擬未通過,繼續準備自我介紹項目介紹面試題中

今日產出&#xff0c;完成昨天模擬面試錄音的重聽和整理&#xff0c;完成自我介紹梳理&#xff0c;還重寫了三個算法題&#xff0c;寫了4個sql題。和同學打語音提問今天專注力不強&#xff0c;因為焦慮項目和面試題。關于項目&#xff0c;我理解的&#xff0c;老師以前錄屏講的…

自動化輔助工具教程

該工具支持全部平臺使用

里程碑 | 1Panel開源面板GitHub Star數量突破30,000個!

截至2025年7月23日20:00&#xff0c;飛致云旗下開源項目——1Panel開源Linux服務器運維管理面板GitHub Star數超過30,000個&#xff01; 繼Halo之后&#xff0c;1Panel成為飛致云旗下第二個GitHub Star數量超過30,000個的開源項目&#xff0c;也是飛致云旗下最快達成30,000個Gi…

雨雪霧冰全預警:交通氣象站為出行安全筑起“隱形防護網”

冬季濃霧彌漫高速&#xff0c;能見度降至 50 米以下&#xff1b;夏季暴雨傾盆&#xff0c;低洼路段眨眼間積水成河…… 惡劣天氣總是公路交通安全的大敵。關鍵時刻&#xff0c;交通氣象站挺身而出&#xff0c;成為保障道路暢通與行車安全的科技尖兵。交通氣象站專為復雜道路環境…

C++(面向對象之繼承、多態)

一、繼承前言在c里面&#xff0c;繼承是指2個類之間的關系例如&#xff1a;有一個org類&#xff0c;功能很完善&#xff0c;體量很大&#xff0c;突然有一天&#xff0c;需求發生改變&#xff0c;org類不能滿足新的需求&#xff0c;我們的第一想法是&#xff0c;復制 org 類代碼…

【數據可視化-75】北京密云區2025年7月暴雨深度分析:Python + Pyecharts 炫酷大屏可視化(含完整數據、代碼)

&#x1f9d1; 博主簡介&#xff1a;曾任某智慧城市類企業算法總監&#xff0c;目前在美國市場的物流公司從事高級算法工程師一職&#xff0c;深耕人工智能領域&#xff0c;精通python數據挖掘、可視化、機器學習等&#xff0c;發表過AI相關的專利并多次在AI類比賽中獲獎。CSDN…

Voxtral Mini:語音轉文本工具,支持超長音頻,多國語音

Voxtral是什么 Mistral AI 推出的 Voxtral 是一款強大的音頻模型&#xff0c;專為語音交互打造&#xff0c;具備卓越的語音轉寫和語義理解能力。它提供 24B 和 3B 兩種版本&#xff0c;分別適用于大規模生產和本地部署。Voxtral 支持多語言、長文本上下文、問答與總結&#xf…

React Native環境配置完整版(超詳細)

目錄 第一步&#xff1a;打開React Native官方網站 第二步&#xff1a;安裝NVM與Node.js 一、安裝NVM 二、使用NVM安裝Node.js 三、NVM使用說明 四、環境變量配置 第三步&#xff1a;安裝JDK 一、JDK介紹 二、下載與安裝JDK 三、環境配置 四、驗證是否配置成功 第四…

Rust 最短路徑、Tide、Partial、Yew、Leptos、數獨實踐案例

基于Rust的Meta和pyrefly相關實例 以下是一些基于Rust的Meta和pyrefly相關實例的示例代碼和用法。這些示例涵蓋了常見的使用場景,包括元編程、代碼生成、Python交互等。 基本元編程示例 使用Rust的宏和元編程功能生成代碼。 macro_rules! greet {($name:expr) => {prin…

Microsoft-DNN NTLM暴露漏洞復現(CVE-2025-52488)

免責申明: 本文所描述的漏洞及其復現步驟僅供網絡安全研究與教育目的使用。任何人不得將本文提供的信息用于非法目的或未經授權的系統測試。作者不對任何由于使用本文信息而導致的直接或間接損害承擔責任。如涉及侵權,請及時與我們聯系,我們將盡快處理并刪除相關內容。 前…

Windows上WSL2實例與宿主機橋接網絡實現局域網互通

在 WSL 2 中&#xff0c;默認使用 NAT 網絡模式&#xff0c;這會導致 WSL 實例和宿主機所在的局域網無法直接互通。要讓 WSL 2 和宿主機所在的局域網互通&#xff0c;可以通過以下步驟配置 wsl.conf 并結合宿主機網絡設置&#xff0c;啟用 WSL 2 的橋接模式&#xff1a;修改 ws…

程序代碼篇---數據包解析

數據包解析是不同設備&#xff08;如電腦、ESP32 等嵌入式設備&#xff09;之間通信的核心環節。簡單說&#xff0c;就是把收到的 "一串數據" 翻譯成雙方都能理解的 "具體信息"&#xff08;比如溫度、濕度、命令等&#xff09;。下面介紹幾種常見的數據包格…

【開發雜談】用AI玩AI聊天游戲:使用 Electron 和 Python 開發大模型語音聊天軟件

項目地址&#xff1a; GitHub | wfts-ai-chathttps://github.com/HiMeditator/wfts-ai-chat 前言 最近一個基于 AI 的聊天游戲 Whispers from the Stars&#xff08;群星低語&#xff09;的 Demo 版本發布了。《Whispers from the Star》是一款科幻主題互動游戲。背景設定在…

SQL優化系統解析

MySQL的安裝就不講述了, 本篇文章著重講解sql優化 本篇是對B站顏群老師視頻講解的筆記梳理, 感興趣的可以去看下老師的原視頻: SQL優化 MySQL原理 1. MySQL邏輯分層: 連接層->服務層->引擎層->存儲層(如圖) 連接層&#xff1a;提供與客戶端連接的服務服務層&#…

【機器學習案列-25】電信用戶流失預測:從數據處理到模型評估

&#x1f9d1; 博主簡介&#xff1a;曾任某智慧城市類企業算法總監&#xff0c;目前在美國市場的物流公司從事高級算法工程師一職&#xff0c;深耕人工智能領域&#xff0c;精通python數據挖掘、可視化、機器學習等&#xff0c;發表過AI相關的專利并多次在AI類比賽中獲獎。CSDN…

【MATLAB代碼】灰色預測與多項式預測、指數平滑預測的對比,包含預處理、模型構建和和可視化輸出。模擬預測若干年的GDP,訂閱后可查看完整代碼,有中文注釋

代碼實現了灰色預測模型GM(1,1)在GDP預測中的應用,并結合線性回歸、二次多項式回歸和指數平滑模型進行對比分析。代碼包含數據預處理、模型構建、可視化輸出和誤差驗證四個核心模塊,實現了從數據輸入到預測結果展示的全流程。 文章目錄 運行結果 MATLAB源代碼 GM(1,1)模型數學…

搜索二維矩陣Ⅱ C++

編寫一個高效的算法來搜索 m x n 矩陣 matrix 中的一個目標值 target 。該矩陣具有以下特性&#xff1a; 每行的元素從左到右升序排列。 每列的元素從上到下升序排列。class Solution { public:bool searchMatrix(vector<vector<int>>& matrix, int target) {i…