概述
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模型