Foundry Local vadnica za Spring Boot
April 15, 2026 · View on GitHub
Kazalo
- Pogoji
- Pregled projekta
- Razumevanje kode
- Kako vse skupaj deluje
- Namestitev Foundry Local
- Zagon aplikacije
- Pričakovani rezultat
- Naslednji koraki
- Reševanje težav
Pogoji
Pred začetkom te vadnice poskrbite, da imate:
- Java 21 ali novejši nameščen na vašem sistemu
- Maven 3.6+ za gradnjo projekta
- Foundry Local nameščen in zagnan
Namestitev Foundry Local:
Opomba: Foundry Local CLI je na voljo samo za Windows in macOS. Linux je podprt preko Foundry Local SDK-jev (Python, JavaScript, C#, Rust).
# Windows
winget install Microsoft.FoundryLocal
# macOS
brew tap microsoft/foundrylocal
brew install foundrylocal
Preverite namestitev:
foundry --version
Pregled projekta
Ta projekt vsebuje štiri glavne komponente:
- Application.java - glavni vhodna točka Spring Boot aplikacije
- FoundryLocalService.java - storitvena plast, ki upravlja komunikacijo z AI
- application.properties - konfiguracija za povezavo do Foundry Local
- pom.xml - Maven odvisnosti in konfiguracija projekta
Razumevanje kode
1. Konfiguracija aplikacije (application.properties)
Datoteka: 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
Kaj to počne:
- base-url: Določa, kje teče Foundry Local, vključno s potjo
/v1za združljivost z OpenAI API. Privzeta vrata so5273. Če so vrata drugačna, jih preverite zfoundry service status. - model (opcijsko): Ime AI modela za generiranje besedila. Aplikacija privzeto samodejno zazna model s klicem na Foundry Local
/v1/modelsob zagonu, zato tega ni treba nastavljati. Lahko pa ga nastavite ročno, če želite nadpisati samodejno zaznavanje.
Ključni koncept: Spring Boot samodejno naloži te lastnosti in jih omogoči v aplikaciji preko @Value annotacije.
2. Glavna aplikacijska razredna datoteka (Application.java)
Datoteka: 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); // Ni potreben spletni strežnik
app.run(args);
}
Kaj to počne:
@SpringBootApplicationomogoči samodejno konfiguracijo Spring BootWebApplicationType.NONEsporoči Springu, da gre za aplikacijo ukazne vrstice, ne spletni strežnik- Glavna metoda zažene Spring aplikacijo
Demo izvajalec:
@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("=========================");
};
}
Kaj to počne:
@Beanustvari komponento, ki jo Spring upravljaCommandLineRunnerizvede kodo po zagonu Spring BootfoundryLocalServiceje samodejno injiciran (odvisnostno vstavljanje)- Pošlje testno sporočilo AI in prikaže odgovor
3. Plastična storitev AI (FoundryLocalService.java)
Datoteka: src/main/java/com/example/FoundryLocalService.java
Vbrizgavanje konfiguracije:
@Service
public class FoundryLocalService {
@Value("${foundry.local.base-url:http://localhost:5273/v1}")
private String baseUrl;
@Value("${foundry.local.model:}")
private String model; // Samodejno zaznano, če je prazno
Kaj to počne:
@Servicepove Springu, da ta razred nudi poslovno logiko@Valuevstavi vrednosti iz application.properties- Model je privzeto prazen, kar sproži samodejno zaznavanje iz Foundry Local ob zagonu. To pomeni, da aplikacija deluje z vsakim modelom, ki je naložen v Foundry Local, brez ročne nastavitve.
Inicializacija odjemalca:
@PostConstruct
public void init() {
// Samodejno zaznaj model iz Foundry Local, če ni izrecno konfiguriran
if (model == null || model.isBlank()) {
model = detectModel();
}
this.openAIClient = OpenAIOkHttpClient.builder()
.baseUrl(baseUrl) // Osnovni URL že vključuje /v1 iz konfiguracije
.apiKey("not-needed") // Lokalni strežnik ne potrebuje pravega API ključa
.build();
}
Kaj to počne:
@PostConstructzažene to metodo po tem, ko Spring ustvari storitev- Če model ni konfiguriran, poizve na Foundry Local
/v1/modelsendpoint in izbere prvi naloženi model - Ustvari OpenAI odjemalca, ki kaže na lokalni Foundry Local primer
- Osnovni URL iz
application.propertiesže vključuje/v1za združljivost z OpenAI API - API ključ je nastavljen na "not-needed", ker lokalni razvoj ne zahteva preverjanja pristnosti
Metoda za klepet:
public String chat(String message) {
try {
ChatCompletionCreateParams params = ChatCompletionCreateParams.builder()
.model(model) // Kateri model umetne inteligence uporabiti
.addUserMessage(message) // Vaše vprašanje/spodbudnik
.maxCompletionTokens(150) // Omeji dolžino odgovora
.temperature(0.7) // Nadzoruj ustvarjalnost (0.0-1.0)
.build();
ChatCompletion chatCompletion = openAIClient.chat().completions().create(params);
// Izvleci odgovor umetne inteligence iz rezultata API-ja
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);
}
}
Kaj to počne:
- ChatCompletionCreateParams: Konfigurira zahtevo AI
model: Določa, kateri AI model uporabiti (mora ustrezati natančnemu ID-ju izfoundry model list)addUserMessage: Doda vaše sporočilo v pogovormaxCompletionTokens: Omeji dolžino odgovora (varčevanje z viri)temperature: Nadzor naključnosti (0.0 = determinističen, 1.0 = kreativen)
- API klic: Pošlje zahtevo Foundry Local
- Obdelava odgovora: Varno pridobi besedilo odgovora AI
- Obravnava napak: Zajame izjeme z uporabnimi napakami
4. Odvisnosti projekta (pom.xml)
Ključne odvisnosti:
<!-- 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>
Kaj to počnejo:
- spring-boot-starter: Zagotavlja osnovno funkcionalnost Spring Boot
- openai-java: Uradni OpenAI Java SDK za komunikacijo z API
- jackson-databind: Upravlja JSON seralizacijo/deseralizacijo za API klice
Kako vse skupaj deluje
Tukaj je celoten potek, ko zaženete aplikacijo:
- Zagon: Spring Boot se zažene in prebere
application.properties - Ustvarjanje storitve: Spring ustvari
FoundryLocalServicein vbrizga konfiguracijske vrednosti - Zaznavanje modela: Če model ni konfiguriran, storitev poizve Foundry Local
/v1/modelsendpoint in samodejno uporabi prvi na voljo model - Nastavitev odjemalca:
@PostConstructinicializira OpenAI odjemalca za povezavo z Foundry Local - Izvajanje demo:
CommandLineRunnerse izvaja po zagonu - Klic AI: Demo kliče
foundryLocalService.chat()z testnim sporočilom - Zahteva API: Storitev sestavi in pošlje OpenAI združljivo zahtevo v Foundry Local
- Obdelava odgovora: Storitev pridobi in vrne odgovor AI
- Izpis: Aplikacija izpiše odgovor in konča
Namestitev Foundry Local
-
Namestite Foundry Local po navodilih v razdelku Pogoji.
-
Zaženite storitev (če že ne teče):
foundry service start -
Preverite stanje storitve, da potrdite, da teče in zabeležite vrata:
foundry service status -
Prenesite in zaženite model (prenese se ob prvem zagonu, predpomni za nadaljnje zagon):
foundry model run phi-4-miniTa ukaz odpre interaktivno klepetalno sejo. Izhod je možen z
Ctrl+C. Model ostane naložen v storitvi.Namig: Za prikaz vseh razpoložljivih modelov zaženite
foundry model list. Zamenjajtephi-4-miniz katerimkoli aliasom iz kataloga (npr.qwen2.5-0.5bza manjši/hitrejši model). -
Preverite, da je model naložen:
foundry service ps -
Posodobite
application.properties, če je potrebno:- Privzeti
base-url(http://localhost:5273/v1) ustreza privzetim CLI vratom. Posodobite samo, čefoundry service statuspokaže drugačna vrata. - Model je samodejno zaznan ob zagonu — konfiguracija ni potrebna.
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 - Privzeti
Zagon aplikacije
Korak 1: Preverite, da je model naložen v Foundry Local
foundry service ps
Če niso na voljo modeli, naložite enega:
foundry model run phi-4-mini
Korak 2: Sestavite in zaženite aplikacijo
V drugem terminalu:
cd 04-PracticalSamples/foundrylocal
mvn spring-boot:run
Ali sestavite in zaženite kot JAR:
mvn clean package
java -jar target/foundry-local-spring-boot-0.0.1-SNAPSHOT.jar
Pričakovani rezultat
=== 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?
=========================
Naslednji koraki
Za več primerov glejte Poglavje 04: Praktični primeri
Reševanje težav
Pogoste težave
"Povezava zavrnjena" ali "Storitev ni na voljo"
- Preverite storitev:
foundry service status - Ponovno zaženite, če je potrebno:
foundry service restart - Preverite, da vrata v
application.propertiesustrezajo izpisufoundry service status - Prepričajte se, da URL konča z
/v1:http://localhost:5273/v1
"Model ni najden" ob zagonu
- Aplikacija samodejno zazna model. Prepričajte se, da je naložen vsaj en model:
foundry service ps - Če ni naloženih modelov:
foundry model run phi-4-mini - Če ste ročno nastavili ime modela v
application.properties, preverite, da ustreza izpisufoundry model list
Napake "400 Bad Request"
- Prepričajte se, da osnovni URL vključuje
/v1:http://localhost:5273/v1 - Poskrbite, da v kodi uporabljate
maxCompletionTokens()(ne zastarelegamaxTokens())
Napake pri prevajanju Maven
- Poskrbite, da imate Java 21 ali novejšo:
java -version - Počistite in ponovno sestavite:
mvn clean compile - Preverite internetno povezavo za prenos odvisnosti
Težave s povezavo do storitve
- Če vidite
Request to local service failed, zaženite:foundry service restart - Preverite naložene modele:
foundry service ps - Oglejte si dnevniške datoteke storitve:
foundry service diag
Omejitev odgovornosti: Ta dokument je bil preveden z uporabo storitve za prevajanje z umetno inteligenco Co-op Translator. Čeprav si prizadevamo za natančnost, vas opozarjamo, da avtomatizirani prevodi lahko vsebujejo napake ali netočnosti. Izvirni dokument v njegovem izvirnem jeziku velja za avtoritativni vir. Za kritične informacije priporočamo strokovni človeški prevod. Nismo odgovorni za morebitna nesporazume ali napačne interpretacije, ki izhajajo iz uporabe tega prevoda.