目錄
前言:
一、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=你是誰?即可!