Spring AI Alibaba从入门到精通-01-概述&快速入门【三更草堂】

205 阅读4分钟

概述

Spring AI Alibaba是什么?

Spring AI Alibaba(SAA) 是一款以 Spring AI 为基础,深度集成百炼平台,支持 ChatBot、工作流、多智能体应用开发模式的 AI 框架。 在这里插入图片描述 Spring AI Alibaba 提供以下核心能力,让开发者可以快速构建自己的 Agent、Workflow 或 Multi-agent 应用。

为什么要学习Spring AI Alibaba?

在生成式 AI 浪潮席卷全球的今天,Java 开发者正面临一个尴尬的困境:一方面,企业级应用对 AI 能力的需求爆炸式增长;另一方面,主流 AI 开发工具链几乎被 Python 生态垄断。Spring AI Alibaba 的出现,为 Java 开发者打开了一扇通往 AI 时代的大门。

主要功能

  • 统一接口,一次编写,多处使用,配置简单,学习成本低
  • 支持多模态(文本、图像、语音)、流式响应、提示词模板、RAG、函数调用、MCP等
  • 深度集成阿里云生态(百炼、MaaS),对国产模型支持好,企业级内容安全有保障
  • 提供多智能体框架、微服务无缝集成、强大的可扩展性和灵活性
  • 开箱即用,自动化配置,显著减少底层适配工作,专注业务创新

快速入门

案例目标

使用Spring AI Alibaba 调用智谱AI 的模型完成单个问题的回答 为什么使用智谱AI? 智谱清言本身是国内领先的大模型厂商,并且注册就送2000万Tokens,非常适合初学者学习使用。

同时也是让大家知道Spring AI Alibaba怎么去使用不同的模型。并非只能使用阿里的千问模型

准备工作

注册智谱AI并创建API Key

注册链接: 智谱AI注册

创建API Key 我们的调用模型的时候需要使用API Key进行身份验证。所以需要参加一个API Key。创建完后避免暴露。 创建API Key地址 在这里插入图片描述 创建好后,复制对应的key

在这里插入图片描述

使用ApiFox调用模型

我们先使用接口的调用下模型测试下key是否正常可用。 同时也是也是让大家原始的模型调用。后面我们在使用Spring AI Alibaba的时候也更容易理解。

每个模型都有自己的API文档。我们去看下智谱AI的API文档。(可以先在官网上测试接口) 智谱API文档

curl -X POST "https://open.bigmodel.cn/api/paas/v4/chat/completions" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
    "model": "glm-4.5",
    "messages": [
        {
            "role": "system",
            "content": "你是一个有用的AI助手。"
        },
        {
            "role": "user",
            "content": "你好,请介绍一下自己。"
        }
    ],
    "temperature": 0.6,
    "stream": true
}'

把curl复制到apifox,然后把自己的API Key替换上去。 在这里插入图片描述 然后点击发送即可。

由于上面请求的stream是true。所以结果是流式输出。 在这里插入图片描述

如果想在ApiFox上看合并的结果。 可以自定义提取规则后点击自动合并。 我们是需要把 choices的第一个元素里的delta字段的content的内容合并在一起。 所以提取规则可以写成:$.choices[0].delta.content 具体规则可以看:提取规则

把API Key写入环境

为了避免把我们的API Key明文写入代码或者配置文件中。我们可以把API Key存储到系统的环境变量中。然后工程中去引用对应的环境变量。

系统写入方式
windows通过系统属性 GUI 操作,添加环境变量 ZHIPU_KEY 值为 你的API Key
macos在 ~/.bashrc, ~/.zshrc或 ~/.profile 中写入 export ZHIPU_KEY="创建的key"

创建父工程

在父工程中定义版本 JDK:17 (官方最低要求17) SpringAI :1.0.0 Spring AI Alibaba : 1.0.0.2

pom.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>
    <groupId>com.sangeng</groupId>
    <artifactId>springai-examples</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <modules>
        <module>01_springai-alibaba-quick-start</module>
    </modules>

    <properties>
        <project.version>1.0-SNAPSHOT</project.version>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

        <spring-ai.version>1.0.0</spring-ai.version>
        <spring-ai-alibaba.version>1.0.0.2</spring-ai-alibaba.version>

        <!-- Spring Boot -->
        <spring-boot.version>3.4.0</spring-boot.version>

        <!-- maven plugin -->
        <maven-deploy-plugin.version>3.1.1</maven-deploy-plugin.version>
        <flatten-maven-plugin.version>1.3.0</flatten-maven-plugin.version>
        <maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.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>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>



    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-deploy-plugin</artifactId>
                <version>${maven-deploy-plugin.version}</version>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven-compiler-plugin.version}</version>
                <configuration>
                    <release>17</release>
                    <compilerArgs>
                        <compilerArg>-parameters</compilerArg>
                    </compilerArgs>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>flatten-maven-plugin</artifactId>
                <version>${flatten-maven-plugin.version}</version>
                <inherited>true</inherited>
                <executions>
                    <execution>
                        <id>flatten</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>flatten</goal>
                        </goals>
                        <configuration>
                            <updatePomFile>true</updatePomFile>
                            <flattenMode>ossrh</flattenMode>
                            <pomElements>
                                <distributionManagement>remove</distributionManagement>
                                <dependencyManagement>remove</dependencyManagement>
                                <repositories>remove</repositories>
                                <scm>keep</scm>
                                <url>keep</url>
                                <organization>resolve</organization>
                            </pomElements>
                        </configuration>
                    </execution>
                    <execution>
                        <id>flatten.clean</id>
                        <phase>clean</phase>
                        <goals>
                            <goal>clean</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

入门案例编写

创建入门案例,添加依赖

<?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.sangeng</groupId>
        <artifactId>springai-examples</artifactId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <artifactId>01_springai-alibaba-quick-start</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</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>org.springframework.ai</groupId>
            <artifactId>spring-ai-starter-model-zhipuai</artifactId>
        </dependency>
    </dependencies>

</project>

由于我们调用的是智谱AI所有所有的是:spring-ai-starter-model-zhipuai 其内部封装了和智谱AI对接的实现细节。让我们能更专注于业务逻辑的开发。

修改配置

server:
  port: 8080

spring:
  ai:
    zhipuai:
      api-key: ${ZHIPU_KEY}
      base-url: "https://open.bigmodel.cn/api/paas"
      chat:
        options:
          model: glm-4.5

使用 ${ZHIPU_KEY} 获取 我们环境变量中的 API Key. 注意:配置的完环境变量后需要重启IDE。否则会导致读取不到环境变量。

编写代码

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

编写接口

@RestController
@RequestMapping("/zhipuai")
public class ZhipuChatController {

    private final ChatModel chatModel;

    public ZhipuChatController(ChatModel chatModel) {
        this.chatModel = chatModel;
    }

    @GetMapping("/simple")
    public String simpleChat(@RequestParam(name = "query") String query) {
        return chatModel.call(query);
    }

从容器中注入一个ChatModel 对象。接口中调用其call方法传入问题即可。

测试

http://localhost:8080/zhipuai/simple?query=你是谁 在这里插入图片描述

至此我们就完成了入门案例,使用Spring AI Alibaba调用智谱AI模型