Foundry Local Spring Boot Mokymasis
April 15, 2026 · View on GitHub
Turinys
- Reikalavimai prieš pradedant
- Projekto apžvalga
- Kodo supratimas
- Kaip visa tai veikia kartu
- Foundry Local nustatymas
- Programos paleidimas
- Tikėtinas rezultatas
- Kiti veiksmai
- Trikčių šalinimas
Reikalavimai prieš pradedant
Prieš pradėdami šį mokymą, įsitikinkite, kad turite:
- Java 21 arba naujesnę versiją savo sistemoje
- Maven 3.6+ projektų kūrimui
- Įdiegtą ir veikiančią Foundry Local
Įdiekite Foundry Local:
Pastaba: Foundry Local CLI galima naudoti tik Windows ir macOS sistemose. Linux palaikomas naudojant Foundry Local SDKs (Python, JavaScript, C#, Rust).
# Windows
winget install Microsoft.FoundryLocal
# macOS
brew tap microsoft/foundrylocal
brew install foundrylocal
Patikrinkite įdiegimą:
foundry --version
Projekto apžvalga
Šis projektas susideda iš keturių pagrindinių komponentų:
- Application.java - pagrindinis Spring Boot programos įėjimo taškas
- FoundryLocalService.java - paslaugų sluoksnis, kuris tvarko AI komunikaciją
- application.properties - Foundry Local ryšio konfigūracija
- pom.xml - Maven priklausomybės ir projekto konfigūracija
Kodo supratimas
1. Programos konfigūracija (application.properties)
Failas: 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
Ką tai daro:
- base-url: Nurodo, kur veikia Foundry Local, įskaitant
/v1kelią dėl OpenAI API suderinamumo. Numatytoji prievado reikšmė yra5273. Jei prievadas kitoks, patikrinkite jį sufoundry service status. - model (pasirinktinai): Nurodo AI modelį, naudojamą teksto generavimui. Pagal numatytuosius nustatymus programa automatiškai aptinka modelį užklausdama Foundry Local
/v1/modelspabaigos tašką paleidimo metu, todėl nereikia to nustatyti. Vis tiek galite jį nurodyti rankiniu būdu, jei norite pakeisti automatinį aptikimą.
Pagrindinė sąvoka: Spring Boot automatiškai įkelia šiuos parametrus ir pateikia juos programai per @Value anotaciją.
2. Pagrindinė programos klasė (Application.java)
Failas: 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); // Nereikia jokio interneto serverio
app.run(args);
}
Ką tai daro:
@SpringBootApplicationįjungia Spring Boot automatinį konfigūravimąWebApplicationType.NONEnurodo Spring, kad tai komandų eilutės programa, o ne interneto serveris- Pagrindinė funkcija paleidžia Spring programą
Demo vykdytojas:
@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("=========================");
};
}
Ką tai daro:
@Beansukuria komponentą, kuriuo valdo SpringCommandLineRunnervykdo kodą po Spring Boot paleidimofoundryLocalServiceautomatiškai įjungiama Spring (priklausomybės injekcija)- Siunčia bandymo žinutę AI ir rodo atsakymą
3. AI paslaugų sluoksnis (FoundryLocalService.java)
Failas: src/main/java/com/example/FoundryLocalService.java
Konfigūracijos įvedimas:
@Service
public class FoundryLocalService {
@Value("${foundry.local.base-url:http://localhost:5273/v1}")
private String baseUrl;
@Value("${foundry.local.model:}")
private String model; // Automatiškai aptikta, jei tuščia
Ką tai daro:
@Servicenurodo Spring, kad ši klasė teikia verslo logiką@Valueįveda konfigūracijos reikšmes iš application.properties- Modelis pagal numatytuosius nustatymus yra tuščias, todėl paleidimo metu vykdomas automatinis Foundry Local modelio aptikimas. Tai reiškia, kad programa veikia su bet kuriuo Foundry Local įkeltu modeliu be rankinės konfigūracijos.
Kliento inicijavimas:
@PostConstruct
public void init() {
// Automatiškai aptikti modelį iš Foundry Local, jei jis nėra aiškiai sukonfigūruotas
if (model == null || model.isBlank()) {
model = detectModel();
}
this.openAIClient = OpenAIOkHttpClient.builder()
.baseUrl(baseUrl) // Pagrindinis URL jau apima /v1 iš konfigūracijos
.apiKey("not-needed") // Vietiniam serveriui nereikia tikro API rakto
.build();
}
Ką tai daro:
@PostConstructvykdo šį metodą po Spring paslaugos sukūrimo- Jei nėra sukonfigūruoto modelio, užklausia Foundry Local
/v1/modelspabaigos taško ir pasirenka pirmą pasiekiamą modelį - Sukuria OpenAI klientą, kuris jungiasi prie jūsų vietinės Foundry Local instancijos
- Bazinis URL iš
application.propertiesjau apima/v1dėl OpenAI API suderinamumo - API raktas nustatytas kaip "not-needed", nes vietiniame kūrime autentifikacija nereikalinga
Pokalbio metodas:
public String chat(String message) {
try {
ChatCompletionCreateParams params = ChatCompletionCreateParams.builder()
.model(model) // Kurį DI modelį naudoti
.addUserMessage(message) // Jūsų klausimas/prašymas
.maxCompletionTokens(150) // Apriboti atsakymo ilgį
.temperature(0.7) // Kontroliuoti kūrybingumą (0.0-1.0)
.build();
ChatCompletion chatCompletion = openAIClient.chat().completions().create(params);
// Išgauti DI atsakymą iš API rezultato
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);
}
}
Ką tai daro:
- ChatCompletionCreateParams: Konfigūruoja AI užklausą
model: Nurodo, kurį AI modelį naudoti (turi tiksliai atitikti ID, gaunamą išfoundry model list)addUserMessage: Prideda jūsų žinutę prie pokalbiomaxCompletionTokens: Nustato maksimalų atsakymo ilgio apribojimą (taupo resursus)temperature: Valdo atsitiktinumą (0.0 = deterministinis, 1.0 = kūrybiškas)
- API užklausa: Siunčia užklausą Foundry Local
- Atsakymo tvarkymas: Saugo teksto atsakymą iš AI
- Klaidų tvarkymas: Apgaubia išimtis naudingomis klaidų žinutėmis
4. Projekto priklausomybės (pom.xml)
Pagrindinės priklausomybės:
<!-- 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>
Ką jos daro:
- spring-boot-starter: Pateikia pagrindinę Spring Boot funkcionalumą
- openai-java: Oficialus OpenAI Java SDK API sąveikai
- jackson-databind: Tvarko JSON serializavimą/atserializavimą API užklausoms
Kaip visa tai veikia kartu
Štai pilnas procesas paleidus programą:
- Paleidimas: Spring Boot paleidžiamas ir skaito
application.properties - Paslaugos sukūrimas: Spring sukuria
FoundryLocalServiceir įveda konfigūracijos reikšmes - Modelio aptikimas: Jei modelis nesukonfigūruotas, paslauga užklausia Foundry Local
/v1/modelsir automatiškai naudoja pirmą modelį - Kliento paruošimas:
@PostConstructinicijuoja OpenAI klientą, kad jungtųsi prie Foundry Local - Demo vykdymas:
CommandLineRunnerpaleidžiamas po starto - AI užklausa: Demo skambina
foundryLocalService.chat()su testine žinute - API užklausa: Paslauga sukuria ir siunčia OpenAI suderinamą užklausą Foundry Local
- Atsakymo apdorojimas: Paslauga gauna ir pateikia AI atsakymą
- Ekrane: Programa išveda atsakymą ir baigia darbą
Foundry Local nustatymas
-
Įdiekite Foundry Local naudodamiesi instrukcijomis skyriuje Reikalavimai prieš pradedant.
-
Paleiskite paslaugą (jei dar neveikia):
foundry service start -
Patikrinkite paslaugos būseną, kad įsitikintumėte, jog ji veikia, ir užfiksuokite prievadą:
foundry service status -
Atsisiųskite ir paleiskite modelį (pirmą kartą atsisiunčiama, vėliau talpinama):
foundry model run phi-4-miniTai atveria interaktyvią pokalbių sesiją. Išeiti galite paspaudę
Ctrl+C. Modelis lieka pakrautas paslaugoje.Patarimas: Vykdykite
foundry model list, kad matytumėte visus galimus modelius. Pakeiskitephi-4-miniį bet kurį katalogo alias’ą (pvz.,qwen2.5-0.5b– mažesniam/greitesniam modeliui). -
Patikrinkite, ar modelis įkeltas:
foundry service ps -
Atnaujinkite
application.properties, jei reikia:- Numatytoji
base-url(http://localhost:5273/v1) sutampa su numatytuoju CLI prievadu. Atnaujinkite tik jeifoundry service statusrodo kitą prievadą. - Modelis automatiškai aptinkamas paleidžiant – konfigūracijos nurodyti nereikia.
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 - Numatytoji
Programos paleidimas
1 veiksmas: Įsitikinkite, kad Foundry Local yra pakrautas modelis
foundry service ps
Jei modelių nėra, įkelkite vieną:
foundry model run phi-4-mini
2 veiksmas: Sukurkite ir paleiskite programą
Atidarykite naują terminalą:
cd 04-PracticalSamples/foundrylocal
mvn spring-boot:run
Arba sukompiliuokite ir paleiskite kaip JAR:
mvn clean package
java -jar target/foundry-local-spring-boot-0.0.1-SNAPSHOT.jar
Tikėtinas rezultatas
=== 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?
=========================
Kiti veiksmai
Daugiau pavyzdžių rasite skyriuje 04 skyrius: Praktiniai pavyzdžiai
Trikčių šalinimas
Dažnos problemos
„Connection refused“ arba „Service unavailable“
- Patikrinkite paslaugą:
foundry service status - Jei reikia, paleiskite iš naujo:
foundry service restart - Patikrinkite, ar prievadas
application.propertiesatitinkafoundry service status - Įsitikinkite, kad URL baigiasi
/v1:http://localhost:5273/v1
„No model found“ paleidžiant
- Programa automatiškai aptinka modelį. Įsitikinkite, kad bent vienas modelis įkeltas:
foundry service ps - Jei modelių nėra:
foundry model run phi-4-mini - Jei rankiniu būdu keitėte modelį
application.properties, patikrinkite, kad jis atitinkafoundry model list
„400 Bad Request“ klaidos
- Patikrinkite, ar bazinis URL apima
/v1:http://localhost:5273/v1 - Įsitikinkite, kad naudojate
maxCompletionTokens()savo kode (nepasenusiąmaxTokens()versiją)
Maven kompiliacijos klaidos
- Patikrinkite, ar Java versija 21 ar naujesnė:
java -version - Išvalykite ir sukompiliuokite:
mvn clean compile - Patikrinkite interneto ryšį priklausomybėms atsisiųsti
Paslaugos ryšio problemos
- Jei matote
Request to local service failed, paleiskite:foundry service restart - Patikrinkite įkeltus modelius:
foundry service ps - Peržiūrėkite paslaugos žurnalus:
foundry service diag
Atsakomybės apribojimas: Šis dokumentas buvo išverstas naudojant dirbtinio intelekto vertimo paslaugą Co-op Translator. Nors stengiamės užtikrinti tikslumą, prašome atkreipti dėmesį, kad automatiniai vertimai gali turėti klaidų ar netikslumų. Pradinė dokumento versija gimtąja kalba turi būti laikoma autoritetingu šaltiniu. Kritinei informacijai rekomenduojamas profesionalus žmogaus vertimas. Mes neatsakome už bet kokius nesusipratimus ar neteisingus interpretavimus, kylantį dėl šio vertimo naudojimo.