Spring AI Alibaba入门示例
目录
本章节通过一个hello world简单示例演示,如何基于Spring Boot集成Spring AI Alibaba开源框架,快速集成调用阿里云的百炼大模型AI服务。
欢迎我的公众号
1、概念介绍
-
Spring AI Alibaba 项目
Spring AI Alibaba 定位开源 AI Agent 开发框架,提供从 Agent 构建到 workflow 编排、RAG 检索、模型适配等能力,帮助开发者轻松构建生成式 AI 应用。
Spring AI Alibaba 基于 Spring AI 开源项目构建,作为 AI 应用程序的基础框架,定义了包括模型适配、聊天交互、提示词管理、工具调用等概念抽象与实现。
Spring AI Alibaba 开源项目是阿里云通义系列模型及服务在 Java AI 应用开发领域的最佳实践,提供高层次的 AI API 抽象与云原生基础设施集成方案,帮助开发者快速构建 AI 应用。
-
Spring AI 项目
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 Alibaba前提条件
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>wcy-ai</artifactId>
<version>1.0-SNAPSHOT</version>
<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-M5</spring-ai.version>
<spring-ai-alibaba.version>1.0.0-M5.1</spring-ai-alibaba.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>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter</artifactId>
<version>${spring-ai-alibaba.version}</version>
</dependency>
</dependencies>
<repositories>
<!-- spring-ai 相关依赖包还没有发布到中央仓库-->
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<releases>
<enabled>true</enabled>
</releases>
</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:
application:
name: spring-ai-demo
ai:
dashscope:
api-key: sk-88888888
chat:
options:
model: qwen-plus
6、创建ChatController
创建一个普通 Controller Bean类, 注入 ChatClient 实例,这样你的 Bean 就具备与 AI 大模型智能对话的能力了。本示例简单演示了普通的文本输出对话和流输出对话。package com.wcy.ai.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.model.ChatModel;
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;
@RestController
@RequestMapping("/ai")
public class ChatController {
private final ChatClient chatClient;
private final ChatModel 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;
}
}
可以通过设置属性 spring.ai.chat.client.enabled=true来自动装配ChatClient.Builder bean,但是,如果需要多个聊天模型一起使用,需要以编程方式创建 ChatClient.Builder,这样可以为每个聊天模型创建一个实例 ChatModel,这里使用的是编程方式创建ChatClient。
7、启动Springboot工程并测试
工程启动成功后,可以向阿里云AI大模型提问了。
把下面地址输入到浏览器里,答案以文本方式输出:
http://localhost:8080/ai/chat?input=给我讲一个关于西游记的小故事
把下面地址输入到浏览器里,答案以流方式逐步输出:
http://localhost:8080/ai/streamChat?input=给我讲一个关于西游记的小故事
8、总结
示例初步地验证基于Spring Boot集成Spring AI Alibaba开源框架的可行性和简便性。不仅展示了如何通过编程方式灵活定义`ChatClient`,还深入探讨了利用Spring AI Alibaba框架调用阿里巴巴AI大模型API接口的具体实现路径,从而支持普通文本问答和流式问答两种交互模式。这一集成不仅为Java开发者提供了一种高效、便捷的方式去探索和利用最新的AI技术,同时也为未来更复杂的AI应用场景奠定了坚实的技术基础。