一、前言
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实战教程!