មេរៀន Foundry Local Spring Boot
April 15, 2026 · View on GitHub
បញ្ជីមេរៀន
- លក្ខខណ្ឌជាមុន
- ទិដ្ឋភាពគម្រោង
- យល់ដឹងអំពីកូដ
- របៀបដែលវាផ្គុំគ្នា
- ការដំឡើង Foundry Local
- ការប្រើកម្មវិធី
- លទ្ធផលដែលរំពឹងទុក
- ជំហានបន្ទាប់
- ដោះស្រាយបញ្ហា
លក្ខខណ្ឌជាមុន
មុននឹងចាប់ផ្តើមមេរៀននេះ សូមប្រាកដថាអ្នកមាន៖
- Java 21 ឬខ្ពស់ជាងនេះ ដំឡើងលើប្រព័ន្ធរបស់អ្នក
- Maven 3.6+ សម្រាប់កំណត់សំណុំគម្រោង
- Foundry Local ត្រូវបានដំឡើងហើយកំពុងដំណើរការ
ដំឡើង Foundry Local:
ចំណាំ: Foundry Local CLI មានសម្រាប់ Windows និង macOS តែប៉ុណ្ណោះ។ Linux ត្រូវបានគាំទ្របានតាមរយៈ Foundry Local SDKs (Python, JavaScript, C#, Rust)។
# វីនដូូ
winget install Microsoft.FoundryLocal
# ម៉ាក់អូស
brew tap microsoft/foundrylocal
brew install foundrylocal
ផ្ទៀងផ្ទាត់ការដំឡើង៖
foundry --version
ទិដ្ឋភាពគម្រោង
គម្រោងនេះមានបួនផ្នែកសំខាន់៖
- Application.java - ចំណុចចូលកម្មវិធី Spring Boot សំខាន់
- FoundryLocalService.java - ស្រទាប់សេវាកម្មដែលគ្រប់គ្រងការប្រាស្រ័យទាក់ទង AI
- application.properties - ការកំណត់សម្រាប់ការភ្ជាប់ Foundry Local
- pom.xml - ខួប dependencies និងការកំណត់គម្រោង
យល់ដឹងអំពីកូដ
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 ដែលត្រូវប្រើសម្រាប់បង្កើតអត្ថបទ។ លំនាំដើមកម្មវិធីនឹងស្វ័យប្រមាណម៉ូដែល តាមការសួរព័ត៌មាន
/v1/modelsរបស់ Foundry Local នៅពេលចាប់ផ្តើម ដូច្នេះអ្នកមិនចាំបាច់កំណត់វាទេ។ អ្នកអាចកំណត់វាដោយច្បាស់ចង់លុបចោលការស្វ័យប្រមាណបើចាំបាច់។
មូលដ្ឋានគោលន័យ៖ 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ជូនដំណឹងថាអាជីវកម្មនេះជាកម្មវិធីបញ្ជាលើ Command-Line មិនមែនជា Web server- មធ្យោបាយចម្បងចាប់ផ្តើមកម្មវិធី Spring
កម្មវិធីដំណើរការសាកល្បង៖
@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បង្កើតផ្នែកទ្រទ្រង់ដែល Spring គ្រប់គ្រងCommandLineRunnerរត់កូដបន្ទាប់ពី Spring Boot ចាប់ផ្តើមfoundryLocalServiceត្រូវបានបញ្ជូលដោយ Spring (dependency injection)- ផ្ញើសារសាកល្បងទៅ AI ហើយបង្ហាញការឆ្លើយតប
3. ស្រទាប់សេវាកម្ម AI (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អោយដឹងថាថ្នាក់នេះផ្តល់យុទ្ធសាស្ត្រអាជីវកម្ម@Valueចាក់បញ្ចូលតម្លៃកំណត់ពី application.properties- ម៉ូដែលដើមគឺទទេ ដែលបណ្តាលឲ្យមានការស្វ័យប្រមាណពី Foundry Local នៅពេលចាប់ផ្តើម។ នេះមានន័យថាកម្មវិធីដំណើរការជាមួយម៉ូដែលណាមួយដែលបានដាក់នៅក្នុង Foundry Local ដោយមិនចាំបាច់កំណត់ដោយដៃ។
ការចាប់ផ្តើម Client៖
@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 បង្កើតសេវាកម្ម- ប្រសិនបើមិនមានម៉ូដែលកំណត់ វាស្នើសុំ
/v1/modelsរបស់ Foundry Local ហើយជ្រើសរើសម៉ូដែលដំបូងដែលបានទាញយក - បង្កើត client OpenAI ដែលបង្ហាញទៅម៉ាស៊ីន Foundry Local របស់អ្នក
- base 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 Call៖ ផ្ញើសំណើទៅ Foundry Local
- ការដោះស្រាយចម្លើយ៖ ដកអត្ថបទចម្លើយ AI ដោយមានសុវត្ថិភាព
- ការដោះស្រាយកម្រិតបញ្ហា៖ រុំកម្រងករណី exception ជាមួយសារ error ដែលមានប្រយោជន៍
4. ខួប Dependencies គម្រោង (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៖ គម្រោង Java SDK ផ្លូវការសម្រាប់ OpenAI API
- jackson-databind៖ ដំណើរការសម្រួល JSON សម្រាប់កម្មវិធី API
របៀបដែលវាផ្គុំគ្នា
នេះជាជួរប្រតិបត្តិពេញលេញពេលអ្នករត់កម្មវិធី៖
- ចាប់ផ្តើម: Spring Boot ចាប់ផ្តើម ហើយអាន
application.properties - ការបង្កើតសេវាកម្ម: Spring បង្កើត
FoundryLocalServiceហើយចាក់បញ្ចូលតម្លៃកំណត់ - ការស្វ័យប្រមាណម៉ូដែល: ប្រសិនបើមិនមានម៉ូដែល ការសេវាស្នើសុំ
/v1/modelsរបស់ Foundry Local ហើយប្រើម៉ូដែលដំបូងនៅស្រាប់ - ការកំណត់ client:
@PostConstructចាប់ផ្តើម client OpenAI ဆាកដល់ Foundry Local - ការប្រើប្រាស់សាកល្បង:
CommandLineRunnerធ្វើការប្រតិបត្តិបន្ទាប់ពីចាប់ផ្តើម - សារហៅ AI: ដំណើរការនៅ
foundryLocalService.chat()ជាមួយសារសាកល្បង - សំណើ API: សេវាកម្មកសាង និងផ្ញើសំណើ OpenAI-compatible ទៅ Foundry Local
- ដោះស្រាយចម្លើយ: សេវាកម្មដក ចម្លើយ AI ហើយត្រឡប់វិញ
- បង្ហាញលទ្ធផល: កម្មវិធីបោះពុម្ពចម្លើយ ហើយចេញពីកម្មវិធី
ការដំឡើង Foundry Local
-
ដំឡើង Foundry Local ដោយអនុវត្តតាមសេចក្តីណែនាំនៅក្នុងផ្នែក លក្ខខណ្ឌជាមុន។
-
ចាប់ផ្តើមសេវាកម្ម (ប្រសិនបើមិនបានដំណើរការ):
foundry service start -
ពិនិត្យស្ថានភាពសេវាកម្ម ដើម្បីបញ្ជាក់ថាវាកំពុងដំណើរការ និងចំណាំប័រផត់ផត:
foundry service status -
ទាញយក និងរត់ម៉ូដែល (ទាញយកលើកដំបូង ហើយផ្ទុកក្នុង cache សម្រាប់ដំណើរការជាបន្ទាប់):
foundry model run phi-4-miniនេះបើកកិច្ចប្រជុំជជែកអន្តរកម្ម អ្នកអាចចេញដោយចុច
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.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 - base-url លំនាំដើម (
ការប្រើកម្មវិធី
ជំហាន 1: ប្រាកដថាម៉ូដែលបានផ្ទុកក្នុង Foundry Local
foundry service ps
ប្រសិនបើគ្មានម៉ូដែលបង្ហាញ ចំណុះមួយ:
foundry model run phi-4-mini
ជំហាន 2: បង្កើត និងរត់កម្មវិធី
នៅក្នុង Terminal ផ្សេងទៀត:
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 - ពិនិត្យការតភ្ជាប់អ៊ីនធើណិតសម្រាប់ទាញ dependencies
បញ្ហាការភ្ជាប់សេវាកម្ម
- ប្រសិនបើអ្នកឃើញ
Request to local service failedសូមរត់៖foundry service restart - ពិនិត្យម៉ូដែលផ្ទុក៖
foundry service ps - មើលកំណត់ហេតុសេវាកម្ម៖
foundry service diag
បញ្ជាក់៖
ឯកសារនេះត្រូវបានបកប្រែដោយប្រើសេវាបកប្រែ AI Co-op Translator។ ខណៈពេលយើងខិតខំបំពេញភាពត្រឹមត្រូវ សូមជ្រាបថាការបកប្រែដោយស្វ័យប្រវត្តិក្នុងនេះអាចមានកំហុស ឬភាពមិនត្រឹមត្រូវខ្លះ។ ឯកសារដើមជាភាសារដែលមានដើមគួរត្រូវបានគេចាត់ទុកជាធនធានមានសុពាល់។ សម្រាប់ព័ត៌មានសំខាន់ៗ សូមផ្ដល់ការបកប្រែដោយមនុស្សអ្នកជំនាញ។ យើងមិនទទួលខុសត្រូវចំពោះការយល់ច្រឡំឬការបកស្រាយខុសពីការប្រើប្រាស់ការបកប្រែនេះទេ។