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

主要版本:

复制代码
<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名称即可。

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

相关推荐
爱学习的小囧2 分钟前
VCF 9.0+Harbor 搭建私有 AI 模型仓库(PAIS)超详细教程
服务器·人工智能·虚拟化·esxi8.0
YoanAILab7 分钟前
从 CoT、RAG 到 Dify、Deep Research:一篇讲清 AI 问答系统的两条进化路线
人工智能·cot·dify·rag·deepresearch
GEO索引未来15 分钟前
一文说清2026年GPT 卖货两种方式
人工智能·gpt·ai·chatgpt
2501_9458374327 分钟前
OpenClaw:让 AI 从 “动口” 到 “动手” 的本地智能执行引擎
人工智能
一山秋叶35 分钟前
EDM 框架下的扩散模型们
人工智能·aigc·stablediffusion
咕噜企业分发小米37 分钟前
GPUStack × CherryStudio:为企业用户构建安全可靠的本地私有化 AI 助手(中)
人工智能
Yolo566Q37 分钟前
基于Python语言快速批量运行DSSAT模型及交叉融合、扩展应用技术应用
大数据·人工智能
KuAI_KST39 分钟前
2026 抖音私信 AI 客服实战手册:快商通 AI 与人工回复转化对比实测
大数据·人工智能·机器学习
OpenCSG1 小时前
AI 公司 Cohere 正式发布了其首款语音模型 Cohere Transcribe
人工智能