Spring AI 系列之二十七 - Spring AI Alibaba-入门

之前做个几个大模型的应用,都是使用Python语言,后来有一个项目使用了Java,并使用了Spring AI框架。随着Spring AI不断地完善,最近它发布了1.0正式版,意味着它已经能很好的作为企业级生产环境的使用。对于Java开发者来说真是一个福音,其功能已经能满足基于大模型开发企业级应用。借着这次机会,给大家分享一下Spring AI框架。

注意由于框架不同版本改造会有些使用的不同,因此本次系列中使用基本框架是 Spring AI-1.0.0,JDK版本使用的是19,Spring-AI-Alibaba-1.0.0.3-SNAPSHOT
代码参考: https://github.com/forever1986/springai-study

目录

  • [1 Spring AI Alibaba](#1 Spring AI Alibaba)
    • [1.1 什么是Spring AI Alibaba](#1.1 什么是Spring AI Alibaba)
    • [1.2 项目介绍](#1.2 项目介绍)
    • [1.3 核心组件](#1.3 核心组件)
  • [2 入门示例](#2 入门示例)
    • [2.1 申请API KEY](#2.1 申请API KEY)
    • [2.2 代码](#2.2 代码)
    • [2.3 演示效果](#2.3 演示效果)

前面几乎讲了整个Spring AI的内容,相信在学习的朋友应该能够知道如何使用。但是作为中国的开发者,比较痛苦的就是很多大模型的内容无法访问,很多模型无法使用。而Spring AI更是不会去考虑中国的开发者,因此可以看到里面的模型很多都是国外的,并且其实Spring AI中对于图像、音频、视频等大模型支持还是有限的。

那么作为中国的开发者,也是比较幸运的,这时候有一个框架可以了解一下:Spring AI Alibaba,一个为中国开发者而生的框架Spring AI。

1 Spring AI Alibaba

1.1 什么是Spring AI Alibaba

Spring AI Alibaba 开源项目基于 Spring AI 构建,是阿里云通义系列模型及服务在 Java AI 应用开发领域的最佳实践,提供高层次的 AI API 抽象与云原生基础设施集成方案,帮助开发者快速构建 AI 应用。简单来说:如果学了Spring AI,那么Spring AI Alibaba几乎零成本就可以上手,同时还可以使用其应用开发领域的最佳实践方法。
其github地址https://github.com/alibaba/spring-ai-alibaba/
其官方文档https://java2ai.com/docs/1.0.0.2/overview/

其框架大体如下:

  • Agentic Framework :基于 Spring AI Alibaba Graph 开发者可快速构建工作流、多智能体应用,无需关心流程编排、上下文记忆管理等底层实现。通过 Graph 与低代码、自规划智能体结合,为开发者提供从低代码、高代码到零代码构建智能体的更灵活选择。
  • Development Tools & Community :主要为了解决企业智能体落地过程中关心的痛点问题。Spring AI Alibaba 支持与百炼平台深度集成,提供模型接入、RAG知识库解决方案;支持 ARMS、Langfuse 等可观测产品无缝接入;支持企业级的 MCP 集成,包括 Nacos MCP Registry 分布式注册与发现、自动 Router 路由等。
  • Agents :社区发布了基于 Spring AI Alibaba 框架实现的 JManus 智能体,除了对标 OpenManus 的通用智能体能力外,其目标是基于 JManus 探索自主规划在智能体开发方向的应用,为开发者提供从低代码、高代码到零代码构建智能体的更灵活选择。

总体来说,Spring AI Alibaba基于Spring AI的框架,在上层构建了一个企业级Agents实现的解决方案,并深度的融合百炼平台。在《Spring AI 系列之二十 - Hugging Face 集成》中讲过Hugging Face通过云部署方式统一了大模型的访问,而百炼平台也是具备同样的功能,而且百炼平台有更多的国内开源模型,并支持更多实际业务场景的实践。

1.2 项目介绍

目前Spring AI Alibaba也发布了基于Spring AI 1.0.0的正式版:1.0.0.2:(注意:本次实验采用1.0.0.3-SNAPSHOT版本,由于1.0.0.2还存在一些问题,因此采用最新的1.0.0.3-SNAPSHOT

xml 复制代码
<dependencyManagement>
    <dependencies>
        <!-- spring ai alibaba 插件统一版本号管理-->
        <dependency>
            <groupId>com.alibaba.cloud.ai</groupId>
            <artifactId>spring-ai-alibaba-bom</artifactId>
            <version>1.0.0.2</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
	<!-- spring ai alibaba 模型服务适配插件-->
	<dependency>
	   <groupId>com.alibaba.cloud.ai</groupId>
	    <artifactId>spring-ai-alibaba-starter-dashscope</artifactId>
	</dependency>
</dependencies>

下面通过mvn dependency:tree命令看看基础模型组件dashscope包括什么内容:

从上图可以知道其依赖了Spring AI底层的核心模块:commons、model、rag、client-chat等,再加上自身的模块。之前非正式版的Spring AI Alibaba版本比较臃肿,包括了比较多的内容,现在已经将这些内容外移,需要时才引入,只保留最基本的内容。下面大概来看看Spring AI Alibaba除了上面的核心jar包外,还有哪些相关重要的组件。

1.3 核心组件

以下是目前Spring AI Alibaba的相关组件,

  • spring-ai-alibaba-bom :用于为所有组件做统一版本管理
  • spring-ai-alibaba-starter-dashscope :百炼模型服务适配,基于百炼平台部署的大模型都可以使用
  • spring-ai-alibaba-starter-nacos-prompt :Nacos Prompt 管理,基于Nacos动态的Promt模版管理
  • spring-ai-alibaba-starter-memory :会话记忆组件。扩展存储类型:redis、oracle、es等等
  • spring-ai-alibaba-starter-nacos-mcp-client :Nacos MCP 客户端,推荐 Nacos 3.0.1 版本。Nacos2 Server 用户请用老版本(spring-ai-alibaba-starter-nacos2-mcp-client)
  • spring-ai-alibaba-starter-nacos-mcp-server :Nacos MCP 服务端,推荐 Nacos 3.0.1 版本。Nacos2 Server 用户请用老版本(spring-ai-alibaba-starter-nacos2-mcp-server)
  • spring-ai-alibaba-graph-core :智能体 Graph 框架核心组件,这个是构建Agent、工作流等底层框架
  • spring-ai-alibaba-starter-nl2sql :自然语言到 SQL 转换组件,一个较为复杂的 AI 应用场景:自然语言转SQL语句,底层基于graph完成的
  • community 增加了更多生态集成
    • spring-ai-alibaba-starter-tool-calling-* :工具调用组件,集成更多生态工具
    • spring-ai-alibaba-starter-document-reader-* :文档读取组件,集成更多生态文档读取
  • spring-ai-alibaba-starter-arms-observation :ARMS 可观测

从上面来看,其除了集成Spring AI原先基本功能(模型调用、聊天记忆、提示词、工具调用、ETL等功能)之外,有些做了扩展功能,有些基于企业级应用场景的框架等,本次将会讲解每个核心组件的内容,本章先从一个入门示例开始,了解第一个dashscope组件。

2 入门示例

代码参考lesson24子模块下面的ali-get-start子模块
示例说明:快速搭建一个聊天模型deepseek模型

2.1 申请API KEY

1)由于需要访问,可以在百炼平台注册用户,前180天有百万级别的token免费使用

2)打开API KEY 界面

3)创建API KEY

2.2 代码

1)在springai-study模块的pom中引入spring-ai-alibaba的版本管理,同时由于使用SNAPSHOT插件,引入oss.sonatype.org的Maven仓库

xml 复制代码
<properties>
    <spring-ai-alibaba.version>1.0.0.3-SNAPSHOT</spring-ai-alibaba.version>
</properties>
<dependencyManagement>
    <dependencies>
        <!-- spring ai alibaba 插件-->
        <dependency>
            <groupId>com.alibaba.cloud.ai</groupId>
            <artifactId>spring-ai-alibaba-bom</artifactId>
            <!-- 版本号为1.0.0.3-SNAPSHOT-->
            <version>${spring-ai-alibaba.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<!-- maven仓库 -->
<repositories>
    <repository>
        <id>sonatype</id>
        <name>OSS Sonatype</name>
        <url>https://oss.sonatype.org/content/groups/public/</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>

2)新建lesson24子模块

3)在lesson24子模块下,新建ali-get-start子模块,其pom引入如下:

xml 复制代码
<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>

4)创建application.properties配置文件

text 复制代码
spring.ai.dashscope.api-key=你的阿里百炼API KEY

5)创建DemoController 演示类:

java 复制代码
import com.alibaba.cloud.ai.dashscope.chat.DashScopeChatOptions;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoController {

    private final ChatClient dashScopeChatClient;

    public DemoController(ChatClient.Builder chatClientBuilder) {
        this.dashScopeChatClient = chatClientBuilder
                .defaultSystem( "你是一个博学的智能聊天助手,请根据用户提问回答!")
                // 实现 Logger 的 Advisor
                .defaultAdvisors(
                        new SimpleLoggerAdvisor()
                )
                // 设置 ChatClient 中 ChatModel 的 Options 参数
                .defaultOptions(
                        DashScopeChatOptions.builder()
                                .withModel("deepseek-r1") // 设置deepseek-r1模型,默认是qwen-plus
                                .withTopP(0.7)
                                .build()
                )
                .build();
    }

    @GetMapping("/ai/generate")
    public String generate(@RequestParam(value = "message", defaultValue = "你是谁?") String message) {
        return dashScopeChatClient.prompt(message).call().content();
    }

}

6)创建Lesson24GetStartApplication 启动类:

java 复制代码
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Lesson24GetStartApplication {

    public static void main(String[] args) {
        SpringApplication.run(Lesson24GetStartApplication.class, args);
    }

}

2.3 演示效果

text 复制代码
http://localhost:8080/ai/generate

说明 :从上面可以看出,其编码和Spring AI一模一样,代码都不需要做任何修改即可使用。当然涉及到新的模块功能,可能需要学习。而百炼平台支持的模型可以参考其官方文档,几乎涵盖了国内外所有开源模型。
结语:本章通过简单介绍Spring AI Alibaba是什么,以及为什么适合中国开发者。然后使用一个示例演示作为入门,可以看到其使用与Spring AI并无差别,这样就可以接入国内大多数大模型问题,关键是还提供很多免费token使用。

Spring AI系列上一章:《Spring AI 系列之二十六 - 可观测

Spring AI系列下一章:《Spring AI 系列之二十八 - Spring AI Alibaba-基于Nacos的prompt模版