این سرویس عملیات پایه ماشینحساب را از طریق پروتکل Model Context (MCP) با استفاده از Spring Boot و انتقال WebFlux ارائه میدهد. این سرویس به عنوان یک مثال ساده برای مبتدیانی که میخواهند با پیادهسازیهای MCP آشنا شوند طراحی شده است.
برای اطلاعات بیشتر، به مستندات مرجع MCP Server Boot Starter مراجعه کنید.
این سرویس موارد زیر را نمایش میدهد:
- پشتیبانی از SSE (رویدادهای ارسال شده از سرور)
- ثبت خودکار ابزارها با استفاده از انوتیشن
@Toolدر Spring AI - عملکردهای پایه ماشینحساب:
- جمع، تفریق، ضرب، تقسیم
- محاسبه توان و جذر
- محاسبه باقیمانده (مدولوس) و قدر مطلق
- تابع راهنما برای توضیح عملیاتها
این سرویس ماشینحساب امکانات زیر را ارائه میدهد:
-
عملیات حسابی پایه:
- جمع دو عدد
- تفریق یک عدد از عدد دیگر
- ضرب دو عدد
- تقسیم یک عدد بر عدد دیگر (با بررسی تقسیم بر صفر)
-
عملیات پیشرفته:
- محاسبه توان (بالا بردن پایه به توان)
- محاسبه جذر (با بررسی عدد منفی)
- محاسبه باقیمانده تقسیم
- محاسبه قدر مطلق
-
سیستم راهنما:
- تابع راهنمای داخلی که تمام عملیاتهای موجود را توضیح میدهد
این سرویس از طریق پروتکل MCP نقاط انتهایی API زیر را ارائه میدهد:
add(a, b): جمع دو عددsubtract(a, b): تفریق عدد دوم از اولmultiply(a, b): ضرب دو عددdivide(a, b): تقسیم عدد اول بر دوم (با بررسی صفر بودن مخرج)power(base, exponent): محاسبه توان یک عددsquareRoot(number): محاسبه جذر (با بررسی عدد منفی)modulus(a, b): محاسبه باقیمانده تقسیمabsolute(number): محاسبه قدر مطلقhelp(): دریافت اطلاعات درباره عملیاتهای موجود
یک کلاینت تست ساده در بسته com.microsoft.mcp.sample.client گنجانده شده است. کلاس SampleCalculatorClient عملیاتهای موجود در سرویس ماشینحساب را نشان میدهد.
این پروژه شامل یک کلاینت نمونه LangChain4j در com.microsoft.mcp.sample.client.LangChain4jClient است که نحوه ادغام سرویس ماشینحساب با LangChain4j و مدلهای GitHub را نشان میدهد:
-
تنظیم توکن GitHub:
برای استفاده از مدلهای هوش مصنوعی GitHub (مانند phi-4)، نیاز به یک توکن دسترسی شخصی GitHub دارید:
الف. به تنظیمات حساب GitHub خود بروید: https://github.com/settings/tokens
ب. روی "Generate new token" → "Generate new token (classic)" کلیک کنید
ج. به توکن خود یک نام توصیفی بدهید
د. موارد زیر را انتخاب کنید:
repo(کنترل کامل مخازن خصوصی)read:org(خواندن عضویت در سازمان و تیم، خواندن پروژههای سازمان)gist(ایجاد گیسها)user:email(دسترسی به آدرسهای ایمیل کاربر (فقط خواندنی))
ه. روی "Generate token" کلیک کرده و توکن جدید را کپی کنید
و. آن را به عنوان یک متغیر محیطی تنظیم کنید:
در ویندوز:
set GITHUB_TOKEN=your-github-tokenدر macOS/Linux:
export GITHUB_TOKEN=your-github-tokenز. برای تنظیم دائمی، آن را از طریق تنظیمات سیستم به متغیرهای محیطی اضافه کنید
-
وابستگی LangChain4j GitHub را به پروژه خود اضافه کنید (قبلاً در pom.xml گنجانده شده است):
<dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-github</artifactId> <version>${langchain4j.version}</version> </dependency>
-
اطمینان حاصل کنید که سرور ماشینحساب روی
localhost:8080در حال اجرا است
این مثال موارد زیر را نشان میدهد:
- اتصال به سرور MCP ماشینحساب از طریق انتقال SSE
- استفاده از LangChain4j برای ایجاد یک چتبات که از عملیات ماشینحساب بهره میبرد
- ادغام با مدلهای هوش مصنوعی GitHub (اکنون با مدل phi-4)
کلاینت نمونه پرسشهای زیر را برای نمایش عملکرد ارسال میکند:
- محاسبه جمع دو عدد
- یافتن جذر یک عدد
- دریافت اطلاعات راهنما درباره عملیاتهای موجود در ماشینحساب
مثال را اجرا کنید و خروجی کنسول را بررسی کنید تا ببینید مدل هوش مصنوعی چگونه از ابزارهای ماشینحساب برای پاسخ به پرسشها استفاده میکند.
کلاینت LangChain4j برای استفاده از مدل phi-4 GitHub با تنظیمات زیر پیکربندی شده است:
ChatLanguageModel model = GitHubChatModel.builder()
.apiKey(System.getenv("GITHUB_TOKEN"))
.timeout(Duration.ofSeconds(60))
.modelName("phi-4")
.logRequests(true)
.logResponses(true)
.build();برای استفاده از مدلهای مختلف GitHub، کافی است پارامتر modelName را به مدل پشتیبانی شده دیگری تغییر دهید (مثلاً "claude-3-haiku-20240307"، "llama-3-70b-8192" و غیره).
پروژه به وابستگیهای کلیدی زیر نیاز دارد:
<!-- For MCP Server -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-server-webflux</artifactId>
</dependency>
<!-- For LangChain4j integration -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-mcp</artifactId>
<version>${langchain4j.version}</version>
</dependency>
<!-- For GitHub models support -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-github</artifactId>
<version>${langchain4j.version}</version>
</dependency>پروژه را با استفاده از Maven بسازید:
./mvnw clean install -DskipTestsjava -jar target/calculator-server-0.0.1-SNAPSHOT.jarMCP Inspector ابزاری مفید برای تعامل با سرویسهای MCP است. برای استفاده از آن با این سرویس ماشینحساب:
-
نصب و اجرای MCP Inspector در یک پنجره ترمینال جدید:
npx @modelcontextprotocol/inspector
-
دسترسی به رابط وب با کلیک روی URL نمایش داده شده توسط برنامه (معمولاً http://localhost:6274)
-
پیکربندی اتصال:
- نوع انتقال را روی "SSE" تنظیم کنید
- URL را به نقطه انتهایی SSE سرور در حال اجرای خود تنظیم کنید:
http://localhost:8080/sse - روی "Connect" کلیک کنید
-
استفاده از ابزارها:
- روی "List Tools" کلیک کنید تا عملیاتهای ماشینحساب موجود را ببینید
- یک ابزار را انتخاب کرده و روی "Run Tool" کلیک کنید تا عملیات اجرا شود
پروژه شامل یک Dockerfile برای استقرار در کانتینر است:
-
ساخت ایمیج داکر:
docker build -t calculator-mcp-service . -
اجرای کانتینر داکر:
docker run -p 8080:8080 calculator-mcp-service
این کار:
- یک ایمیج چندمرحلهای داکر با Maven 3.9.9 و Eclipse Temurin 24 JDK میسازد
- یک ایمیج بهینهشده کانتینر ایجاد میکند
- سرویس را روی پورت 8080 در دسترس قرار میدهد
- سرویس ماشینحساب MCP را داخل کانتینر اجرا میکند
پس از اجرای کانتینر، میتوانید به سرویس در http://localhost:8080 دسترسی داشته باشید.
-
مشکلات مجوز توکن: اگر خطای 403 Forbidden دریافت کردید، بررسی کنید که توکن شما مجوزهای لازم را طبق پیشنیازها دارد.
-
توکن یافت نشد: اگر خطای "No API key found" دریافت کردید، مطمئن شوید متغیر محیطی GITHUB_TOKEN به درستی تنظیم شده است.
-
محدودیت نرخ: API گیتهاب محدودیتهایی دارد. اگر با خطای محدودیت نرخ (کد وضعیت 429) مواجه شدید، چند دقیقه صبر کنید و دوباره تلاش کنید.
-
انقضای توکن: توکنهای GitHub ممکن است منقضی شوند. اگر پس از مدتی خطاهای احراز هویت دریافت کردید، توکن جدید بسازید و متغیر محیطی را بهروزرسانی کنید.
اگر به کمک بیشتری نیاز داشتید، مستندات LangChain4j یا مستندات API گیتهاب را بررسی کنید.
سلب مسئولیت:
این سند با استفاده از سرویس ترجمه هوش مصنوعی Co-op Translator ترجمه شده است. در حالی که ما در تلاش برای دقت هستیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است حاوی خطاها یا نادرستیهایی باشند. سند اصلی به زبان بومی خود باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، ترجمه حرفهای انسانی توصیه میشود. ما مسئول هیچ گونه سوءتفاهم یا تفسیر نادرستی که از استفاده این ترجمه ناشی شود، نیستیم.
