跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
JavaAIjava

Spring AI Alibaba 快速入门指南

综述由AI生成Spring AI Alibaba 是阿里云基于 Spring AI 扩展的第三方适配方案,专注于集成阿里云 AI 服务。文章对比了其与原生 Spring AI 在官方属性、覆盖范围及依赖关系上的差异。内容涵盖申请阿里云百炼 API Key 的步骤,以及基于 Spring Boot 搭建 Hello World 项目的完整流程,包括 Maven 配置、Controller 编写和 ChatClient 的简单调用、流式输出及记忆功能测试。

不羁发布于 2025/12/12更新于 2026/5/2816 浏览

Spring AI Alibaba 简介

Spring AI Alibaba(SAA)是一款以 Spring AI 为基础,深度集成百炼平台,支持 ChatBot、工作流、多智能体应用开发模式的 AI 框架。

Spring AI 和 Spring AI Alibaba 是生态关联但定位、范围、主导方完全不同的两个技术体系,核心区别在于是否为官方生态、覆盖范围、适配场景。

一、核心定位与主导方

维度Spring AISpring AI Alibaba
官方属性Spring 官方生态项目阿里云基于 Spring AI 扩展的第三方适配方案
核心定位通用 AI 应用开发框架阿里云 AI 服务的 Spring 生态集成方案
主导团队Spring 社区阿里云技术团队
生态归属Spring 官方核心生态阿里云开源生态

二、覆盖范围与适配能力

1. Spring AI:通用抽象 + 多厂商适配

Spring AI 的核心目标是屏蔽不同 AI 厂商的接口差异,提供一套统一的 Java API,让开发者无需修改代码即可切换不同 AI 服务。

  • 适配的 AI 厂商/服务:大模型(OpenAI、Anthropic、Google Gemini 等)、向量存储(Redis、Milvus 等)、其他云厂商 AI 平台。
  • 核心能力:通用 LLM 调用、函数调用、向量检索、AI 流式响应、提示词模板、AI 工作流等。
  • 适用场景:需要跨 AI 厂商适配、追求技术中立性的通用 AI 应用。

2. Spring AI Alibaba:阿里云专属适配

Spring AI Alibaba 并非独立框架,而是基于 Spring AI 的官方接口,为阿里云 AI 产品提供的专属适配器。

  • 适配的 AI 服务:通义千问、通义视觉、通义听悟、阿里云向量数据库等。
  • 核心能力:复用 Spring AI 的统一 API,快速接入阿里云 AI 服务,补充阿里云专属特性(如 AK/SK 鉴权、地域路由)。
  • 适用场景:已使用阿里云生态且需要接入阿里云 AI 产品的 Spring 应用。

三、技术架构与依赖关系

  • 依赖关系:Spring AI Alibaba 必须依赖 Spring AI 的核心包,本质是 Spring AI 的厂商适配模块。
  • 独立性:Spring AI 可独立使用;Spring AI Alibaba 不能独立使用,必须搭配 Spring AI 核心依赖。

四、关键差异总结表

对比维度Spring AISpring AI Alibaba
官方属性Spring 官方项目阿里云第三方适配方案
覆盖范围多厂商 AI 服务 + 开源 AI 组件仅阿里云 AI 服务
核心价值统一 AI 编程接口,技术中立
简化阿里云 AI 服务接入
依赖关系可独立使用必须依赖 Spring AI 核心包
适用场景跨厂商 AI 适配、开源 AI 项目阿里云生态用户

对于国内 Java 程序员来说,使用 Spring AI Alibaba 上手比较容易,申请一个阿里云百炼的 Key 就可以进行测试。

申请阿里云百炼 Api Key

访问阿里云百炼平台控制台,使用账号登录后,选择 模型服务 里面的 密钥管理。

创建 API Key,该 Key 将在后续开发中频繁使用。

项目搭建

项目结构

采用 Maven 多模块结构。

父 pom 文件

在父 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>
    <groupId>org.demo.ai</groupId>
    <artifactId>spring-ai-alibaba</artifactId>
    <version>${revision}</version>
    <packaging>pom</packaging>
    <description>Spring AI Alibaba Examples</description>
    <properties>
        <revision>1.0.0</revision>
        <java.version>17</java.version>
        <spring-ai.version>1.0.0</spring-ai.version>
        <spring-ai-alibaba.version>1.0.0.3</spring-ai-alibaba.version>
        <spring-boot.version>3.5.5</spring-boot.version>
    </properties>
    <modules>
        <module>boot-ai-helloworld</module>
    </modules>
    <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>org.springframework.ai</groupId>
                <artifactId>spring-ai-bom</artifactId>
                <version>${spring-ai.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud.ai</groupId>
                <artifactId>spring-ai-alibaba-bom</artifactId>
                <version>${spring-ai-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <repositories>
        <repository>
            <id>aliyunmaven</id>
            <name>aliyun</name>
            <url>https://maven.aliyun.com/repository/public</url>
        </repository>
    </repositories>
</project>

子模块 boot-ai-helloworld

子 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>org.demo.ai</groupId>
        <artifactId>spring-ai-alibaba</artifactId>
        <version>${revision}</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
    <artifactId>boot-ai-helloworld</artifactId>
    <version>${revision}</version>
    <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>
配置文件
server:
  port: 18080
spring:
  application:
    name: spring-ai-alibaba-helloworld
  ai:
    dashscope:
      api-key: {替换成阿里云百炼上的 API Key}
启动类
package org.demo.ai.bailian;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class BailianAgentApplication {
    public static void main(String[] args) {
        SpringApplication.run(BailianAgentApplication.class, args);
    }
}
Controller 层

使用 ChatClient 类与大模型交互。

package org.demo.ai.bailian.controller;

import com.alibaba.cloud.ai.dashscope.chat.DashScopeChatOptions;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor;
import org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;
import org.springframework.ai.chat.memory.ChatMemory;
import org.springframework.ai.chat.memory.MessageWindowChatMemory;
import org.springframework.web.bind.annotation.*;
import reactor.core.publisher.Flux;

@RestController
@RequestMapping("/helloworld")
public class HelloworldController {

    private static final String DEFAULT_PROMPT = "你是一个博学的智能聊天助手,请根据用户提问回答!";
    private final ChatClient dashScopeChatClient;

    public HelloworldController(ChatClient.Builder chatClientBuilder) {
        this.dashScopeChatClient = chatClientBuilder
                .defaultSystem(DEFAULT_PROMPT)
                .defaultAdvisors(MessageChatMemoryAdvisor.builder(MessageWindowChatMemory.builder().build()).build())
                .defaultAdvisors(new SimpleLoggerAdvisor())
                .defaultOptions(DashScopeChatOptions.builder().withTopP(0.7).build())
                .build();
    }

    /**
     * ChatClient 简单调用
     */
    @GetMapping("/simple/chat")
    public String simpleChat(@RequestParam(value = "query", defaultValue = "你好") String query) {
        return dashScopeChatClient.prompt(query).call().content();
    }

    /**
     * ChatClient 流式调用
     */
    @GetMapping("/stream/chat")
    public Flux<String> streamChat(@RequestParam(value = "query", defaultValue = "你好") String query,
                                   HttpServletResponse response) {
        response.setCharacterEncoding("UTF-8");
        return dashScopeChatClient.prompt(query).stream().content();
    }

    /**
     * ChatClient 使用自定义的 Advisor 实现功能增强
     */
    @GetMapping("/advisor/chat/{conversationId}")
    public Flux<String> advisorChat(HttpServletResponse response,
                                    @PathVariable String conversationId,
                                    @RequestParam String query) {
        response.setCharacterEncoding("UTF-8");
        return this.dashScopeChatClient
                .prompt(query)
                .advisors(a -> a.param(ChatMemory.CONVERSATION_ID, conversationId))
                .stream()
                .content();
    }
}

测试

测试一:访问简单 chat

访问链接:/helloworld/simple/chat

测试二:访问流式输出

访问链接:/helloworld/stream/chat

测试三:带有记忆的输出

  1. 先访问:/helloworld/advisor/chat/123?query=你好,我叫 jack
  2. 再访问:/helloworld/advisor/chat/123?query=我叫什么名字?

通过设置 conversationId 参数,将对话历史记录存储到 ChatMemory 中,后续对话会将之前的历史记录作为上下文。

目录

  1. Spring AI Alibaba 简介
  2. 一、核心定位与主导方
  3. 二、覆盖范围与适配能力
  4. 1. Spring AI:通用抽象 + 多厂商适配
  5. 2. Spring AI Alibaba:阿里云专属适配
  6. 三、技术架构与依赖关系
  7. 四、关键差异总结表
  8. 申请阿里云百炼 Api Key
  9. 项目搭建
  10. 项目结构
  11. 父 pom 文件
  12. 子模块 boot-ai-helloworld
  13. 子 pom 文件
  14. 配置文件
  15. 启动类
  16. Controller 层
  17. 测试
  18. 测试一:访问简单 chat
  19. 测试二:访问流式输出
  20. 测试三:带有记忆的输出
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 华人团队利用大模型实现非侵入式脑电波转文字技术
  • 零基础转行AI产品经理:核心能力与职业发展指南
  • NPlayer 开源视频播放器使用指南
  • C 语言实现磁力计硬铁/软铁校准:3 步解决无人机航向漂移问题
  • 前端 SPA 分布式部署实践:基于 iframe 的微前端探索
  • C++ 数据结构:哈希表原理与 STL 实现
  • 房屋租赁管理系统的设计与实现
  • 虾聊 ClawdChat.ai:全球首个面向 AI 的中文社交平台
  • 网络安全工程师职业定义、核心技能与认证体系详解
  • 基于 YOLOv 的 Web 目标检测系统开发与部署实战
  • ASP.NET 页面输出二进制图像方法
  • Python 框架 datastream.io:实时异常检测
  • DeepSeek Janus-Pro 多模态大模型本地部署指南
  • 华为 Eve 多模态模型:弹性视觉专家架构与性能分析
  • Python 兼职开发指南:从入门到接单实战
  • Flutter 三方库 bones_ui 的鸿蒙化适配指南
  • DeepSeek-R1 大模型基于 MS-Swift 框架的部署与微调实战
  • Python 安装与环境配置指南
  • Python 语法速览与实战清单
  • LangChain 核心模块详解与实战指南

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online