【SpringAI篇01】:5分钟教会你使用SpringAI (1.0.0稳定版)

后端开发之 SpringAI 使用篇01:从创建 SpringAI 项目开始,到快速入门实现调用大模型 API 实现对话功能(较低代码量+精简教程)。

目录

[1. 创建项目](#1. 创建项目)

[2. API Key的准备](#2. API Key的准备)

[3. 必要的配置](#3. 必要的配置)

[4. 开始写代码](#4. 开始写代码)

[4.1. 配置Bean](#4.1. 配置Bean)

[4.2 使用 ChatClient 向大模型发送请求](#4.2 使用 ChatClient 向大模型发送请求)

[4.3 效果展示](#4.3 效果展示)

[5. 【SpringAI篇02】:对话功能与对话记忆功能](#5. 【SpringAI篇02】:对话功能与对话记忆功能)


1. 创建项目

如下图所示即可,在自己的目录创建 Maven 项目,JDK 版本最低要使用 17

依赖选择:

项目自动创建好后,在 pom.xml 中会有这些依赖:

<dependencyManagment>下

XML 复制代码
<dependencyManagement>
    <dependencies>
        <!-- 统一管理 SpringAI 相关依赖的版本 -->
        <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> 下

XML 复制代码
<!-- SpringBoot Web 起步依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

............

<!-- OpenAI 模型的启动器依赖 -->
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-starter-model-openai</artifactId>
</dependency>

2. API Key的准备

在继续之前,我们需要先获取一个兼容 OpenAI 的平台的 ApiKey,这里推荐大家使用阿里的百炼 平台,因为不仅模型众多,还没有繁琐的申请与开通流程,注册账号、认证之后就可以直接使用:大模型服务平台百炼控制台https://bailian.console.aliyun.com/#/home

先生成个人的 ApiKey,然后打开模型广场,随便选择一个模型,查看详情:

可以看到,每个模型都是自动有免费额度的,在 Code 栏随便复制一个模型名称,如:qwen-max

在文档界面,可以看到百炼平台的模型是支持 OpenAI 接口规范的,所以我们之前导入的 OpenAI 的依赖是通用的。

复制文档中的 base_url 和 之前的模型名,下面进行 application.yaml(或application.properties)的配置


3. 必要的配置

application.yaml 的配置,在 spring 的下一级,键入一个 ai就可以弹出许多相关的配置:

做一些基本的配置 ,最终代码如下:

当然,若是不想把 ApiKey 直接配置在 yaml 配置文件中,也可以这样,配置在环境变量中,只需要两步即可:

然后再弹出的"环境变量 "输入框中,格式为之前在yaml中,使用**$**符引用的变量名=ApiKey,将 ApiKey 输入,应用即可


4. 开始写代码

4.1. 配置Bean

我们在项目下建一个config包,创建这样一个配置类,初始化使用指定模型的 ChatClient

java 复制代码
package com.demo.aiqqq.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.openai.OpenAiChatModel;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @Author: qiquqiu
 * @Date: 2025/6/26 15:27
 */
@Slf4j
@Configuration
public class ChatConfig {

    /**
     * 普通对话聊天功能的模型
     * @param model 用百炼的qwen-max模型,需要在yaml中做必要配置
     */
    @Bean
    public ChatClient chatClient(OpenAiChatModel model) {
        log.debug("初始化ChatClient...");
        // ChatClient chatClient = ChatClient.create(model); // 简单创建实例
        // 或使用builder创建更高级控制
        return ChatClient
                .builder(model) // 也可以使用ChatClient.Builder,利用build获取ChatClient对象
                .defaultSystem("你是一个和蔼可亲的传统文化文学大师,精通诗词歌赋、琴棋书画,需要帮助用户创作")
                .build();
    }
}

其中:defaultSystem() 方法,用来设置 SystemPrompt(系统提示词),一般用来指定大模型的身份,使用限制,范围等等方面

ChatClient是一个非常重要的 Bean,后续由它调用大模型;ChatClient 的创建有多种方式,上述代码的注释中给出了一些例子,但是一般均使用 builder 创建更好,能指定更多的高级设置(后面会讲到)

更多拓展可查看 SpringAI 关于这块的官方文档聊天客户端 API :: Spring AI 参考https://docs.spring.io/spring-ai/reference/api/chatclient.html

4.2 使用 ChatClient 向大模型发送请求

创建一个 ChatController,马上就可以实现浏览器的简单访问了:

java 复制代码
package com.demo.aiqqq.controller;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;

@Slf4j
@RestController
@RequestMapping("/ai")
@RequiredArgsConstructor
public class ChatController {

    // 注入上文配置好的 ChatClient
    private final ChatClient chatClient;

    /*@RequestMapping("/chat")
    public String chat(String prompt) {
        return chatClient.prompt()
                .user(prompt)
                .call() // 非流式响应
                .content();
    }*/

    // produces属性:指定响应的Content-Type和字符集,解析默认的流结果的乱码
    @RequestMapping(value = "/chat", produces = "text/html;charset=utf-8")
    public Flux<String> chat(String prompt) {
        log.debug("用户说:{}", prompt);
        return chatClient.prompt()
                .user(prompt) // 用户输入
                .stream() // 流式响应
                .content();
    }
}

注意,这两种方法,一个调用 call() ,返回 String,不支持流式响应,一个调用 stream() ,返回 Flux<String>,支持流式响应。显然为了达到大模型流式输出 的效果,我们选择后者,如果选择了后者,要添加 produces = "text/html;charset=utf-8" 属性,不然响应会是乱码(call()方法调用不需要加)

然后,启动项目,打开浏览器,输入如下地址:++localhost:8080/ai/chat?prompt=你的提问内容++,回车即可实现请求

4.3 效果展示

响应过程是流式输出,说明案例成功了!


5. 【SpringAI篇02】:对话功能与对话记忆功能

相关推荐
endcy20166 分钟前
基于Spring AI的RAG和智能体应用实践
人工智能·ai·系统架构
Blossom.11841 分钟前
移动端部署噩梦终结者:动态稀疏视觉Transformer的量化实战
java·人工智能·python·深度学习·算法·机器学习·transformer
静若繁花_jingjing1 小时前
IDEA下载
java·ide·intellij-idea
代码丰1 小时前
函数式接口+default接口+springAi 中的ducumentReader去理解为什么存在default接口的形式
java
果汁华3 小时前
java学习连续打卡30天(1)
java
q***92513 小时前
Spring Cloud Data Flow 简介
后端·spring·spring cloud
武子康3 小时前
Java-171 Neo4j 备份与恢复 + 预热与执行计划实战
java·开发语言·数据库·性能优化·系统架构·nosql·neo4j
m0_639817153 小时前
基于springboot火锅店管理系统【带源码和文档】
java·spring boot·后端
宁渡AI大模型4 小时前
从生成内容角度介绍开源AI大模型
人工智能·ai·大模型·qwen
会编程的林俊杰4 小时前
SpringBoot项目启动时的依赖处理
java·spring boot·后端