Spring AI Alibaba零基础速成(1) ---- 项目创建与配置

1. 创建父项目

2. 配置依赖版本

XML 复制代码
<?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>
    <packaging>pom</packaging>
    <groupId>com.ting.study</groupId>
    <artifactId>SpringAiAlibaba</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>SpringAiAlibaba</name>
    <description>SpringAiAlibaba</description>

    <properties>
        <maven.compiler.source>21</maven.compiler.source>
        <maven.compiler.target>21</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>21</java.version>
        <spring-boot.version>3.5.14</spring-boot.version>
        <spring.cloud.version>2025.0.0</spring.cloud.version>
        <spring.cloud.alibaba.version>2025.0.0.0</spring.cloud.alibaba.version>
        <spring-ai.version>1.1.2</spring-ai.version>
        <springAIAlibaba.version>1.1.2.0</springAIAlibaba.version>
        <springAIAlibaba.extensions.version>1.1.2.1</springAIAlibaba.extensions.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>
            <!-- AI 主 BOM -->
            <dependency>
                <groupId>com.alibaba.cloud.ai</groupId>
                <artifactId>spring-ai-alibaba-bom</artifactId>
                <version>${springAIAlibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!-- AI 扩展 BOM  -->
            <dependency>
                <groupId>com.alibaba.cloud.ai</groupId>
                <artifactId>spring-ai-alibaba-extensions-bom</artifactId>
                <version>${springAIAlibaba.extensions.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!-- Spring AI BOM -->
            <dependency>
                <groupId>org.springframework.ai</groupId>
                <artifactId>spring-ai-bom</artifactId>
                <version>${spring-ai.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- ====================== 微服务相关 ====================== -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring.cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring.cloud.alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

3. 创建服务

4. 编写配置与依赖

XML 复制代码
server:
  port: 8001
  #大模型对话中文乱码UTF8处理
  servlet:
    encoding:
      enabled: true
      force: true
      charset: UTF-8


spring:
  application:
    name: SAA-01HelloWorld

  # Spring AI 核心配置(对接阿里云百炼DashScope大模型)
  ai:
    #阿里云通义千问专属配置
    dashscope:
      # 🔥 阿里云API-KEY(必须,身份鉴权,从阿里云百炼平台获取)
      api-key: sk-d237a698e877577a8

      # ---------------- 聊天对话模型配置 ----------------
      chat:
        # 模型调用参数配置
        options:
          # 指定使用的模型名称(必须正确,否则调用失败)
          model: qwen-plus
      # SDK调用的基础地址(兼容OpenAI格式接口,固定写法)
      base-url: https://dashscope.aliyuncs.com/

注意:API-KEY通常不会明文配置,可以配置在系统环境变量中:

以如下形式使用

XML 复制代码
<?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.ting.study</groupId>
        <artifactId>SpringAiAlibaba</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <artifactId>SAA-01HelloWorld</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>
        <dependency>
            <groupId>com.alibaba.cloud.ai</groupId>
            <artifactId>spring-ai-alibaba-starter-dashscope</artifactId>
        </dependency>
    </dependencies>

</project>

5. 使用示例

创建配置类:

java 复制代码
package com.ting.saa01.config;

import com.alibaba.cloud.ai.dashscope.api.DashScopeApi;
import com.alibaba.cloud.ai.dashscope.chat.DashScopeChatModel;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SaaLLMConfig {
    @Value("${spring.ai.dashscope.api-key}")
    public String apiKey;

    @Bean
    public DashScopeApi dashScopeApi() {
        return DashScopeApi.builder().apiKey(apiKey).build();
    }

}

DashScopeApi = 客户端连接工具(身份证 + 通行证)代表阿里云百炼的 HTTP 客户端

  • 只干一件事:发送 请求
  • 携带你的 apiKey(身份凭证)
  • 管理 请求地址、请求头、认证
  • 不关心你用什么模型
  • 不关心你问什么问题
  • 它就是一个通用的请求工具

使用示例:

java 复制代码
@RestController
public class ChatHelloController {
    @Autowired
    ChatModel chatModel;
    /**
     * 通用调用
     * @param msg
     * @return
     */
    @GetMapping("/hello/call")
    public String call(@RequestParam(name = "msg", defaultValue = "你是谁") String msg) {
        String result = chatModel.call(msg);
        return result;
    }

    /**
     * 流式返回
     * @param msg
     * @return
     */
    @GetMapping("/hello/stream")
    public Flux<String> stream(@RequestParam(name = "msg", defaultValue = "你是谁") String msg) {
        return chatModel.stream(msg);
    }
}

ChatModel = 对话模型(真正用来聊天的对象)

  • 调用 DashScopeApi 发请求
  • 组装对话消息
  • 解析 AI 返回的结果

6.切换其它大模型

百炼平台也兼容了第三方大模型,我们可以通过,同一套api进行调用:

这里我们使用质谱ai的大模型,只需修改模型名称即可:

7. 如何使用百炼平台不支持的大模型

如果要使用百炼平台不支持的代码需要使用原生Spring AI接口:

引入依赖:

XML 复制代码
        <dependency>
            <groupId>com.alibaba.cloud.ai</groupId>
            <artifactId>spring-ai-alibaba-starter-dashscope</artifactId>
        </dependency>

配置:

java 复制代码
spring:
  application:
    name: SAA-01HelloWorld

#  # Spring AI 核心配置(对接阿里云百炼DashScope大模型)
  ai:
    dashscope:
      # SDK调用的基础地址(兼容OpenAI格式接口,固定写法)
      base-url: https://dashscope.aliyuncs.com/
      # 阿里云API-KEY(必须,身份鉴权,从阿里云百炼平台获取)
      api-key: ${AliQWenAPIKey}
      # ---------------- 聊天对话模型配置 ----------------
      chat:
        # 模型调用参数配置
        options:
          # 指定使用的模型名称(必须正确,否则调用失败)
          model: glm-5.1
    #spring ai
    openai:
      base-url: https://ark.cn-beijing.volces.com/api
      api-key: ${doubaoAPIKey}
      chat:
        options:
          model: doubao-seed-2-0-pro-260215

此时要注意,spring ai alibaba 和 spring ai 都会实现 CharModel接口,会导致Spring容器中有两个bean:

需要指定使用哪一个:

java 复制代码
    @Autowired
    @Qualifier("openAiChatModel")
    ChatModel chatModel;
相关推荐
wang0907几秒前
自己动手写一个spring之系列
spring
WPF工业上位机2 分钟前
YXGK.FakeVM深度学习之5语义分割
人工智能·深度学习
xieliyu.3 分钟前
Java算法精讲:双指针(二)
java·开发语言·算法
落叶无情5 分钟前
ICEF认知操作系统:四类约束全维度全覆盖,是全谱系系统化约束体系
人工智能
碳基硅坊7 分钟前
Gemma 4 12B 让AI创作更私密更高效
人工智能·gemma-4-12b
weixin_468466859 分钟前
大模型新手入门与实战指南
人工智能·深度学习·ai·大模型
装不满的克莱因瓶27 分钟前
掌握 RNN 与 LSTM 模型结构
人工智能·python·rnn·深度学习·神经网络·ai·lstm
jeffer_liu27 分钟前
Spring AI 生产级实战:裁判员
java·人工智能·后端·spring·大模型
weixin_446260851 小时前
Agent 会自行回避吗?测量 LLM 智能体合规性的带内访问拒绝信号
人工智能
Kobebryant-Manba1 小时前
记录动手学深度学习基础知识
人工智能·深度学习