Βιβλιοθήκη Foundry Local Spring Boot Tutorial
April 15, 2026 · View on GitHub
Πίνακας Περιεχομένων
- Προαπαιτούμενα
- Επισκόπηση Έργου
- Κατανόηση του Κώδικα
- Πως Λειτουργεί Όλα Μαζί
- Ρύθμιση του Foundry Local
- Εκτέλεση της Εφαρμογής
- Αναμενόμενη Έξοδος
- Επόμενα Βήματα
- Επίλυση Προβλημάτων
Προαπαιτούμενα
Πριν ξεκινήσετε αυτό το tutorial, βεβαιωθείτε ότι έχετε:
- Εγκατεστημένο το Java 21 ή ανώτερο στο σύστημά σας
- Maven 3.6+ για τη δημιουργία του έργου
- Installed and running Foundry Local
Εγκατάσταση Foundry Local:
Σημείωση: Το Foundry Local CLI είναι διαθέσιμο μόνο σε Windows και macOS. Το Linux υποστηρίζεται μέσω των Foundry Local SDKs (Python, JavaScript, C#, Rust).
# Windows
winget install Microsoft.FoundryLocal
# macOS
brew tap microsoft/foundrylocal
brew install foundrylocal
Επαληθεύστε την εγκατάσταση:
foundry --version
Επισκόπηση Έργου
Αυτό το έργο αποτελείται από τέσσερα βασικά μέρη:
- Application.java – Το κύριο σημείο εισόδου της εφαρμογής Spring Boot
- FoundryLocalService.java – Επίπεδο υπηρεσίας που χειρίζεται την επικοινωνία με την Τεχνητή Νοημοσύνη
- application.properties – Διαμόρφωση σύνδεσης για το Foundry Local
- pom.xml – Εξαρτήσεις Maven και διαμόρφωση έργου
Κατανόηση του Κώδικα
1. Διαμόρφωση Εφαρμογής (application.properties)
Αρχείο: src/main/resources/application.properties
foundry.local.base-url=http://localhost:5273/v1
# foundry.local.model is auto-detected from Foundry Local. Set it here to override:
# foundry.local.model=Phi-4-mini-instruct-cuda-gpu:5
Τι κάνει:
- base-url: Καθορίζει που τρέχει το Foundry Local, συμπεριλαμβανομένης της διαδρομής
/v1για συμβατότητα με το OpenAI API. Η προεπιλεγμένη θύρα είναι η5273. Εάν η θύρα διαφέρει, ελέγξτε μεfoundry service status. - model (προαιρετικό): Ορίζει το μοντέλο AI που θα χρησιμοποιηθεί για τη δημιουργία κειμένων. Από προεπιλογή, η εφαρμογή ανιχνεύει αυτόματα το μοντέλο ερωτώντας το Foundry Local στο τέλος της διαδρομής
/v1/modelsκατά την εκκίνηση, έτσι δεν χρειάζεται να το ορίσετε χειροκίνητα. Μπορείτε ωστόσο να το ορίσετε ρητά αν θέλετε να υπερισχύσετε της αυτόματης ανίχνευσης.
Κύρια ιδέα: Το Spring Boot φορτώνει αυτόματα αυτές τις ιδιότητες και τις καθιστά διαθέσιμες στην εφαρμογή σας μέσω της σημείωσης @Value.
2. Κύρια Κλάση Εφαρμογής (Application.java)
Αρχείο: src/main/java/com/example/Application.java
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(Application.class);
app.setWebApplicationType(WebApplicationType.NONE); // Δεν απαιτείται διακομιστής ιστού
app.run(args);
}
Τι κάνει:
@SpringBootApplicationενεργοποιεί την αυτόματη διαμόρφωση Spring BootWebApplicationType.NONEδηλώνει στο Spring ότι πρόκειται για εφαρμογή γραμμής εντολών, όχι διακομιστή web- Η κύρια μέθοδος ξεκινά την εφαρμογή Spring
Ο Demo Runner:
@Bean
public CommandLineRunner foundryLocalRunner(FoundryLocalService foundryLocalService) {
return args -> {
System.out.println("=== Foundry Local Demo ===");
System.out.println("Calling Foundry Local service...");
String testMessage = "Hello! Can you tell me what you are and what model you're running?";
System.out.println("Sending message: " + testMessage);
String response = foundryLocalService.chat(testMessage);
System.out.println("Response from Foundry Local:");
System.out.println(response);
System.out.println("=========================");
};
}
Τι κάνει:
@Beanδημιουργεί ένα συστατικό που διαχειρίζεται το SpringCommandLineRunnerεκτελεί κώδικα μετά την εκκίνηση του Spring BootfoundryLocalServiceεισάγεται αυτόματα από το Spring (dependency injection)- Στέλνει ένα δοκιμαστικό μήνυμα στην AI και εμφανίζει την απάντηση
3. Επίπεδο Υπηρεσίας Τεχνητής Νοημοσύνης (FoundryLocalService.java)
Αρχείο: src/main/java/com/example/FoundryLocalService.java
Έγχυση Διαμόρφωσης:
@Service
public class FoundryLocalService {
@Value("${foundry.local.base-url:http://localhost:5273/v1}")
private String baseUrl;
@Value("${foundry.local.model:}")
private String model; // Αυτόματη ανίχνευση αν είναι κενό
Τι κάνει:
@Serviceλέει στο Spring ότι αυτή η κλάση παρέχει επιχειρησιακή λογική@Valueεγχέει τιμές διαμόρφωσης από το application.properties- Το μοντέλο έχει προεπιλεγμένη τιμή κενή, που ενεργοποιεί την αυτόματη ανίχνευση από το Foundry Local κατά την εκκίνηση. Αυτό σημαίνει ότι η εφαρμογή δουλεύει με οποιοδήποτε μοντέλο φορτωθεί στο Foundry Local χωρίς χειροκίνητη ρύθμιση.
Αρχικοποίηση Πελάτη:
@PostConstruct
public void init() {
// Αυτόματη ανίχνευση του μοντέλου από το Foundry Local αν δεν έχει ρυθμιστεί ρητά
if (model == null || model.isBlank()) {
model = detectModel();
}
this.openAIClient = OpenAIOkHttpClient.builder()
.baseUrl(baseUrl) // Η βασική διεύθυνση URL ήδη περιλαμβάνει /v1 από τη διαμόρφωση
.apiKey("not-needed") // Ο τοπικός διακομιστής δεν χρειάζεται πραγματικό κλειδί API
.build();
}
Τι κάνει:
@PostConstructεκτελεί αυτή τη μέθοδο μετά τη δημιουργία της υπηρεσίας από το Spring- Αν δεν έχει επιλεγεί μοντέλο, ερωτά το endpoint
/v1/modelsτου Foundry Local και επιλέγει το πρώτο διαθέσιμο μοντέλο - Δημιουργεί έναν πελάτη OpenAI που δείχνει στην τοπική σας εγκατάσταση Foundry Local
- Η βασική διεύθυνση URL στο
application.propertiesπεριλαμβάνει ήδη το/v1για συμβατότητα με OpenAI API - Το κλειδί API τέθηκε σε "not-needed" καθώς η τοπική ανάπτυξη δεν απαιτεί αυθεντικοποίηση
Μέθοδος Chat:
public String chat(String message) {
try {
ChatCompletionCreateParams params = ChatCompletionCreateParams.builder()
.model(model) // Ποιο μοντέλο AI να χρησιμοποιηθεί
.addUserMessage(message) // Η ερώτησή σας/εντολή σας
.maxCompletionTokens(150) // Όριο στο μήκος της απάντησης
.temperature(0.7) // Έλεγχος δημιουργικότητας (0.0-1.0)
.build();
ChatCompletion chatCompletion = openAIClient.chat().completions().create(params);
// Εξαγωγή της απάντησης του AI από το αποτέλεσμα του API
if (chatCompletion.choices() != null && !chatCompletion.choices().isEmpty()) {
return chatCompletion.choices().get(0).message().content().orElse("No response found");
}
return "No response content found";
} catch (Exception e) {
throw new RuntimeException("Error calling chat completion: " + e.getMessage(), e);
}
}
Τι κάνει:
- ChatCompletionCreateParams: Διαμορφώνει το αίτημα προς την AI
model: Καθορίζει ποιο μοντέλο AI θα χρησιμοποιηθεί (πρέπει να ταιριάζει ακριβώς με το ID από τοfoundry model list)addUserMessage: Προσθέτει το μήνυμά σας στη συζήτησηmaxCompletionTokens: Περιορίζει το μέγιστο μέγεθος της απάντησης (εξοικονομά πόρους)temperature: Ελέγχει το βαθμό τυχαιότητας (0.0 = αποφασιστικό, 1.0 = πιο δημιουργικό)
- Κλήση API: Στέλνει το αίτημα στο Foundry Local
- Διαχείριση Απάντησης: Εξάγει με ασφάλεια το κείμενο της απάντησης της AI
- Διαχείριση Σφαλμάτων: Τυλίγει τις εξαιρέσεις με κατατοπιστικά μηνύματα λάθους
4. Εξαρτήσεις Έργου (pom.xml)
Βασικές Εξαρτήσεις:
<!-- Spring Boot - Application framework -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>${spring-boot.version}</version>
</dependency>
<!-- OpenAI Java SDK - For AI API calls -->
<dependency>
<groupId>com.openai</groupId>
<artifactId>openai-java</artifactId>
<version>2.12.0</version>
</dependency>
<!-- Jackson - JSON processing -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.17.0</version>
</dependency>
Τι κάνουν:
- spring-boot-starter: Παρέχει βασική λειτουργικότητα Spring Boot
- openai-java: Επίσημο OpenAI Java SDK για επικοινωνία μέσω API
- jackson-databind: Χειρίζεται την σειριοποίηση/αποσειριοποίηση JSON για τις κλήσεις API
Πως Λειτουργεί Όλα Μαζί
Ακολουθεί η πλήρης ροή όταν τρέχετε την εφαρμογή:
- Εκκίνηση: Το Spring Boot ξεκινά και διαβάζει το
application.properties - Δημιουργία Υπηρεσίας: Το Spring δημιουργεί το
FoundryLocalServiceκαι εγχέει τις διαμορφώσεις - Ανίχνευση Μοντέλου: Αν δεν έχει οριστεί μοντέλο, η υπηρεσία ερωτά το
/v1/modelsτου Foundry Local και επιλέγει αυτόματα το πρώτο διαθέσιμο μοντέλο - Ρύθμιση Πελάτη: Το
@PostConstructαρχικοποιεί τον OpenAI πελάτη για σύνδεση με το Foundry Local - Εκτέλεση Demo: Ο
CommandLineRunnerεκτελείται μετά την εκκίνηση - Κλήση AI: Το demo καλεί το
foundryLocalService.chat()με ένα δοκιμαστικό μήνυμα - API Αίτημα: Η υπηρεσία δημιουργεί και στέλνει αίτημα συμβατό με OpenAI στο Foundry Local
- Επεξεργασία Απάντησης: Η υπηρεσία εξάγει και επιστρέφει την απάντηση της AI
- Εμφάνιση: Η εφαρμογή εμφανίζει την απάντηση και τερματίζει
Ρύθμιση του Foundry Local
-
Εγκαταστήστε το Foundry Local χρησιμοποιώντας τις οδηγίες στην ενότητα Προαπαιτούμενα.
-
Ξεκινήστε την υπηρεσία (αν δεν τρέχει ήδη):
foundry service start -
Ελέγξτε την κατάσταση της υπηρεσίας για να επιβεβαιώσετε ότι τρέχει και δείτε τη θύρα:
foundry service status -
Κατεβάστε και εκτελέστε ένα μοντέλο (κατεβαίνει την πρώτη φορά, στη συνέχεια αποθηκεύεται για μελλοντική χρήση):
foundry model run phi-4-miniΑυτό ανοίγει μια διαδραστική συνεδρία chat. Μπορείτε να εξέλθετε με
Ctrl+C. Το μοντέλο παραμένει φορτωμένο στην υπηρεσία.Συμβουλή: Εκτελέστε
foundry model listγια να δείτε όλα τα διαθέσιμα μοντέλα. Αντικαταστήστε τοphi-4-miniμε οποιοδήποτε ψευδώνυμο από τον κατάλογο (π.χ.,qwen2.5-0.5bγια μικρότερο/γρηγορότερο μοντέλο). -
Επαληθεύστε ότι το μοντέλο έχει φορτωθεί:
foundry service ps -
Ενημερώστε το
application.propertiesαν χρειάζεται:- Η προεπιλεγμένη τιμή του
base-url(http://localhost:5273/v1) ταιριάζει με την προεπιλεγμένη θύρα CLI. Ενημερώστε μόνο αν τοfoundry service statusεμφανίζει διαφορετική θύρα. - Το μοντέλο ανιχνεύεται αυτόματα κατά την εκκίνηση — δεν απαιτείται επιπλέον ρύθμιση.
foundry.local.base-url=http://localhost:5273/v1 # Model is auto-detected. Uncomment below to override: # foundry.local.model=Phi-4-mini-instruct-cuda-gpu:5 - Η προεπιλεγμένη τιμή του
Εκτέλεση της Εφαρμογής
Βήμα 1: Βεβαιωθείτε ότι ένα μοντέλο είναι φορτωμένο στο Foundry Local
foundry service ps
Αν δεν υπάρχουν μοντέλα, φορτώστε ένα:
foundry model run phi-4-mini
Βήμα 2: Δημιουργία και Εκτέλεση της Εφαρμογής
Σε ξεχωριστό τερματικό:
cd 04-PracticalSamples/foundrylocal
mvn spring-boot:run
Ή χτίστε και εκτελέστε ως JAR:
mvn clean package
java -jar target/foundry-local-spring-boot-0.0.1-SNAPSHOT.jar
Αναμενόμενη Έξοδος
=== Foundry Local Demo ===
Calling Foundry Local service...
Sending message: Hello! Can you tell me what you are and what model you're running?
Response from Foundry Local:
Hello! I'm Phi, an AI developed by Microsoft. I can assist with a wide variety of
tasks including answering questions, helping with analysis, creative writing, coding,
and general conversation. How can I help you today?
=========================
Επόμενα Βήματα
Για περισσότερα παραδείγματα, δείτε Κεφάλαιο 04: Πρακτικά δείγματα
Επίλυση Προβλημάτων
Συνήθη Προβλήματα
"Connection refused" ή "Service unavailable"
- Ελέγξτε την υπηρεσία:
foundry service status - Επανεκκινήστε αν χρειάζεται:
foundry service restart - Βεβαιωθείτε ότι η θύρα στο
application.propertiesταιριάζει με την έξοδο τουfoundry service status - Εξασφαλίστε ότι η διεύθυνση URL τελειώνει σε
/v1:http://localhost:5273/v1
"No model found" κατά την εκκίνηση
- Η εφαρμογή ανιχνεύει αυτόματα το μοντέλο. Βεβαιωθείτε ότι το λιγότερο ένα μοντέλο είναι φορτωμένο:
foundry service ps - Αν δεν υπάρχει κανένα μοντέλο:
foundry model run phi-4-mini - Αν έχετε ορίσει το μοντέλο χειροκίνητα στο
application.properties, βεβαιωθείτε ότι ταιριάζει με το αποτέλεσμα τουfoundry model list
Σφάλματα "400 Bad Request"
- Βεβαιωθείτε ότι το base URL περιλαμβάνει το
/v1:http://localhost:5273/v1 - Βεβαιωθείτε ότι χρησιμοποιείτε
maxCompletionTokens()στον κώδικα και όχι το παρωχημένοmaxTokens()
Σφάλματα μεταγλώττισης Maven
- Βεβαιωθείτε για το Java 21 ή νεότερο:
java -version - Καθαρίστε και κατασκευάστε ξανά:
mvn clean compile - Ελέγξτε τη σύνδεσή σας στο Internet για τη λήψη εξαρτήσεων
Προβλήματα σύνδεσης με την υπηρεσία
- Αν δείτε
Request to local service failed, τρέξτε:foundry service restart - Ελέγξτε τα φορτωμένα μοντέλα:
foundry service ps - Δείτε τα logs της υπηρεσίας:
foundry service diag
Αποποίηση ευθυνών:
Το παρόν έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης AI Co-op Translator. Ενώ προσπαθούμε για ακρίβεια, παρακαλούμε να λάβετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη γλώσσα του θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, η επαγγελματική ανθρώπινη μετάφραση συνιστάται. Δεν φέρουμε ευθύνη για οποιεσδήποτε παρανοήσεις ή λανθασμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.