SpringBoot集成Spring AI构建AI智能客服模块

 更新时间:2026年04月28日 09:08:51   作者:大龄码农-涵哥  
本文介绍了如何在SpringBoot项目中集成AI能力,包括创建项目、配置API密钥、开发AI对话服务以及测试验证,重点在于通过简单的示例展示AI对话的基本实现,为后续更复杂的进阶功能铺垫基础,需要的朋友可以参考下

一、前言

Spring Boot是Java最主流的框架,Spring官方也适时推出了Spring AI项目,让我们可以在Spring Boot应用中轻松集成AI能力。本文手把手教你搭建一个AI智能客服模块。

二、创建Spring Boot项目

2.1 使用Spring Initializr创建项目

访问 https://start.spring.io/ ,勾选以下依赖:

  • Spring Web
  • Spring AI(2024版本)
  • Thymeleaf(可选,用于简单页面展示)

2.2 配置pom.xml

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.2.4</version>
</parent>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- Spring AI OpenAI -->
    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
        <version>2024.0.0.0</version>
    </dependency>
</dependencies>

三、配置API Key

application.yml 中配置:

OpenAI配置

spring:
  ai:
    openai:
      api-key: ${OPENAI_API_KEY}
      chat:
        options:
          model: gpt-3.5-turbo
          temperature: 0.7

阿里通义千问配置

spring:
  ai:
    dashscope:
      api-key: ${DASHSCOPE_API_KEY}
      chat:
        options:
          model: qwen-turbo

四、开发AI对话服务

4.1 Service层

package com.example.ai.service;

import org.springframework.ai.chat.*;
import org.springframework.ai.chat.messages.*;
import org.springframework.stereotype.Service;
import java.util.List;

@Service
public class AIService {

    private final ChatClient chatClient;

    public AIService(ChatClient chatClient) {
        this.chatClient = chatClient;
    }

    /**
     * 简单对话(无上下文)
     */
    public String chat(String userMessage) {
        return chatClient.call(userMessage);
    }

    /**
     * 带上下文的对话(记住对话历史)
     */
    public String chatWithContext(String userMessage, ChatMemory chatMemory) {
        UserMessage userMsg = new UserMessage(userMessage);
        ChatResponse response = chatClient.call(
            new Prompt(
                List.of(userMsg),
                ChatOptions.builder()
                    .model("gpt-3.5-turbo")
                    .temperature(0.7f)
                    .build()
            )
        );
        return response.getResult().getOutput().getText();
    }

    /**
     * 系统提示词(设定AI角色)
     */
    public String chatAsCustomerService(String userMessage) {
        SystemPromptTemplate systemPrompt = new SystemPromptTemplate("""
            你是一个专业的电商客服,名字叫小e。
            你的职责是:
            1. 热情友好地回复客户咨询
            2. 了解客户需求,给出专业建议
            3. 引导客户下单,解答售后问题
            
            请用简洁、亲切的语言回复。
            """);
        
        UserMessage userMsg = new UserMessage(userMessage);
        Prompt prompt = new Prompt(List.of(userMsg));
        
        return chatClient.call(prompt).getResult().getOutput().getText();
    }
}

4.2 Controller层

package com.example.ai.controller;

import com.example.ai.service.AIService;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/ai")
public class AIController {

    private final AIService aiService;

    public AIController(AIService aiService) {
        this.aiService = aiService;
    }

    /**
     * 普通对话接口
     * 调用示例:GET /api/ai/chat?message=这件商品有优惠吗
     */
    @GetMapping("/chat")
    public String chat(@RequestParam String message) {
        return aiService.chat(message);
    }

    /**
     * 扮演客服角色对话
     */
    @GetMapping("/customer-service")
    public String customerService(@RequestParam String message) {
        return aiService.chatAsCustomerService(message);
    }

    /**
     * POST请求,支持JSON body
     */
    @PostMapping("/chat")
    public String chatPost(@RequestBody ChatRequest request) {
        return aiService.chatAsCustomerService(request.getMessage());
    }
}

class ChatRequest {
    private String message;
    public String getMessage() { return message; }
    public void setMessage(String message) { this.message = message; }
}

五、测试验证

5.1 启动应用

mvn spring-boot:run

5.2 接口测试

# 普通对话
curl "http://localhost:8080/api/ai/chat?message=Java如何定义变量"
# 客服角色对话
curl "http://localhost:8080/api/ai/customer-service?message=这件裙子有几种颜色"

5.3 Postman测试

POST http://localhost:8080/api/ai/chat
Content-Type: application/json

{
    "message": "你们的退货政策是怎样的?"
}

到此这篇关于SpringBoot集成Spring AI构建AI智能客服模块的文章就介绍到这了,更多相关SpringBoot AI智能客服模块内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解决微服务中关于用户token处理到的坑

    解决微服务中关于用户token处理到的坑

    这篇文章主要介绍了解决微服务中关于用户token处理到的坑,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Java五子棋简单实现代码举例

    Java五子棋简单实现代码举例

    Java五子棋游戏是一种经典的两人对战棋类游戏,它基于简单的规则,即任何一方的棋子在棋盘上形成连续的五个,无论是横、竖还是斜线,都将获胜,这篇文章主要介绍了Java五子棋实现的相关资料,需要的朋友可以参考下
    2024-10-10
  • Java入门绊脚石之Override和Overload的区别详解

    Java入门绊脚石之Override和Overload的区别详解

    重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!重写的好处在于子类可以根据需要,定义特定于自己的行为。重载是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同
    2021-10-10
  • log4j的配置文件详细解析

    log4j的配置文件详细解析

    以下小编主要为大家介绍一下log4j的配置文件各个配置项的含义。需要的朋友可以过来参考下
    2013-08-08
  • MDC在多线程中的使用方式

    MDC在多线程中的使用方式

    这篇文章主要介绍了MDC在多线程中的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • Springboot启动同时创建数据库和表实现方法

    Springboot启动同时创建数据库和表实现方法

    这篇文章主要介绍了Springboot启动同时创建数据库和表,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-01-01
  • 定义hashcode时使用31系数的原因

    定义hashcode时使用31系数的原因

    这篇文章主要介绍了定义hashcode时使用31系数的原因,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • spring.datasource.schema配置详解

    spring.datasource.schema配置详解

    本文主要介绍了spring.datasource.schema配置,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • 快速解决code唯一码(java)的简便方法

    快速解决code唯一码(java)的简便方法

    下面小编就为大家带来一篇快速解决code唯一码(java)的简便方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Java Benchmark 基准测试的实例详解

    Java Benchmark 基准测试的实例详解

    这篇文章主要介绍了Java Benchmark 基准测试的实例详解的相关资料,这里提供实例帮助大家学习理解这部分内容,需要的朋友可以参考下
    2017-08-08

最新评论