Spring AI 入门示例
目录
本章节通过一个hello world简单示例演示,如何基于Spring Boot集成Spring AI 开源框架,快速集成调用阿里云的百炼大模型AI服务。
欢迎关注我的公众号
1、概念介绍
Spring AI 项目由 Spring 官方开源并维护的 AI 应用开发框架,该项目目标是简化包含人工智能(AI)功能的应用程序的开发,避免不必要的复杂性。该项目从著名的 Python 项目(例如 LangChain 和 LlamaIndex)中汲取灵感,但 Spring AI 并非这些项目的直接移植,该项目的成立基于这样的信念:下一波生成式 AI 应用将不仅面向 Python 开发人员,还将遍及多种编程语言。从本质上讲,Spring AI 解决了 AI 集成的基本挑战:Connecting your enterprise Data and APIs with the AI Models。
2、使用Spring AI 前提条件
JDK为17以上版本,本人使用的jdk17版本;
SpringBoot版本为3.x以上,本项目使用的是SpringBoot 3.3.3版本;
开通阿里大模型服务(目前是免费6个月),获取 API-KEY,后面代码里要使用。具体操作,请参考阿里云大模型服务平台百炼:如何获取API Key_大模型服务平台百炼(Model Studio)-阿里云帮助中心
3、创建SpringBoot工程
通过IDEA开发工具,创建一个普通的Java工程,注意JDK版本至少是17以上,我这里使用的是jdk17版本。
4、配置pom.xml文件
工程创建完成后,在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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.3</version>
</parent>
<groupId>com.wcy</groupId>
<artifactId>spring-ai</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<description>Demo project for Spring Boot</description>
<properties>
<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-M6</spring-ai.version>
</properties>
<dependencyManagement>
<dependencies>
<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>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
<version>${spring-ai.version}</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>aliyun</id>
<name>aliyun Repository</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
5、配置yml文件
在工程的resources目录下的application-dev.yml文件里增加如下配置:
注意:api-key要替换成自己从阿里百炼平台申请的key
server:
port: 8080
spring:
ai:
openai:
api-key: sk-888888888
base-url: https://dashscope.aliyuncs.com/compatible-mode
chat:
options:
model: qwen-plus
6、创建ChatController
创建一个普通 Controller Bean类, 注入 ChatClient 实例,这样你的 Bean 就具备与 AI 大模型智能对话的能力了。本示例简单演示了普通的文本输出对话和流输出对话。
package com.wcy.ai.controller;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.model.ChatResponse;
import org.springframework.ai.chat.prompt.ChatOptions;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.openai.OpenAiChatModel;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;
/**
* @desc 聊天
* @date: 2025/3/9
* @version: 1.0
*/
@RestController
@RequestMapping("/ai")
public class ChatController {
private final ChatClient chatClient;
private final OpenAiChatModel chatModel;
public ChatController(OpenAiChatModel chatModel) {
this.chatModel = chatModel;
// 构造时,可以设置 ChatClient 的参数
this.chatClient = ChatClient.builder(chatModel)
.defaultOptions(ChatOptions.builder().topP(0.7).build()).build();
}
/**
* ChatClient 简单调用
*/
@GetMapping("/chat")
public String chat(@RequestParam(value = "input") String input) {
String content = chatModel.call(input);
System.out.println(content);
return content;
}
/**
* ChatClient 简单调用
*/
@GetMapping("/chat2")
public String chat2(@RequestParam(value = "input") String input) {
String content = this.chatClient.prompt().user(input).call().content();
System.out.println(content);
return content;
}
/**
* ChatClient 流式调用
*/
@GetMapping(value = "/streamChat", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<String> streamChat(HttpServletResponse response, String input) {
response.setCharacterEncoding("UTF-8");
Flux<String> content = chatModel.stream(input);
return content;
}
/**
* ChatClient 流式调用
*/
@GetMapping("/streamChat2")
public Flux<String> streamChat2(HttpServletResponse response, String input) {
response.setCharacterEncoding("UTF-8");
Flux<String> content = chatClient.prompt().user(input).stream().content();
return content;
}
}
7、启动Springboot工程并测试
工程启动成功后,可以向阿里云AI大模型提问了。
把下面地址输入到浏览器里,答案以文本方式输出:
http://localhost:8080/ai/chat?input=给我讲一个关于西游记的小故事
把下面地址输入到浏览器里,答案以流方式逐步输出:
http://localhost:8080/ai/streamChat?input=给我讲一个关于西游记的小故事