Il primo capitolo della nostra guida su Spring AI non poteva riguardare altro se non come creare un progetto partendo da zero. Vedremo insieme i passi da percorrere e faremo una rapida analisi del codice per comprendere le basi del funzionamento del framework.
Spring Initializr
Il metodo più semplice per creare un progetto Spring from scratch è sicuramente quello di utilizzare il tool Spring Initializr disponibile online. Grazie a questo tool, gli sviluppatori possono definire le dipendenze del progetto, selezionare la versione di Spring e specificare altre opzioni di configurazione, come il linguaggio di programmazione (ad esempio Java o Kotlin), il sistema di gestione delle dipendenze (ad esempio Maven o Gradle), e così via. Una volta completata la configurazione, lo Spring Initializr genera automaticamente la struttura di base del progetto, inclusi i file di configurazione e le dipendenze necessarie, pronti per essere importati e utilizzati in un ambiente di sviluppo integrato (IDE) come IntelliJ IDEA o Eclipse.
Per il nostro tutorial useremo Maven dome strumento di gestione delle dipendenze e importeremo l’estensione di Spring AI per utilizzare il modello Open AI (GPT).
Le dipendenze del progetto
Una volta generato il progetto mediante il tool online, è possibile scaricarlo in locale ed aprirlo con un IDE qualsiasi. Nel nostro esempio useremo Eclipse.
La prima cosa da fare è sicuramente dare un’occhiata al file pom.xml dove si nota immediatamente che è stata impostata la dipendenza dalla BOM di Spring AI.
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>${spring-ai.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
La BOM, acronimo di “Bill of Materials”, è un documento che elenca tutti i componenti e i materiali necessari per la produzione di un determinato prodotto. In sostanza, è un elenco strutturato e organizzato dei componenti e delle dipendenze necessarie per utilizzare Spring AI all’interno di un progetto. Importando la BOM, tutte le dipendenze saranno automaticamente importate e gestite dal sistema di gestione delle dipendenze (come Maven o Gradle), evitando la necessità di specificare manualmente ciascuna dipendenza separatamente.
Affinchè Maven possa scaricare le dipendenze necessarie ha inoltre bisogno che gli venga impostato il riferimento al repository:
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
Ultima cosa da notare, è stata automaticamente importata anche la dipendenza dal modulo di Spring AI per l’integrazione con Open AI.
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>
Naturalmente, oltre a quanto descritto sopra, il pom contiene anche tutte le dipendenze classiche di un progetto Spring Boot ma non le analizzeremo nel dettaglio in quanto non sono oggetto del nostro tutorial.
La classe Application
Come in tutte le applicazioni Spring Boot, la classe Application contiene il metodo main e costituisce il punto di avvio della nostra applicazione.
package com.example.aidemo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class AidemoApplication {
public static void main(String[] args) {
SpringApplication.run(AidemoApplication.class, args);
}
}
Provando ad avviare l’applicazione verrà sollevato l’errore “Web application could not be started as there was no org.springframework.boot.web.reactive.server.ReactiveWebServerFactory bean defined in the context.” che può essere risolto inserendo tra le dipendenze il modulo di Spring Web:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
A questo punto la nostra applicazione con Spring AI è pronta e funzionante! Nel prossimo capitolo della guida vedremo come integrare l’app con le API di OpenAI.