欢迎光临
我们一直在努力

Spring AI Alibaba入门学习(一)

一、概念

  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>
<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>
</properties>

<dependencyManagement>
<dependencies>
<!– Spring Boot –>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!– Spring AI Alibaba –>
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-bom</artifactId>
<version>${SpringAIAlibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!– Spring AI –>
<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>

主要版本:

<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-8

spring:
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名称即可。

以上内容基于尚硅谷视频学习后总结。

赞(0)
未经允许不得转载:171主机测评 » Spring AI Alibaba入门学习(一)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址