一、概念
Spring AI Alibaba是一款以Spring AI为基础,深度集成百炼平台,支持ChatBot、工作流、多智能体应用开发模式的AI框架。
Spring AI Alibaba 开源项目基于 Spring AI 构建,是阿里云通义系列模型及服务在 Java AI 应用开发领域的最佳实践,提供高层次的 AI API 抽象与云原生基础设施集成方案和企业级 AI 应用生态集成。Agentic AI Framework for Java Developers。
SpringAI官网:https://spring.io/projects/spring-ai#learn
Spring AI Alibaba:https://java2ai.com/
阿里云百炼平台:https://bailian.console.aliyun.com/console?tab=model#/model-market
我个人的简单理解就是通过java构建ai应用的桥梁。
附上官网一张图:

二、第一个Demo
2.1 前置工作(大模型调用三件套)
- 获取平台api-key

- 获取模型名

在模型广场-全部模型里找到要调用的模型,点进去,复制模型code

- 获取baseurl

2.2 配置及编码
-
新建maven父工程
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion><groupId>com.wx</groupId>
<artifactId>spring-ai-alibaba</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>SpringAIAlibaba-Maven</name>
<modules>
<module>demo1</module>
</modules></properties> <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>${SpringAIAlibaba.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.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring-boot.version}</version> </plugin> </plugins> </build> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> </project><properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <maven.compiler.source>21</maven.compiler.source> <maven.compiler.target>21</maven.compiler.target> <java.version>21</java.version> <spring-boot.version>3.5.5</spring-boot.version> <spring-ai.version>1.0.0</spring-ai.version> <SpringAIAlibaba.version>1.0.0.2</SpringAIAlibaba.version>
主要版本:
<java.version>21</java.version>
<spring-boot.version>3.5.5</spring-boot.version>
<spring-ai.version>1.0.0</spring-ai.version>
<SpringAIAlibaba.version>1.0.0.2</SpringAIAlibaba.version>
- 新建子工程
pom如下,主要引入灵积服务依赖
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.wx</groupId>
<artifactId>spring-ai-alibaba</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>demo1</artifactId>
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 引入 springai alibaba DashScope 模型适配的 Starter -->
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--hutool-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.22</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.9.0</version>
<configuration>
<compilerArgs>
<arg>-parameters</arg>
</compilerArgs>
<source>21</source>
<target>21</target>
</configuration>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</project>
-
添加yml配置文件
server:
port: 8001
servlet:
encoding:
enabled: true
force: true
charset: UTF-8spring:
application:
name: demo1# SpringAI Alibaba 配置 ai: dashscope: api-key: ${aliQwen-api} base-url: https://dashscope.aliyuncs.com/compatible-mode/v1 chat: options: model: qwen-plus大模型对话中文乱码UTF8编码处理(已在server.servlet.encoding中配置)
其中,api-key配置系统环境变量,如下,key是自己命名的aliQwen-api,值就是 百炼平台获取的秘钥。秘钥,base-url和model名均从以上前置工作中获取。

-
配置类
package com.wx.config;
import com.alibaba.cloud.ai.dashscope.api.DashScopeApi;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/**
-
@Description
-
@author: wangxin
-
@date: 2026/3/7 20:40
*/
@Configuration
public class LLMConfig {/**
- 方式1:${}
- 持有yml文件配置:spring.ai.dashscope.api-key={aliQwen-api}
*/
@Value("{spring.ai.dashscope.api-key}")
private String apiKey;
@Bean
public DashScopeApi dashScopeApi()
{
return DashScopeApi.builder().apiKey(apiKey).build();
}
}
-
-
controller
package com.wx.controller;
import jakarta.annotation.Resource;
import org.springframework.ai.chat.model.ChatModel;
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 reactor.core.publisher.Flux;/**
-
@Description
-
@author: wangxin
-
@date: 2026/3/7 20:42
*/
@RestController
public class ChatController {@Resource
private ChatModel chatModel;@GetMapping("/test/chat")
public String testChat(@RequestParam(name = "msg", defaultValue = "你是谁") String msg) {String call = chatModel.call(msg); System.out.println("大模型返回:" + call); return call;}
@GetMapping("/test/stream")
public Flux<String> testStream(@RequestParam(name = "msg", defaultValue = "你是谁") String msg) {return chatModel.stream(msg);}
}
-
-
测试


chat和stream输出的区别就是一个是一次性返回,一个是像挤牙膏一样一点一点返回。
- 切换大模型
类似千问,切换deepseek其他大模型,只需要替换base-url和model名称即可。
以上内容基于尚硅谷视频学习后总结。