Dans cet article, nous allons créer une API REST en Java qui interagit avec le modèle de langage GPT-4o d’OpenAI grâce à Spring AI. Nous utiliserons les composants @AiClient, PromptTemplate, et ChatClient pour orchestrer les échanges avec le LLM.
Ce code fonctionnera avec n’importe quel modèle en adaptant la configuration « application.yaml ».
Prérequis
Avant de commencer, assurez-vous d’avoir :
Java 17 ou supérieur
Maven ou Gradle
Une clé API OpenAI (https://platform.openai.com/account/api-keys)
Spring Boot 3.2+
Spring AI (Spring AI Starter)
1. Dépendances Maven
Ajoutez les dépendances suivantes à votre pom.xml :
<dependencies>
<!-- Spring Boot starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring AI OpenAI client -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
<version>0.8.1</version> <!-- Vérifiez la dernière version -->
</dependency>
</dependencies>
2. Configuration de la clé API
Ajoutez les paramètres suivants dans application.yml :
spring:
ai:
openai:
api-key: ${OPENAI_API_KEY}
chat:
model: gpt-4o
Vous pouvez aussi utiliser un fichier .env ou des variables d’environnement pour stocker la clé.
3. Création d’un @AiClient
Spring AI permet de créer un client IA avec une simple interface Java.
import org.springframework.ai.chat.client.AiClient;
import org.springframework.ai.chat.client.annotation.AiClient;
import org.springframework.ai.chat.client.annotation.UserMessage;
@AiClient
public interface AssistantClient {
String ask(@UserMessage String message);
}
4. Création du contrôleur REST
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/assistant")
public class AssistantController {
private final AssistantClient assistantClient;
public AssistantController(AssistantClient assistantClient) {
this.assistantClient = assistantClient;
}
@PostMapping("/ask")
public String ask(@RequestBody String question) {
return assistantClient.ask(question);
}
}
5. Exemple d’appel
Lancez votre application, puis utilisez curl ou Postman :
curl -X POST http://localhost:8080/api/assistant/ask \
-H "Content-Type: application/json" \
-d "\"Quelle est la capitale de l’Italie ?\""
Réponse :
« Rome est la capitale de l’Italie. »
(Ceci est un exemple trivial mais évitons d’utiliser un chat IA pour chercher des choses qu’on peut trouver facilement sur Google car n’oublions pas qu’une requête IA peut consommer entre 7x et 30x plus qu’une recherche Google standard
).