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实战教程!

相关推荐
H03111698534 分钟前
App竞品数据查询工具整理 月狐数据 蝉大师 点点数据功能概览
人工智能
传奇开心果编程1 小时前
【springboot基础语法学与练】第 1 课:从零开始
java·spring boot·后端·学习
叠层归一研究院1 小时前
基于极限自指的叠层归一宇宙结构理论——无元外部封闭系统的内生区分模型
人工智能·经验分享·算法·agi
IT_陈寒1 小时前
Java线程池用错参数,我的服务居然悄悄崩溃了
前端·人工智能·后端
why-geo1 小时前
Hermes Agent 与 Python 的会产生什么样的碰撞
人工智能·python·ai编程
正经教主1 小时前
【FDE系列】阶段2:Day 29:FastAPI 进阶 — Pydantic 模型与完整 CRUD 实战
人工智能·python·fde
时速GEO系统2 小时前
初元 AI V1.1 版本升级,首个正式版发布一周・实现生成、部署、上线、优化全流程自动化闭环
人工智能·数据挖掘·node.js
步行cgn2 小时前
Spring p 命名空间注入详解
java·前端·spring
咕泡科技2 小时前
咕泡科技FDE系列最新产品重磅发布!
人工智能·大模型·ai落地·fde·前沿部署工程师
犀利豆2 小时前
为什么全世界的 AI 都画不好一只骑自行车的鹈鹕
人工智能·llm·aigc