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

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

相关推荐
Engineer邓祥浩2 小时前
JVM学习笔记(1) 总述
jvm·笔记·学习
Memory_荒年2 小时前
大模型“全家桶”:除了Transformer,还有这些“配料”值得品!
人工智能
RPA机器人就用八爪鱼2 小时前
AI与RPA融合:安全挑战与落地实践指南
大数据·人工智能·机器人·rpa
码路高手2 小时前
Trae-Agent中的system_prompt
人工智能
阿里巴巴终端技术2 小时前
[第 20 届 D2 倒计时] 7 大专场演讲、44 个精彩话题、D2 之夜畅聊 AI + 终端的发展前景
前端·人工智能·程序员
AndrewHZ2 小时前
【大模型通关指南】2. 大模型发展时间线:从GPT-1到当前主流模型的演进逻辑
人工智能·gpt·语言模型·大模型·llm·主流模型
AI专业测评2 小时前
2026年AIGC“零成本”全自动化写作管线评测:主流免费AI长文本工具工程解析
人工智能·自动化·aigc
海兰2 小时前
利用Elastic构建欺诈检测框架
大数据·人工智能·ubuntu
彭于晏Yan2 小时前
Redis缓存更新策略
spring boot·redis·spring·缓存