پرش به محتوای اصلی
پرش به محتوای مقاله

درون معماری Jan؛ ادغام llama.cpp برای تسهیل دسترسی به APIهای محلی

·۲۳ مرداد ۱۴۰۵۵ دقیقه مطالعه۲ بازدید
راهنما
جان، شروع تا اولین پاسخ
جان، شروع تا اولین پاسخ
اشتراک‌گذاری
واقعاً چه چیز جدید است؟

تغییر بنیادین در مدل توزیع؛ به‌جای ارائه یک رابط کاربری که نیاز به سرور خارجی دارد، Jan موتور استنتاج را در دل نصاب برنامه جای داده تا استقرار مدل‌ها کاملاً Turnkey شود.

اگر می‌خواهید یک مدل زبانی را بدون درگیر شدن با خطاهای محیطی پایتون روی سیستم خود اجرا کنید، Jan دقیقاً همان حلقه‌ی گمشده است. این برنامه با حذف نیاز به پیکربندی‌های دستی، استقرار مدل‌های محلی را به سادگیِ نصب یک نرم‌افزار معمولی تبدیل کرده است. اجرای یک مدل زبانی بزرگ (LLM) خصوصی دیگر نیازمند رقص پیچیده با محیط‌های پایتون یا درایورهای CUDA نیست.

Jan یک اپلیکیشن دسکتاپ است که طبق اعلام توسعه‌دهندگانش در ۱۳ اوت ۲۰۲۶، موتور لاماسی‌پلاس‌پلاس (llama.cpp) را مستقیماً در بسته‌ی نصبی خود جای داده است. این یعنی کاربران macOS، ویندوز و لینوکس اکنون به یک موتور استنتاج (Inference) — شبیه به خودِ آشپزی، نه دوره‌ی آموزش آشپز — دسترسی دارند که هیچ پیش‌نیازی ندارد و به صورت یک راهکار آماده (Turnkey) ارائه می‌شود. این یکپارچگی با llama.cpp مشابه رویکردی است که در استقرار عامل‌های کدنویس محلی برای حذف وابستگی به APIهای ابری به کار گرفته شده است.

زمینه و معماری سیستم

بسیاری از رابط‌های کاربری هوش مصنوعی، مانند Open WebUI، صرفاً یک پوسته هستند و فرض می‌کنند شما از قبل یک سرور را در جای دیگری اجرا کرده‌اید. اما Jan این معماری را وارونه کرده است. در این سیستم، نصاب برنامه موتور استنتاج را همراه خود می‌آورد؛ به این معنی که هیچ بک‌اِند (Backend) مجزایی برای نصب وجود ندارد، نیازی به پیش‌نیازهای پایتون نیست و لازم نیست ابزار CUDA را با درایور سیستم مطابقت دهید.

از آنجایی که موتور استنتاج با نسخه‌ی برنامه همگام است، به‌روزرسانی نرم‌افزار به‌طور خودکار محیط زمان اجرا (Runtime) را نیز به‌روز می‌کند. وقتی مدلی به نسخه‌ی جدیدتری از llama.cpp نیاز دارد که در نسخه‌ی فعلی موجود نیست، راه حل ساده است: به‌جای به‌روزرسانی دستی محیط زمان اجرا در لایه‌های زیرین، فقط اپلیکیشن Jan را به‌روزرسانی می‌کنید. این رویکرد سازگاری با جدیدترین فرمت‌های مدل را بدون نیاز به نگهداری دستی بک‌اِند تضمین می‌کند.

همان‌طور که در تحلیل‌های قبلی ما درباره‌ی میزبانی شخصی (Self-hosting) مدل‌ها اشاره کردیم، مدیریت منابع سخت‌افزاری همواره بزرگ‌ترین چالش کاربران بوده است. Jan این موضوع را با یک تب اختصاصی به نام Hub در نوار کناری سمت چپ حل کرده است. در این بخش، کاربران می‌توانند مدل‌ها را بر اساس حافظه‌ی سیستم خود انتخاب کنند، نه فقط بر اساس نام مدل.

به نقل از راهنمای dev.to، بودجه‌ی حافظه باید هم شامل وزن‌های مدل و هم KV Cache (حافظه موقت کلید-مقدار) باشد که با افزایش طول متن (Context Length)، به‌صورت خطی رشد می‌کند. بنابراین کاربر باید مجموع این دو را در نظر بگیرد تا سیستم دچار کرش نشود.

جزئیات اکتساب و بارگذاری مدل

اگرچه Hub کاربردی است، اما گاهی چند هفته از اکوسیستم عقب می‌ماند و جدیدترین مدل‌ها را بلافاصله ارائه نمی‌دهد. برای مدل‌هایی که اخیراً منتشر شده‌اند، Jan یک «راه خروج» (Escape Hatch) فراهم کرده است: امکان وارد کردن مستقیم فایل‌های GGUF از Hugging Face یا از روی دیسک محلی.

یک نکته فنی مهم در هنگام دانلود مدل‌ها از Hub وجود دارد؛ کاربران باید منتظر بمانند تا فرآیند دانلود به‌طور کامل به پایان برسد و سپس مدل را انتخاب کنند. اگر یک فایل GGUF به‌طور ناقص دانلود شود، مدل هنگام بارگذاری با یک «خطای فرمت» (Format Error) مواجه می‌شود، نه «خطای طول» (Length Error). این موضوع باعث می‌شود بسیاری از کاربران به‌جای بررسی کامل بودن فایل، مسیر اشتباهی را برای عیب‌یابی طی کنند.

پیکربندی فنی و عملکرد

Jan تنظیمات حیاتی موتور را به‌جای پنهان کردن در خط فرمان، مستقیماً در محیط گرافیکی (UI) قرار داده است. این امر به کاربران اجازه می‌دهد موارد زیر را به دقت تنظیم کنند:

  • تعداد رشته‌ها (Threads) برای بهینه‌سازی عملکرد CPU
  • تعداد لایه‌های GPU برای انتقال (Offload) وزن‌ها از RAM به VRAM
  • اندازه پنجرهٔ زمینه (Context Size) برای مدیریت حافظه گفتگو

یک تله‌ی عملکردی بحرانی در هنگام انتخاب اندازه مدل وجود دارد. اگر مدلی کمی بزرگ‌تر از حافظه ویدیویی (VRAM) در دسترس باشد، Jan از بارگذاری آن خودداری نمی‌کند. در عوض، بخشی از مدل را روی CPU بارگذاری می‌کند و با کسری از سرعت واقعی اجرا می‌شود. اگر دانلودی که باید سریع باشد، تنها هر یک یا دو ثانیه یک توکن تولید می‌کند، کاربر باید پیش از شک کردن به خودِ مدل، احتمال این تقسیم حافظه (Split) بین CPU و GPU را بررسی کند.

همچنین باید بدانید که مدل در اولین پیامِ یک رشته (Thread) جدید بارگذاری می‌شود. بنابراین، اولین پاسخ همیشه کندتر از پاسخ‌های بعدی است؛ این وقفه نشان‌دهنده‌ی خواندن وزن‌ها در حافظه است، نه اینکه مدل در حال «تفکر» باشد.

مدیریت زمینه و حافظه

پیش از قضاوت درباره کیفیت پاسخ‌ها، کاربران باید طول پنجرهٔ زمینه را در تنظیمات مدل بررسی کنند. اپلیکیشن‌های دسکتاپ معمولاً برای اطمینان از اجرا روی اکثر ماشین‌ها، مقدار پیش‌فرض متوسطی را بارگذاری می‌کنند، نه حداکثر مقدار آموزش‌دیده مدل.

اگر مدل بعد از چند دور گفتگو، ابتدای بحث را فراموش می‌کند، معمولاً به این دلیل است که پنجره‌ی زمینه کوچک‌تر از طول کل گفتگو شده است. این یک تنظیم است و نه یک نقص فنی؛ حالتی که در صفحه سرریز زمینه (Context Overflow) در LM Studio نیز به آن اشاره شده است.

سرور API محلی

فراتر از رابط چت، Jan به‌عنوان یک سرور سازگار با OpenAI عمل می‌کند. با رفتن به بخش Settings و فعال کردن Local API Server، برنامه روی آدرس http://127.0.0.1:1337 گوش می‌دهد. پیشوند API مطابق با قرارداد OpenAI، عبارت /v1 است. این قابلیت به برنامه‌های دیگر اجازه می‌دهد با استفاده از یک Base URL و یک کلید API جعلی (Dummy Key)، به Jan متصل شوند.

برای مثال، یک درخواست curl به مسیر http://127.0.0.1:1337/v1/chat/completions با یک بدنه JSON که مدل (مثلاً "qwen3:8b") و پیام‌ها را مشخص کرده باشد، پاسخی را تحریک می‌کند. با این حال، کاربران هنگام تغییر مسیر یک کلاینت، باید پاسخ را بررسی کنند و نه فقط کد وضعیت (Status Code) را. برخی ویژگی‌های خاص ارائه‌دهندگان (Provider-specific extras) که در APIهای ابری یافت می‌شوند، توسط سرور llama.cpp نادیده گرفته می‌شوند؛ درخواست‌های وابسته به آن‌ها با موفقیت ارسال می‌شوند اما آن فیلدهای خاص به‌طور بی‌صدا نادیده گرفته می‌شوند.

دو تنظیم پیش‌فرض در این بخش نیاز به توجه فوری کاربران حساس به امنیت دارند:

  • API Key: این فیلد به‌صورت پیش‌فرض خالی است که باعث غیرفعال شدن احراز هویت می‌شود. این موضوع در محیط Loopback مشکلی ندارد اما اگر سرور از خارج از سیستم قابل دسترسی باشد، خطرناک است.
  • CORS: به‌صورت پیش‌فرض فعال است تا کلاینت‌های مبتنی بر مرورگر بتوانند مستقیماً سرور را فراخوانی کنند. اگر در حال ساخت کلاینت مرورگر نیستید، دلیلی برای فعال نگه داشتن این گزینه وجود ندارد.

حریم خصوصی و مدیریت منابع

حریم خصوصی یکی از ارکان اصلی است، اما کاربران باید از پیش‌فرض‌های ثبت وقایع (Logging) آگاه باشند. ثبت مفصل (Verbose logging) به‌صورت پیش‌فرض فعال است و درخواست‌ها و پاسخ‌ها را به‌صورت متن ساده (Plain Text) روی دیسک می‌نویسد. برای کسانی که با داده‌های حساس سروکار دارند، این تنظیم باید به‌صورت دستی غیرفعال شود تا محرمانگی گفتگوها تضمین گردد.

رقابت بر سر منابع سخت‌افزاری نیز یک عامل مهم است. طول زمینه و لایه‌های GPU برای هر مدل به‌طور جداگانه پیکربندی می‌شوند و نه به‌صورت سراسری. افزایش پنجره برای یک مدل، روی مدل دیگر اثر نمی‌گذارد و اگر چندین مدل به‌طور هم‌زمان بارگذاری شوند، رقابت واقعی آن‌ها بر سر حافظه سیستم رخ می‌دهد.

در حالی که Jan از ارائه‌دهندگان راه دور از طریق کلیدهای API پشتیبانی می‌کند، ارزش اصلی آن در پیکربندی «اول-محلی» (Local-first) نهفته است. با ادغام موتور، مرورگر و سرور در یک فایل باینری واحد، Jan اصلی‌ترین نقطه اصطکاک را برای کاربران غیرفنی که وارد فضای هوش مصنوعی محلی می‌شوند، حذف می‌کند.

برای تأیید وضعیت فعلی، خط Log را بررسی کنید؛ عبارت "JAN API listening at http://127.0.0.1:1337" فعال بودن پورت و وضعیت سرور را تأیید می‌کند. این خط Log معتبرترین راه بررسی است، زیرا شماره پورت‌ها و سوئیچ‌های پیش‌فرض ممکن است در نسخه‌های مختلف تغییر کنند.

گام بعدی شما

  • اگر از مدل‌های GGUF استفاده می‌کنید، Jan را جایگزین محیط‌های پیچیده پایتون کنید تا زمان استقرار را به صفر برسانید.
  • در تنظیمات مدل، تعداد لایه‌های GPU را تا حد نهایی VRAM خود بالا ببرید تا سرعت استنتاج را افزایش دهید.
  • برای امنیت بیشتر، اگر از API محلی استفاده نمی‌کنید، گزینه CORS را غیرفعال و Logging را روی حالت حداقلی قرار دهید.

اما داستان سخت‌افزاری این تحول حتی شگفت‌انگیزتر است — به تحلیل ما درباره‌ی تراشه‌های Blackwell مراجعه کنید.

چرا این موضوع مهم است؟

این رویکرد با حذف موانع فنی، ورود کاربران غیرمتخصص به فضای هوش مصنوعی محلی را تسهیل می‌کند. اعتبار این ابزار از ادغام مستقیم llama.cpp می‌آید که استاندارد طلایی اجرای مدل‌های کوانتیده روی سخت‌افزارهای مصرفی است.

تأثیر برای ایران

برای توسعه‌دهندگان ایرانی که با محدودیت‌های دسترسی به APIهای ابری و تحریم‌ها مواجه‌اند، Jan سریع‌ترین راه برای راه‌اندازی زیرساخت هوش مصنوعی محلی و خصوصی است.

·نگاه ما
تحریریه دات‌هوش

Jan با تبدیل موتور استنتاج به یک جزء داخلی (Bundled)، در واقع مدل توزیع نرم‌افزارهای AI را از «کتابخانه برای توسعه‌دهنده» به «ابزار برای کاربر» تغییر داده است. این رویکرد نشان می‌دهد که گلوگاه فعلی هوش مصنوعی محلی دیگر قدرت سخت‌افزار نیست، بلکه اصطکاک در نصب و پیکربندی است. به نظر ما، موفقیت Jan در این است که لایه‌ی پیچیدگی llama.cpp را کاملاً پنهان کرده و تجربه کاربری را به سطح اپلیکیشن‌های تجاری رسانده است.

منابع

این گزارش با خط‌لولهٔ خودکار دات‌هوش از منابع معتبر جهانی تدوین و زیر نظر تحریریه منتشر شده است. روش کار ما

گفتگو

پنج‌شنبه‌های هوش‌محور

بسته‌ی هفتگی دات‌هوش

۵ خبر، ۲ ابزار، ۱ پرامپت در هر شماره. به‌زودی راه‌اندازی می‌شود — هر پنج‌شنبه صبح.

خبر کلیدی
ابزار کاربردی
پرامپت حرفه‌ای
تحلیل پژوهش
به‌زودی
زاویه‌ی ایرانی
به‌زودی
تمرین این هفته
به‌زودی

راهنماهای دات‌هوش

راهنماهای کاربردیِ دات‌هوش برای کار با هوش مصنوعی — از همین‌جا شروع کنید:

دات‌هوش

راهنمای فارسی هوش مصنوعی — با نگاه به ایران

اخبار روزانه، معرفی ابزارها و مدل‌ها، و آموزشِ کار با هوش مصنوعی؛ همیشه با این پرسش که از ایران چه چیزی کار می‌کند و چه چیزی نه.