Foundry Local Spring Boot Tutorial
April 15, 2026 ยท View on GitHub
Table of Contents
- Prasyarat
- Gambaran Projek
- Memahami Kod
- Bagaimana Ia Bekerjasama
- Menyediakan Foundry Local
- Menjalankan Aplikasi
- Output Dijangka
- Langkah Seterusnya
- Penyelesaian Masalah
Prasyarat
Sebelum memulakan tutorial ini, pastikan anda mempunyai:
- Java 21 atau lebih tinggi dipasang pada sistem anda
- Maven 3.6+ untuk membina projek
- Foundry Local dipasang dan sedang berjalan
Pasang Foundry Local:
Nota: Foundry Local CLI tersedia hanya pada Windows dan macOS. Linux disokong melalui Foundry Local SDKs (Python, JavaScript, C#, Rust).
# Windows
winget install Microsoft.FoundryLocal
# macOS
brew tap microsoft/foundrylocal
brew install foundrylocal
Sahkan pemasangan:
foundry --version
Gambaran Projek
Projek ini terdiri daripada empat komponen utama:
- Application.java - Titik masuk utama aplikasi Spring Boot
- FoundryLocalService.java - Lapisan perkhidmatan yang mengendalikan komunikasi AI
- application.properties - Konfigurasi untuk sambungan Foundry Local
- pom.xml - Kebergantungan Maven dan konfigurasi projek
Memahami Kod
1. Konfigurasi Aplikasi (application.properties)
Fail: 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
Apa yang dilakukan ini:
- base-url: Menentukan di mana Foundry Local sedang berjalan, termasuk laluan
/v1untuk keserasian API OpenAI. Port lalai ialah5273. Jika port berbeza, semak denganfoundry service status. - model (pilihan): Menamakan model AI yang digunakan untuk penjanaan teks. Secara lalai, aplikasi mengesan model secara automatik dengan bertanya ke titik akhir
/v1/modelsFoundry Local semasa permulaan, jadi anda tidak perlu menetapkannya. Anda masih boleh menetapkannya secara eksplisit untuk menggantikan pengesanan automatik jika perlu.
Konsep utama: Spring Boot secara automatik memuatkan sifat ini dan menjadikan ia tersedia kepada aplikasi anda menggunakan anotasi @Value.
2. Kelas Aplikasi Utama (Application.java)
Fail: 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); // Tidak perlu pelayan web
app.run(args);
}
Apa yang dilakukan ini:
@SpringBootApplicationmengaktifkan konfigurasi automatik Spring BootWebApplicationType.NONEmemberitahu Spring ini adalah aplikasi baris perintah, bukan pelayan web- Kaedah utama memulakan aplikasi 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("=========================");
};
}
Apa yang dilakukan ini:
@Beanmencipta komponen yang diurus oleh SpringCommandLineRunnermenjalankan kod selepas Spring Boot bermulafoundryLocalServicedisuntik secara automatik oleh Spring (penyuntikan kebergantungan)- Menghantar mesej ujian ke AI dan memaparkan balasan
3. Lapisan Perkhidmatan AI (FoundryLocalService.java)
Fail: src/main/java/com/example/FoundryLocalService.java
Suntikan Konfigurasi:
@Service
public class FoundryLocalService {
@Value("${foundry.local.base-url:http://localhost:5273/v1}")
private String baseUrl;
@Value("${foundry.local.model:}")
private String model; // Dikesan secara automatik jika kosong
Apa yang dilakukan ini:
@Servicememberitahu Spring bahawa kelas ini menyediakan logik perniagaan@Valuemenyuntik nilai konfigurasi dari application.properties- Model lalai kosong, yang mencetuskan pengesanan automatik dari Foundry Local semasa permulaan. Ini bermakna aplikasi berfungsi dengan mana-mana model yang dimuat dalam Foundry Local tanpa konfigurasi manual.
Inisialisasi Klien:
@PostConstruct
public void init() {
// Mengesan model secara automatik dari Foundry Lokal jika tidak dikonfigurasi secara eksplisit
if (model == null || model.isBlank()) {
model = detectModel();
}
this.openAIClient = OpenAIOkHttpClient.builder()
.baseUrl(baseUrl) // URL Asas sudah termasuk /v1 dari konfigurasi
.apiKey("not-needed") // Pelayan tempatan tidak memerlukan kunci API sebenar
.build();
}
Apa yang dilakukan ini:
@PostConstructmenjalankan kaedah ini selepas Spring mencipta perkhidmatan- Jika tiada model dikonfigurasikan, ia bertanya ke titik akhir
/v1/modelsFoundry Local dan memilih model pertama yang dimuat - Mencipta klien OpenAI yang menunjuk ke instans Foundry Local tempatan anda
- URL asas dari
application.propertiessudah termasuk/v1untuk keserasian API OpenAI - Kunci API diset "not-needed" kerana pembangunan tempatan tidak memerlukan pengesahan
Kaedah Chat:
public String chat(String message) {
try {
ChatCompletionCreateParams params = ChatCompletionCreateParams.builder()
.model(model) // Model AI mana yang hendak digunakan
.addUserMessage(message) // Soalan/pesan anda
.maxCompletionTokens(150) // Hadkan panjang jawapan
.temperature(0.7) // Kawal kreativiti (0.0-1.0)
.build();
ChatCompletion chatCompletion = openAIClient.chat().completions().create(params);
// Ekstrak jawapan AI daripada keputusan 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);
}
}
Apa yang dilakukan ini:
- ChatCompletionCreateParams: Mengkonfigurasikan permintaan AI
model: Menentukan model AI yang hendak digunakan (mesti sepadan dengan ID tepat darifoundry model list)addUserMessage: Menambah mesej anda ke perbualanmaxCompletionTokens: Mengehadkan panjang balasan (menjimatkan sumber)temperature: Mengawal rawak (0.0 = deterministik, 1.0 = kreatif)
- Panggilan API: Menghantar permintaan ke Foundry Local
- Pengendalian Balasan: Mengekstrak balasan teks AI dengan selamat
- Pengendalian Ralat: Membalut pengecualian dengan mesej ralat yang berguna
4. Kebergantungan Projek (pom.xml)
Kebergantungan Utama:
<!-- 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>
Apa yang dilakukan ini:
- spring-boot-starter: Menyediakan fungsi teras Spring Boot
- openai-java: SDK rasmi Java OpenAI untuk komunikasi API
- jackson-databind: Mengendalikan penyerlahan/penyahserlahan JSON untuk panggilan API
Bagaimana Ia Bekerjasama
Berikut aliran lengkap apabila anda menjalankan aplikasi:
- Permulaan: Spring Boot bermula dan membaca
application.properties - Penciptaan Perkhidmatan: Spring mencipta
FoundryLocalServicedan menyuntik nilai konfigurasi - Pengesanan Model: Jika tiada model dikonfigurasikan, perkhidmatan bertanya ke titik akhir
/v1/modelsFoundry Local dan menggunakan model pertama yang tersedia secara automatik - Persediaan Klien:
@PostConstructmenginisialisasi klien OpenAI untuk sambung ke Foundry Local - Pelaksanaan Demo:
CommandLineRunnerdilaksanakan selepas permulaan - Panggilan AI: Demo memanggil
foundryLocalService.chat()dengan mesej ujian - Permintaan API: Perkhidmatan membina dan menghantar permintaan OpenAI-compatible ke Foundry Local
- Pemprosesan Balasan: Perkhidmatan mengekstrak dan mengembalikan balasan AI
- Paparan: Aplikasi mencetak balasan dan keluar
Menyediakan Foundry Local
-
Pasang Foundry Local menggunakan arahan dalam bahagian Prasyarat.
-
Mulakan perkhidmatan (jika belum berjalan):
foundry service start -
Semak status perkhidmatan untuk mengesahkan ia berjalan dan ambil perhatian port:
foundry service status -
Muat turun dan jalankan model (muat turun pada kali pertama dijalankan, disimpan untuk kali berikutnya):
foundry model run phi-4-miniIni membuka sesi chat interaktif. Anda boleh keluar dengan
Ctrl+C. Model kekal dimuat dalam perkhidmatan.Tip: Jalankan
foundry model listuntuk melihat semua model yang tersedia. Gantikanphi-4-minidengan mana-mana alias dari katalog (contohnya,qwen2.5-0.5buntuk model lebih kecil/pantas). -
Sahkan model dimuat:
foundry service ps -
Kemas kini
application.propertiesjika perlu:base-urllalai (http://localhost:5273/v1) sepadan dengan port CLI lalai. Kemas kini hanya jikafoundry service statusmenunjukkan port berbeza.- Model dikesan secara automatik semasa permulaan โ tiada konfigurasi diperlukan.
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
Menjalankan Aplikasi
Langkah 1: Pastikan model dimuat dalam Foundry Local
foundry service ps
Jika tiada model disenaraikan, muatkan satu:
foundry model run phi-4-mini
Langkah 2: Bina dan Jalankan Aplikasi
Di terminal berasingan:
cd 04-PracticalSamples/foundrylocal
mvn spring-boot:run
Atau bina dan jalankan sebagai JAR:
mvn clean package
java -jar target/foundry-local-spring-boot-0.0.1-SNAPSHOT.jar
Output Dijangka
=== 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?
=========================
Langkah Seterusnya
Untuk contoh lebih lanjut, lihat Bab 04: Contoh praktikal
Penyelesaian Masalah
Isu Lazim
"Connection refused" atau "Service unavailable"
- Semak perkhidmatan:
foundry service status - Mulakan semula jika perlu:
foundry service restart - Sahkan port dalam
application.propertiessepadan dengan outputfoundry service status - Pastikan URL berakhir dengan
/v1:http://localhost:5273/v1
"No model found" semasa permulaan
- Aplikasi mengesan model secara automatik. Pastikan sekurang-kurangnya satu model dimuat:
foundry service ps - Jika tiada model dimuat:
foundry model run phi-4-mini - Jika anda menggantikan nama model dalam
application.properties, pastikan sepadan denganfoundry model list
Ralat "400 Bad Request"
- Sahkan URL asas termasuk
/v1:http://localhost:5273/v1 - Pastikan anda menggunakan
maxCompletionTokens()dalam kod anda (bukanmaxTokens()yang sudah lapuk)
Ralat kompilasi Maven
- Pastikan Java 21 atau lebih tinggi:
java -version - Bersihkan dan bina semula:
mvn clean compile - Semak sambungan internet untuk memuat turun kebergantungan
Masalah sambungan perkhidmatan
- Jika anda melihat
Request to local service failed, jalankan:foundry service restart - Semak model yang dimuat:
foundry service ps - Lihat log perkhidmatan:
foundry service diag
Penafian:
Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI Co-op Translator. Walaupun kami berusaha untuk ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang sahih. Untuk maklumat penting, terjemahan profesional oleh manusia adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini.