Spring Boot项目集成AI对话:使用Spring 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

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配置

yaml 复制代码
spring:
  ai:
    openai:
      api-key: ${OPENAI_API_KEY}
      chat:
        options:
          model: gpt-3.5-turbo
          temperature: 0.7

阿里通义千问配置

yaml 复制代码
spring:
  ai:
    dashscope:
      api-key: ${DASHSCOPE_API_KEY}
      chat:
        options:
          model: qwen-turbo

四、开发AI对话服务

4.1 Service层

java 复制代码
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层

java 复制代码
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 启动应用

bash 复制代码
mvn spring-boot:run

5.2 接口测试

bash 复制代码
# 普通对话
curl "http://localhost:8080/api/ai/chat?message=Java如何定义变量"

# 客服角色对话
curl "http://localhost:8080/api/ai/customer-service?message=这件裙子有几种颜色"

5.3 Postman测试

json 复制代码
POST http://localhost:8080/api/ai/chat
Content-Type: application/json

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

六、进阶功能预告

本文只是AI对话的入门,下一篇我们将实现:

  • 流式输出(Server-Sent Events):打字机效果
  • 多轮对话上下文:记住10轮对话历史
  • Function Calling:让AI查询数据库/调用外部API

💡 关注我,不错过任何一篇Java+AI实战教程!

相关推荐
AI袋鼠帝1 小时前
Codex终于进手机了!
人工智能
Lee川2 小时前
从零解剖一个 AI Agent Tool是如何实现的
前端·人工智能·后端
一个王同学2 小时前
从零到一 | CV转多模态大模型 | week09 | Minillava Refactor结合手搓和llava源码深入理解多模态大模型原理
人工智能·深度学习·机器学习·计算机视觉·改行学it
2601_957787582 小时前
全场景矩阵系统多端统一体验与跨端实时同步技术实践
大数据·人工智能·矩阵·多端统一·跨端同步
liudanzhengxi2 小时前
AI提示词极限赛:突破边界的艺术
人工智能
ZhengEnCi3 小时前
09-斯坦福CS336作业 📝
人工智能
闭关修炼啊哈3 小时前
[IdeaLoop · 灵感回路] AI时代独立开发者·创业/副业灵感日报 · 2026-05-17
人工智能·远程工作·创业·副业
赢乐3 小时前
大模型学习笔记:检索增强生成(RAG)架构
人工智能·python·深度学习·机器学习·智能体·幻觉·检索增强生成(rag)
飞哥数智坊3 小时前
OPC 需要的不是一个个AI工具,而是一支数字团队
人工智能
小橙讲编程4 小时前
200+ 模型、零内容过滤、完全免费 — Open Generative AI 全面解析与实战指南
人工智能