آموزش محلی Foundry Spring Boot
April 15, 2026 · View on GitHub
فهرست مطالب
- پیشنیازها
- بررسی پروژه
- درک کد
- نحوه کارکرد کلی
- راهاندازی Foundry Local
- اجرای برنامه
- خروجی مورد انتظار
- گامهای بعدی
- عیبیابی
پیشنیازها
قبل از شروع این آموزش، مطمئن شوید که:
- جاوا نسخه 21 یا بالاتر روی سیستم شما نصب شده باشد
- مِیون نسخه 3.6+ برای ساخت پروژه موجود باشد
- Foundry Local نصب و در حال اجرا باشد
نصب Foundry Local:
توجه: رابط خط فرمان Foundry Local فقط روی ویندوز و macOS در دسترس است. لینوکس از طریق Foundry Local SDKs (پایتون، جاوااسکریپت، C#، راست) پشتیبانی میشود.
# ویندوز
winget install Microsoft.FoundryLocal
# مک او اس
brew tap microsoft/foundrylocal
brew install foundrylocal
نصب را بررسی کنید:
foundry --version
بررسی پروژه
این پروژه از چهار جزء اصلی تشکیل شده است:
- Application.java - نقطه ورود اصلی برنامه Spring Boot
- FoundryLocalService.java - لایه سرویس که ارتباط با هوش مصنوعی را مدیریت میکند
- application.properties - پیکربندی اتصال Foundry Local
- pom.xml - وابستگیها و پیکربندی پروژه برای مِیون
درک کد
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برای سازگاری با API OpenAI. پورت پیشفرض5273است. اگر پورت فرق دارد، باfoundry service statusآن را بررسی کنید. - model (اختیاری): نام مدل هوش مصنوعی که برای تولید متن استفاده میشود. به طور پیشفرض، برنامه مدل را به صورت خودکار با پرسوجو از نقطه انتهایی
/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به Spring میگوید این یک برنامه خط فرمان است، نه یک وب سرور- متد main برنامه 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 تزریق میشود (تزریق وابستگی)- یک پیام تست به هوش مصنوعی ارسال میکند و پاسخ آن را نمایش میدهد
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) // آدرس پایه از قبل شامل /v1 از پیکربندی است
.apiKey("not-needed") // سرور محلی به کلید API واقعی نیاز ندارد
.build();
}
این بخش چه کاری انجام میدهد:
@PostConstructاین متد را بعد از ایجاد سرویس توسط Spring اجرا میکند- اگر مدلی تنظیم نشده باشد، از نقطه انتهایی
/v1/modelsدر Foundry Local پرسوجو میکند و اولین مدل موجود را انتخاب میکند - یک کلاینت OpenAI ایجاد میکند که به نمونه محلی Foundry Local شما اشاره دارد
- URL پایه از
application.propertiesشامل/v1برای سازگاری با API OpenAI است - کلید API به "not-needed" تنظیم شده چون توسعه محلی نیازی به احراز هویت ندارد
متد چت:
public String chat(String message) {
try {
ChatCompletionCreateParams params = ChatCompletionCreateParams.builder()
.model(model) // کدام مدل هوش مصنوعی استفاده شود
.addUserMessage(message) // سوال/درخواست شما
.maxCompletionTokens(150) // محدودیت در طول پاسخ
.temperature(0.7) // کنترل خلاقیت (۰.۰ تا ۱.۰)
.build();
ChatCompletion chatCompletion = openAIClient.chat().completions().create(params);
// استخراج پاسخ هوش مصنوعی از نتیجه 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: درخواست هوش مصنوعی را پیکربندی میکند
model: مشخص میکند از کدام مدل هوش مصنوعی استفاده شود (باید دقیقاً شناسه مدل ازfoundry model listباشد)addUserMessage: پیام شما را به مکالمه اضافه میکندmaxCompletionTokens: محدودیت طول پاسخ (صرفهجویی در منابع)temperature: کنترل میزان تصادفی بودن (۰.۰=قطعی، ۱.۰=خلاق)
- فرخوان API: درخواست را به Foundry Local میفرستد
- پردازش پاسخ: پاسخ متنی هوش مصنوعی را به صورت ایمن استخراج میکند
- مدیریت خطا: استثناها را با پیامهای خطای مفید میپوشاند
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: SDK رسمی OpenAI برای جاوا برای ارتباط با API
- jackson-databind: مدیریت سریالسازی و سریالزدایی JSON برای فراخوانی API
نحوه کارکرد کلی
جریان کامل هنگام اجرای برنامه به این صورت است:
- راهاندازی: Spring Boot شروع میشود و
application.propertiesرا میخواند - ایجاد سرویس: Spring سرویس
FoundryLocalServiceرا میسازد و مقادیر پیکربندی را تزریق میکند - تشخیص مدل: اگر مدلی تنظیم نشده باشد، سرویس از نقطه انتهایی
/v1/modelsدر Foundry Local پرسوجو میکند و اولین مدل موجود را به صورت خودکار استفاده میکند - تنظیم کلاینت:
@PostConstructکلاینت OpenAI را برای اتصال به Foundry Local مقداردهی اولیه میکند - اجرای دمو:
CommandLineRunnerپس از شروع اجرا میشود - فراخوانی هوش مصنوعی: دمو متد
foundryLocalService.chat()را با یک پیام تستی فراخوانی میکند - درخواست API: سرویس درخواست سازگار با OpenAI را به Foundry Local ارسال میکند
- پردازش پاسخ: سرویس پاسخ هوش مصنوعی را استخراج و برمیگرداند
- نمایش: برنامه پاسخ را چاپ کرده و خارج میشود
راهاندازی Foundry Local
-
Foundry Local را نصب کنید با دستورالعملهای بخش پیشنیازها.
-
خدمات را راهاندازی کنید (اگر در حال حاضر اجرا نیست):
foundry service start -
وضعیت سرویس را بررسی کنید تا مطمئن شوید که در حال اجرا است و پورت آن را یادداشت کنید:
foundry service status -
یک مدل را دانلود و اجرا کنید (مدل در اولین اجرا دانلود میشود و برای اجراهای بعدی کش میشود):
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 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"
- مطمئن شوید URL پایه شامل
/v1است:http://localhost:5273/v1 - اطمینان حاصل کنید از متد
maxCompletionTokens()در کد استفاده میکنید (نه متد منسوخmaxTokens())
خطاهای کامپایل مِیون
- مطمئن شوید جاوا 21 یا بالاتر است:
java -version - پاکسازی و بازسازی:
mvn clean compile - اتصال اینترنت برای دانلود وابستگیها را بررسی کنید
مشکلات اتصال به سرویس
- اگر پیام
Request to local service failedرا دیدید، سرویس را راهاندازی مجدد کنید:foundry service restart - مدلهای بارگذاری شده را بررسی کنید:
foundry service ps - لاگهای سرویس را مشاهده کنید:
foundry service diag
سلب مسئولیت:
این سند با استفاده از سرویس ترجمه هوش مصنوعی Co-op Translator ترجمه شده است. در حالی که ما برای دقت تلاش میکنیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است حاوی خطاها یا نادرستیهایی باشند. سند اصلی به زبان مادری خود باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، ترجمه حرفهای انسانی توصیه میشود. ما در قبال هرگونه سوءتفاهم یا تفسیر نادرست ناشی از استفاده از این ترجمه مسئولیتی نداریم.