
یک توسعهدهنده که مدل زبانی محلی (Local LLM) خود را روی یک سیستم Strix Halo در آزمایشگاه خانگی اجرا میکند، توانسته است بدون باز کردن پورت، تنظیم پروکسی معکوس (Reverse Proxy) یا روشن کردن VPN، از هر نقطه به مدل خود دسترسی داشته باشد. او برای این کار به مدل محلی یک حساب دیسکورد داده و یک لایه عامل (Agent Harness) میان آنها قرار داده است.
دیسکورد سختترین بخش میزبانی شخصی هوش مصنوعی را حل میکند
دسترسی از راه دور همیشه دردسرساز است. مدل روی یک سیستم در رک شبکه قرار دارد و رسیدن به آن از یک کافه همیشه سختترین بخش ماجرا بوده است. دیسکورد مسئله را برعکس میکند و سه نکته را باید پیش از شروع دانست.
هیچ چیزی به شبکه شما نفوذ نمیکند. بات هرگز منتظر اتصال ورودی نمیماند؛ بلکه یک اتصال خروجی به سرورهای دیسکورد باز میکند و پیامها را از همان مسیر دریافت میکند، دقیقاً مانند اپلیکیشن دیسکورد روی گوشی. کانتینر اجراکننده آن یک آدرس معمولی DHCP دارد، هیچ سرویسی روی آن به ترافیک ورودی گوش نمیدهد و هیچ رکورد DNS، گواهی (Certificate) یا قانون روتر برای نگهداری وجود ندارد. این روش پشت NAT یا CGNAT هم به همین شکل کار میکند و روتر او حتی به یک تغییر هم نیاز نداشته است.
او پیشتر این کار را به روش سخت انجام داده بود: جایگزینی پروکسی معکوس با Caddy و گواهی Wildcard، راهاندازی ورود مبتنی بر تونل برای دور زدن CGNAT و استفاده از مسیریابی زیرشبکه Tailscale. هر کدام پروژهای جداگانه با مشکلات خاص خود بود. اما در این روش، لایه دسترسی از راه دور همان اپلیکیشنی است که به هر حال باز میکرد.
البته این معامله هزینه دارد: دیسکورد به عنوان رله (Relay) همه پیامها را بین کاربر و بات جابهجا میکند، یعنی دیسکورد همه پیامها را میبیند. مدل و هر چیزی که به آن دسترسی دارد در خانه میماند، اما خود گفتگو نه. اگر مطلبی را در پیام خصوصی دیسکورد برای دوستتان نمیفرستید، آن را به بات هم نفرستید. همچنین اگر دیسکورد از کار بیفتد، دسترسی کاملاً قطع میشود؛ در حالی که در تنظیم Tailscale فقط وقتی شبکه خودتان قطع شود این اتفاق میافتد.
برای یک دستیار چت، این معامله ارزشمند است. چون دیسکورد به هر حال گفتگوها را میبیند، فرستادن پرسوجوهای جستجو به یک API ابری تفاوت چندانی ایجاد نمیکند. او هیچ چیز حساسی را از این مسیر عبور نمیدهد، اما برای پرسشهای سریع و پژوهش دور از میز، راحتی آن برنده است.
تاریخچه چت باقی میماند
یک مزیت بزرگ دیگر این است که هر گفتگو با بات در دیسکورد باقی میماند و از گوشی یا لپتاپ قابل جستجو است. این ویژگی در ابزارهای هوش مصنوعی تضمینشده نیست. برای مثال Claude Code رونوشت جلسات محلی را پس از ۳۰ روز حذف میکند، مگر اینکه تنظیم cleanupPeriodDays را تغییر دهید. تاریخچه چتهای ابری هم ممکن است بدون توضیح ناپدید شوند. اما یک رشته (Thread) دیسکورد ساده، بادوام و در اختیار کاربر است.
راهاندازی Hermes Agent در کانتینر Proxmox LXC
راههای سبکتری هم وجود دارد. llmcord یک بات کوچک پایتونی است که زنجیره پاسخهای دیسکورد را به یک رابط چت برای هر API سازگار با OpenAI تبدیل میکند و اگر فقط یک پنجره چت میخواهید عالی است. اما او چیزی میخواست که واقعاً کارهایی انجام دهد، بنابراین Hermes Agent از Nous Research را انتخاب کرد؛ یک عامل با ابزارها، حافظه و وظایف زمانبندیشده، بههمراه یک دروازه (Gateway) که آن را از یک فرایند واحد به دیسکورد، تلگرام، اسلک و دیگران متصل میکند.
او برای آن یک کانتینر Debian 13 بدون امتیاز ویژه (Unprivileged) روی گره Proxmox خود ساخت، با چهار هسته، ۴ گیگابایت رم و ۱۶ گیگابایت دیسک. این کار هر چیزی را که عامل اجرا میکند داخل جعبهای قابل دور انداختن نگه میدارد. نصب با یک اسکریپت انجام میشود و سپس باید آن را به سرور مدل اشاره داد. او دستور curl را در مقاله نیاورده و توصیه کرده همیشه از وبسایت رسمی Nous استفاده کنید.
با انتخاب گزینه Custom Endpoint میتوان URL سازگار با OpenAI در Lemonade را وارد کرد که پسوند /api/v1 دارد. سپس Hermes همه مدلهایی را که Lemonade ارائه میدهد فهرست میکند. او gpt-oss-120b را انتخاب کرد، چون یک عامل به فراخوانی ابزار (Tool Calling) وابسته است و مدلهای کوچکتر سرور او احتمال بیشتری برای خراب کردن فراخوانی ابزار دارند. Lemonade بهطور پیشفرض کلید API را بررسی نمیکند، بنابراین هر رشته جایگزینی کار میکند.
اولین اجرا خطای قرمزی درباره نبودن ماژول پایتونی httpx در یک افزونه ارائهدهنده همراه نشان داد. او ماژول را نصب کرد، اما Hermes یکپارچگی زمان اجرای خود را بررسی میکند و دستور doctor گزارش داد فایلها دیگر مطابقت ندارند. او زمان اجرای پاک را بازگرداند و یاد گرفت آن هشدار را نادیده بگیرد، چون مربوط به ارائهدهندهای بود که استفاده نمیکند.
سپس فهرست ابزارها را کوتاه کرد. Hermes بهطور پیشفرض ۳۹ ابزار فعال دارد و هر کدام به دستور (Prompt) مدل در هر نوبت اضافه میشود. او تولید تصویر و تبدیل متن به گفتار را خاموش کرد، چون هر دو بهطور پیشفرض از سرویسهای ابری استفاده میکنند، و قابلیت استفاده از کامپیوتر به دسکتاپی نیاز دارد که کانتینر ندارد. جستجوی وب با کلید API بریو (Brave) فعال ماند، بنابراین پرسوجوهای جستجو از شبکه او خارج میشوند.
بعد نوبت بات دیسکورد بود. باید یک اپلیکیشن در Discord Developer Portal بسازید، توکن آن را کپی کنید و Message Content Intent را روشن کنید تا بات بتواند پیامهای شما را بخواند. او میخواست بات خصوصی باشد، اما دیسکورد اجازه ذخیره کلید Public Bot را نداد تا وقتی به Installation -> Install Link برود و آن را از Default Link به None تغییر دهد. هیچجای صفحه بات این موضوع را توضیح نمیدهد.
با افزودن توکن و شناسه کاربری دیسکورد به فهرست مجاز Hermes، او دروازه را به عنوان سرویس نصب کرد و اولین پیام را فرستاد. بات با خطا پاسخ داد؛ دو بار. لاگ توضیح داد که Hermes به پنجره زمینه (Context Window) حداقل ۶۴٬۰۰۰ توکن نیاز دارد، در حالی که Lemonade مدل gpt-oss-120b را با ۳۲٬۷۶۸ توکن ارائه میکرد. او مدل را با زمینه کامل ۱۳۱٬۰۷۲ توکن بارگذاری مجدد کرد، عدد جدید را به Hermes داد، دروازه را دوباره راهاندازی کرد و بات پاسخ داد.
استفاده از LLM محلی از هر مکان
رشتهها جایی هستند که دیسکورد به عنوان رابط میدرخشد، چون هر رشته یک گفتگوی مستقل است. وقتی او یک بررسیکننده پالیندروم پایتونی همراه با موارد تست خواست، مدل آن را نوشت، در یک فایل داخل کانتینر ذخیره کرد و تستها هنگام اجرا موفق شدند.
جستجو کار بیشتری برد. اولین تلاش برای پرسیدن آخرین نسخه Lemonade Server پاسخ مطمئن اما قدیمی داد، بههمراه چند فراخوانی بیفایده به ابزار خزانه رمز عبور. مشخص شد دیسکورد در Hermes فهرست ابزار مخصوص خود را دارد، جدا از فهرستی که در CLI کوتاه شده بود. پس از کوتاه کردن آن هم، تنظیم صریح حالت API روی Chat Completions و شروع یک جلسه تازه، پاسخ درست را گرفت. سطح رایگان Brave فقط قطعههای جستجو را برمیگرداند، بنابراین بات میتواند صفحهها را پیدا کند اما هرگز آنها را واقعاً نمیخواند.
یادآورها هرگز از چت کار نکردند و اینجاست که مدلهای محلی هنوز ضعف دارند. gpt-oss-120b یازده تکرار را صرف جستجوی ابزار درست کرد و سپس پرسید کدام دستور شل را برای cron اجرا کند. Qwen3-Coder گفت یادآور تنظیم شده، در حالی که هیچ ابزاری را فراخوانی نکرده بود، و gpt-oss بعداً از یادآوری دوش گرفتن امتناع کرد. خود زمانبند سالم است؛ کاری که با hermes cron create ساخته شد دقیقاً سر وقت در دیسکورد منتشر شد. بنابراین او یادآورها را از CLI تنظیم کرد و آن کارهای ساختهشده در چت واقعاً وجود داشتند.
درخواستهای ساده حدود ۳۰ ثانیه طول میکشند. بیشتر این انتظار صرف خواندن دستور سیستمی طولانی Hermes و فهرست ابزارها توسط مدل میشود، بنابراین پرسشهای کوتاه خیلی سریعتر از پرسشهای بلند نیستند. سرور Lemonade او نیز فقط دو مدل را بارگذاریشده نگه میدارد، بنابراین اگر برنامه دیگری مدل سومی بخواهد، پاسخ بعدی بات باید منتظر بارگذاری مجدد بماند.
دیسکورد LLM محلی را به ابزاری واقعاً کاربردی تبدیل کرد
او رابطهای وب زیادی برای مدلهای محلی خود ساخته، اما تقریباً هیچکدام را دور از میز استفاده نکرده است. بات او به نام Wingfoot استفاده میشود چون در اپلیکیشنی زندگی میکند که روزی دهها بار آن را بررسی میکند. رسیدن به آن هرگز به باز کردن پورت یا اتصال VPN نیاز نداشت و هر گفتگو هنوز هنگام جستجو در دسترس است.
البته قابلیتهای عامل نیاز به مراقبت دارند و نباید به یادآوری اعتماد کرد که در hermes cron list دیده نشده است. اما به عنوان راهی برای چت با مدل آزمایشگاه خانگی از هر مکان، این آسانترین تنظیمی است که او پیدا کرده است. قدم بعدی او یک صفحهخوان خودمیزبان است تا Wingfoot بتواند صفحههایی را که پیدا میکند بخواند، نه اینکه از قطعهها حدس بزند.