This project is a proof of concept that demonstrates how to use Spring Boot along with Spring AI to create a REST API that summarizes a group chat. It integrates with an AI model (e.g., GPT-3) to provide intelligent conversation summarization.
This project is a simple Spring Boot application that accepts a group chat as input, sends it to an AI model via Spring AI, and returns a summary of the conversation. It is designed as a demonstration of using AI services within the Spring ecosystem, focusing on chat summarization.
- Java 23: Ensure you have JDK 23 installed.
- Maven: For building and managing dependencies.
- Spring Boot: To create a robust, production-ready API.
- Spring AI: To integrate AI models for conversation summarization (e.g., GPT-3, OpenAI models).
- API Key for AI Service: You will need an API key for the AI service (e.g., OpenAI) that you want to use.
Start by creating a new Spring Boot project using Spring Initializer or manually through Maven. Make sure to include the following dependencies:
- Spring Web: For building REST APIs.
- Spring AI: To integrate AI model interaction.
- Lombok: (Optional) For reducing boilerplate code.
- Spring Boot DevTools: (Optional) For automatic application reload during development.
Your pom.xml
should contain the following relevant dependencies:
<dependencies>
<!-- Spring Boot Web for REST API -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring AI for AI integration -->
<dependency>
<groupId>org.springframework.experimental</groupId>
<artifactId>spring-ai</artifactId>
<version>0.1.0-SNAPSHOT</version>
</dependency>
<!-- Optional: Lombok for reducing boilerplate -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
Configure Spring AI to use the external AI service, such as OpenAI, by setting your API key in application.properties
:
spring.ai.openai.api-key=your-api-key-here
You will also need to configure the AI service as a bean in your AiConfiguration
class:
@Configuration
public class AiConfiguration {
@Bean
public AiService aiService() {
return new OpenAiService(); // Example using OpenAI
}
}
Create a ChatMessage
model that represents individual messages within a conversation. This will include fields like the sender, message content, and timestamp.
public class ChatMessage {
private String sender;
private String message;
private LocalDateTime timestamp;
}
Additionally, define a ChatSummaryRequest
class that bundles multiple ChatMessage
instances into one request:
public class ChatSummaryRequest {
private List<ChatMessage> messages;
}
Implement a ChatSummaryService
that sends the chat messages to the AI model via Spring AI to generate a summary.
@Service
public class ChatSummaryService {
@Autowired
private AiService aiService; // Inject the Spring AI service.
public String summarize(List<ChatMessage> messages) {
String chatContent = messages.stream()
.map(ChatMessage::getMessage)
.collect(Collectors.joining(" "));
AiRequest request = AiRequest.builder()
.model("gpt-3") // Example: GPT-3 model
.prompt("Summarize the following conversation: " + chatContent)
.build();
AiResponse response = aiService.generate(request);
return response.getSummary();
}
}
Expose an endpoint /summarize-chat
that accepts POST requests with chat messages, processes them, and returns a summary.
@RestController
@RequestMapping("/api")
public class ChatController {
private final ChatSummaryService chatSummaryService;
@Autowired
public ChatController(ChatSummaryService chatSummaryService) {
this.chatSummaryService = chatSummaryService;
}
@PostMapping("/summarize-chat")
public ResponseEntity<String> summarizeChat(@RequestBody ChatSummaryRequest chatSummaryRequest) {
String summary = chatSummaryService.summarize(chatSummaryRequest.getMessages());
return ResponseEntity.ok(summary);
}
}
-
Start the Spring Boot application: Run the application by executing:
mvn spring-boot:run
-
Send a POST request to
/api/summarize-chat
: You can use Postman or cURL to send a POST request to the API. The payload should contain chat messages like this:{ "messages": [ {"sender": "Alice", "message": "Hey, how are you?", "timestamp": "2023-10-17T10:00:00"}, {"sender": "Bob", "message": "I'm good, thanks! How about you?", "timestamp": "2023-10-17T10:01:00"} ] }
-
Receive the response: The API will respond with a summarized version of the chat using AI:
{ "summary": "Alice asked how Bob was doing, and Bob replied that he was good." }
- NLP Models: You can improve the summarization by fine-tuning prompts or selecting a more conversation-specific AI model.
- Database Integration: If needed, you can integrate a database (e.g., MySQL, PostgreSQL) using Spring Data JPA to store chat messages and summaries.
- Authentication: Add security to the API using Spring Security if this service is intended for production use.
This project is licensed under the MIT License. See the LICENSE file for more details.