تصور کنید روتر روی دیوار دفترتان دیگر فقط بستههای داده را جابهجا نکند، بلکه شبیه نگهبانی بدقلق باشد که هر اتفاق مشکوکی در راهروهای دیجیتال را با لحنی شاکی گزارش میدهد. این تجربه، نتیجهی پروژه the-finn است؛ یک عامل (Agent) متنباز که توسط توسعهدهندهای به نام YuriKovalov22 منتشر شده و بهطور کامل روی سختافزار روتر اجرا میشود و تنها از آنچه سختافزار قادر به دیدن آن است، خبر دارد.
بیشتر عاملهای هوش مصنوعی امروز تلاش میکنند مودب باشند، مفید به نظر برسند و در هر جای زندگی دیجیتال ما جای بگیرند. اما the-finn مسیر متفاوتی را میرود. نام این پروژه از شخصیتی در سهگانهی «اسپرال» اثر ویلیام گیبسون گرفته شده است؛ موجودی که به عنوان یک سازه در جعبهای زرهپوش در کوچهای محبوس است و مردم برای شنیدن شکایتهای این پیشگو به آنجا میروند. این عامل بهطور عمدی یک «دستیار» نیست. او هیچ ابزاری در اختیار ندارد، به ایمیل، تقویم یا تیکتهای شما دسترسی ندارد و حافظهاش فراتر از یک فایل وضعیت کوچک نیست؛ او صرفاً یک راهرو را میپاید و درباره آن نظر میدهد.
برای کاربرانی که به دنبال بهرهوری هستند، این یک چرخش به سمت هوش مصنوعی «محیطی» (Ambient AI) است؛ سامانههایی که منتظر دستور یا پرامپت نمیمانند، بلکه به محیط فیزیکی و دیجیتال واکنش میدهند. همانطور که در تحلیلهای پیشین ما دربارهی رایانش لبه اشاره کردیم، اجرای محلی مدلها امنیت را بالا میبرد. در اینجا هم هدف اصلی طراحی این است که حتی اگر کل زیرساخت دفتر در آتش باشد، این عامل همچنان فعال بماند و کار کند. این رویکرد اجرای محلی بر روی سختافزارهای محدود، یادآور پروژه Nightcrawler است که قابلیتهای تست نفوذ را بهطور کامل روی گوشیهای اندرویدی پیادهسازی کرد.
مکانیزم تشخیص «عجیب بودن»
the-finn از لیستهای ثابت هشدار استفاده نمیکند. در عوض، از یک تاریخچهی متحرک در حافظه رم (RAM) استفاده میکند تا تعریف کند «وضعیت نرمال» برای یک محیط خاص چیست. طبق مستندات پروژه، سیستم هر دقیقه یک خوانش گسترده از شبکه میگیرد و به دنبال انحرافات میگردد. او در ۱۵ دقیقه اولِ راهاندازی سرد (Cold Start) — شبیه به کسی که تازه از خواب بیدار شده و باید محیط را بشناسد — سکوت میکند تا خط پایه (Baseline) را یاد بگیرد و هر دستگاه موجود را به عنوان یک چهره جدید گزارش نکند.
او دو نوع ناهنجاری اصلی را شناسایی میکند:
- ناهنجاریهای عددی: زمانی که یک حسگر از محدوده یا باندی که در ۴۵ دقیقه گذشته داشته است، بیش از یک حد آستانه (Floor) خاص فاصله بگیرد. این حد آستانه برای هر حسگر طراحی شده تا نوسانات عادی و کوچک (Wobble) باعث ارسال هشدار نشوند.
- ناهنجاریهای عضویت: زمانی که چیزی در یک مجموعه ظاهر یا ناپدید شود؛ مثلاً یک دستگاه جدید، یک همسایه در شبکه بالادستی، یا یک پورت مقصد غیرعادی.
برای اینکه روتر به یک ماشین تولید نوتیفیکیشن تکراری تبدیل نشود، سیستم تنوع را در سه محور «نوع» (Kind)، «تم» (Theme) و «شکل» (Shape) اعمال میکند. دادههای ترافیکی — که پرنوسانترین بخش شبکه هستند — محدود شدهاند تا هر ۶ ساعت فقط یک بار گزارش شوند. اگر این محدودیت نباشد، ترافیک تقریباً در هر دور برنده میشود و نتیجه این خواهد بود که ۵ مورد از ۶ گزارش، صرفاً افزایش سادهی شمارندهها باشد.
منطق و تنوع در بیان
تنوع برای این تضمین میشود که عامل برای همیشه همان پنج نوتیفیکیشن تکراری را ارسال نکند. سیستم «نوع» گزارش را رصد میکند (ترافیک، حضور، همسایگان، متجاوزان، کالبد خودش، یا ریتم محیط). اگر یک تم استفاده شده باشد، آن تم به مدت ۹۰ دقیقه ساکت میشود.
فراتر از تمها، عامل از «شکلها» برای تغییر ساختار جملات استفاده میکند. این کار مانع از آن میشود که شش گزارش پشت سر هم با ساختار «X اکنون N است، در حالی که معمولاً M بود» ارسال شوند. این شکلها شامل موارد زیر است:
- بالا رفتن یک سطح
- آرام شدن چیزی
- یک ورود یا خروج
- تغییر ریتم
- یک بازه زمانی از سکون و بیحرکتی
حتی «سکوت» هم یک مشاهده است. اگر چندین ساعت بگذرد و هیچ چیز از محدوده خود خارج نشود، این حقیقت به عامل داده میشود، زیرا یک انسان ساکن در محیط هم به یک شب آرام اشاره میکند. تنها پس از عبور از این فیلترها، از مدل خواسته میشود واکنش نشان دهد. به مدل دستور داده شده که به عنوان یک «ساکن» رفتار کند، نه یک سیستم مانیتورینگ؛ و اگر اتفاق صرفاً یک ثبت اداری خشک و بیروح باشد، کلمه "NOTHING" را برگرداند.
کالبدشناسی و ورودیهای حسی
بر اساس مستندات github.com، این عامل دادههای فنی خام را به «احساسات» ترجمه میکند. او کالبدی فیزیکی برای شکایت دارد: آنتنها گوشهای او هستند، پورتها انگشتان و انگشتان پایش، و حافظه فلش، شکمش است. او به جای دریافت دادهای مثل «دمای ۶۳ درجه، در حالی که ۴۵ بود»، حس میکند گرمای داخل کیس در حال بالا رفتن است. نزدیک شدن یک دستگاه برای او یک «قلقلک»، کشیدن کابل شبکه یک «سیلی» و پخشهای ناشناخته از آن سوی دیوار، «ارواحی» هستند که او میتواند بشنود اما هرگز نبینَد.
قابلیتهای حسی او عبارتند از:
- حضور: رصد اینکه چه کسی روی وایفای است از طریق
iwinfo assoclist. او از/tmp/dhcp.leasesو نام میزبان (Hostname) استفاده میکند تا چرخش MAC Address باعث اختلال در ردیابی نشود. او بین «اثاثیه» (که درFINN_KNOWN_HOSTSتعریف شدهاند) و غریبهها تفکیک قائل میشود. - فعالیت: پایش تغییرات جریان (Flow Churn) در
/proc/net/nf_conntrack. چون اتصال (Association) برای تشخیص حضور بیفایده است (مکهای در خواب و پرینترها متصل میمانند)، تغییرات جریان سیگنال صادقانهتری است. یک ماشین در خواب هیچ اتصال جدیدی نمیسازد، در حالی که یک کاربر فعال بین ۳ تا ۵۰ اتصال در دقیقه باز میکند. - امنیت: رصد تلاشهای ناموفق SSH و خطاهای واقعی کرنل از طریق
logread؛ در حالی که فریادهای مداوم درایور وایفای فیلتر میشوند. او ممکن است بگوید: «شش تلاش ناموفق SSH در یک دقیقه... انگار کسی آن بیرون خیال میکند شانس آورده است». - سلامت: پایش تأخیر (Latency) و اتلاف بستهها به گیتوی از طریق
dmesgوpingو همچنین بار CPU، حافظه، دیسک و مدت زمان روشن بودن (Uptime) از طریق/sysو/proc. - بستر شبکه: رصد تعداد دستگاههای شبکه بالادستی از طریق جدول همسایگی (Neighbor Table) و پایش پورتهای مقصد از طریق conntrack (با فیلتر کردن پورتهای رایج).
- VPN و تونلها: بررسی زنده بودن تونل و شناسایی اینکه چه کسی در حال حاضر روی VPN اوست از طریق
wg show. - الگوهای انسانی: رصد تاریخچه متحرک اولین ظهور گوشی برای تشخیص اینکه صاحب خانه زودتر یا دیرتر از همیشه رسیده است.
هشدار درباره توان عملیاتی
توان عملیاتی (Throughput) هر دستگاه از شمارندههای بایت در conntrack خوانده میشود. اما در روترهایی با قابلیت Hardware NAT offload (از جمله GL-MT3000)، جریانهای تثبیتشده در سطح سیلیکون مدیریت میشوند. این یعنی شمارندهها متوقف میشوند و یک تماس تصویری شلوغ ممکن است تنها به شکل چند بسته کوچک به نظر برسد.
اگر این موضوع نادیده گرفته شود، پارادوکسی ایجاد میشود که در آن دستگاهها به نظر میرسد بیشتر از کل پهنای باند uplink داده ارسال میکنند. برای جلوگیری از اینکه عامل اعداد غیرممکن را روایت کند، هر تیک (Tick) اجزاء را با کل میسنجد و ترجیح میدهد هیچ چیز منتشر نکند تا اینکه چیزی غلط بگوید.
استقرار فنی
نصب the-finn حدود ۱۰ دقیقه زمان میبرد، به روتری نیاز دارد که مالک آن باشید و یک کارت بانکی برای پرداخت هزینه LLM. این سیستم به روتری مبتنی بر OpenWrt نیاز دارد که دارای lua ،lua-cjson و curl ساخته شده با TLS باشد. در فریمور GL.iNet این موارد معمولاً موجود هستند. سیستم روی GL-MT3000 با OpenWrt 21.02 و ۵۱۲ مگابایت رم تست شده و تنها چند مگابایت فضای overlay اشغال میکند.
مراحل استقرار شامل موارد زیر است:
۱. ساخت بات تلگرام از طریق @BotFather برای دریافت API token. این توکن همان بات است و هر کسی آن را داشته باشد میتواند به جای او پست بگذارد، پس باید مثل رمز عبور با آن برخورد شود.
۲. یافتن ID کاربر از طریق @userinfobot تا بات فقط به یک شخص خاص پاسخ دهد.
۳. تولید API key از Anthropic یا OpenAI. توسعهدهنده پیشنهاد میکند یک کلید اختصاصی با سقف ماهانه پایین (حدود ۵ دلار) بسازید، چون کلید به صورت متن ساده (Plaintext) روی دستگاهی قرار میگیرد که با دیگران مشترک است. با تنظیمات پیشفرض، هزینه ماهانه در حد تکرقمی دلار خواهد بود. در این مرحله، دسترسی صحیح عامل به اینترنت و APIها حیاتی است؛ چرا که بسیاری از عاملهای هوش مصنوعی در محیطهای عملیاتی با موانع پنهانی در لایههای دسترسی و کدهای HTTP مواجه میشوند که میتواند منجر به شکست در ارتباط با مدل شود.
۴. اجرای اسکریپت install.sh که فایلها را کپی کرده، حالت env را روی 0600 تنظیم میکند و یک ورودی cron دقیقهای نصب میکند.
ارتباطات از طریق بات تلگرام انجام میشود و عامل فقط به یک ID کاربر پیکربندی شده پاسخ میدهد. برای کسانی که حضور فیزیکی میخواهند، سیستم از بلندگوهای USB از طریق kmod-usb-audio و alsa-utils پشتیبانی میکند. عامل میتواند یک صدای بوق دو-تونه (finn-blip.wav) پخش کند یا با صدای یک ملوان پیر و خشن با استفاده از سنتز گفتار OpenAI صحبت کند. این ویژگی صوتی فقط بین ساعات FINN_VOICE_FROM و FINN_VOICE_TO (به طور پیشفرض ۹:۰۰ تا ۱۹:۰۰) فعال است.
تعامل و کنترل
عامل به هر پیامی در هر حالتی پاسخ میدهد و دستورات محلی را میپذیرد:
/status: نمایش گزارشات امروز، تعداد فراخوانیهای مدل مصرف شده و مغز فعال./off،/rare،/normal،/chatty: تنظیم سقف روزانه گزارشات بدون درخواست (از ۲ تا ۱۰ مورد در روز)./test: حذف سقف روزانه برای دو ساعت و سپس بازگشت به حالت/chatty./machines: لیست ماشینهای قابل کنترل که در حال حاضر بیدار هستند./wake <name>: ارسال بسته جادویی WOL و تایید اینکه آیا ماشین بالا آمده است یا خیر./sleep <name>: خواباندن ماشین از طریق SSH.
گزارشهای بدون درخواست (Unprompted) با یک پرتاب سکه به زبان روسی یا انگلیسی ارسال میشوند، هرچند او به زبانی که کاربر با آن مینویسد پاسخ میدهد. برای تکزبانه کردن او، کاربر باید خطوط STYLE و زبان را در finn.lua ویرایش کند.
مدیریت محلی و عیبیابی
مدیران میتوانند مستقیماً از طریق شل (Shell) و با استفاده از tick.sh با عامل تعامل کنند:
/root/finn/tick.sh: اجرای یک تیک (همانطور که cron انجام میدهد)./root/finn/tick.sh facts: یک نمای فقط-خواندنی از آنچه باکس در لحظه میبیند. این دستور اکیداً فقط-خواندنی است تا عیبیابی باعث نشود رویدادی که در حال بررسی است، به عنوان «شناخته شده» علامتگذاری شود و «خورده شود»./root/finn/tick.sh say "...": مجبور کردن عامل به صحبت در یک مورد خاص./root/finn/tick.sh status: ارائه همان دادههایی که دستور/statusبات میدهد./root/finn/tick.sh kinds: نمایش نحوه گروهبندی حسگرها و زمان آخرین صحبت هر گروه.
حفاظها و حریم خصوصی
برای جلوگیری از توهم (Hallucination)، پرامپت سیستمی او را از روایت «لولهکشی» (Plumbing) خودش منع میکند. او نمیتواند بگوید «این مقدار به من داده نشد»؛ او یا چیزی را متوجه میشود یا نمیشود. همچنین صراحتاً به او گفته شده که هرگز مشخصات فنی (Technical Specification) را نخوانده و فقط «نرمالی» را میشناسد که در اتاق خاص خودش اندازهگیری کرده است.
چهار قانون خاص خروجی شخصیت او را کنترل میکند:
۱. ابتدا حقیقت، سپس تصویر: او باید ابتدا نام چیز را بگوید (مثلاً «تلاشهای ناموفق SSH») و سپس از استعاره استفاده کند. گزارشی که فقط استعاره باشد، مثل «دویست و هفتاد و هشت گلو در شکم فریاد میزنند»، هیچ مفهومی را منتقل نمیکند.
۲. تصاویر معنادار: استعارهها باید زمینهدار باشند؛ او نمیتواند از جملات پرکننده مثل «تیزتر از دیشب بیدار شدم» استفاده کند.
۳. عدم بحث درباره لولهکشی: او نمیتواند درباره پرامپت خود یا مقادیر گمشده بحث کند.
۴. دروغ نگفتن درباره حسگرها: او نمیتواند «جریان ۲.۵ مگابیت بر ثانیه» را به «خط باریک» تبدیل کند اگر یک گیگابیت در دسترس است، و نمیتواند دانشی درباره اینکه یک تماس تصویری به چه مقدار پهنای باند «نیاز دارد» اختراع کند.
حریم خصوصی با محدود کردن دامنه مشاهده تأمین شده است. عامل گزارشهای کلی از شبکه گستردهتر و دستگاههای نامگذاری شده متعلق به کاربر (از طریق FINN_PEOPLE) را ارائه میدهد. او بهطور عمدی از ثبت کوئریهای DNS اجتناب میکند تا محتوای ترافیک کاربران را بازرسی نکند. توسعهدهنده صراحتاً هشدار میدهد که از این ابزار در شبکههای مشترک ساختمان استفاده نکنید، زیرا این کار یک اسباببازی را به ابزاری برای ردیابی مخفیانه حضور غریبهها تبدیل میکند.
هزینه، استهلاک و نگهداری
برای محافظت از حافظه فلش روتر، تاریخچه حسگرها در tmpfs زندگی میکند. فایل وضعیت دائمی (/root/finn/state.json) تنها چند صد بایت است و فقط زمانی بازنویسی میشود که محتویاتش تغییر کند. لاگها در ۲۵۶ کیلوبایت قطع میشوند تا کل ردپای overlay زیر یک مگابایت باقی بماند.
هزینههای API از طریق یک سقف سخت ۴۰ فراخوانی مدل در روز پایین نگه داشته شده است. سهمیه روزانه بهجای اینکه یکباره آزاد شود، بهتدریج در طول روز باز میشود تا یک انفجار از ناهنجاریهای صبحگاهی، عامل را تا ساعت ۵ عصر ساکت نکند. یک پیام همیشه بدون توجه به بازه زمانی در دسترس است.
تنظیمات و پیکربندی
کاربران میتوانند رفتار عامل را در ابتدای finn.lua با استفاده از چندین ثابت تنظیم کنند:
HIST: تعداد دقایق تاریخچهای که «نرمال» را تعریف میکند.WARMUP: نمونههای مورد نیاز قبل از اینکه یک حسگر بتواند ناهنجاری را تحریک کند.SUBJECT_MUTE: مدت زمانی که یک موضوع پس از مطرح شدن ساکت میماند.CALL_BUDGET: سقف سخت فراخوانیهای روزانه مدل.QUIET_FROM / QUIET_TO: ساعات سکوت برای صحبتهای بدون درخواست.FLOOR: حد آستانه نویز برای هر حسگر جهت جلوگیری از گزارش نوسانات عادی.MODES: پیشتنظیمات میزان پرحرفی برای دستورات بات.
تحلیل تحریریه
the-finn یک کلاس درس در زمینه ابزارهای «شخصیتمحور» است. با قاببندی یک مانیتور شبکه به عنوان یک ساکن بدقلق، توسعهدهنده مشکل اصلی سیستمهای مانیتورینگ یعنی «خستگی از هشدارها» (Alert Fatigue) را حل کرده است. ما معمولاً نوتیفیکیشن «ترافیک بالا» را نادیده میگیریم، اما ممکن است به موجودی دیجیتال توجه کنیم که شکایت میکند: "Твой десктоп качает на скорости 9.5 Мбит/с" (دسکتاپ تو با سرعت ۹.۵ مگابیت بر ثانیه دانلود میکند) در حالی که معمولاً فقط ۲۰۰ کیلوبیت بر ثانیه میگیرد.
برای علاقهمندان به Home Lab، این پروژه نشان میدهد که چگونه عاملهای مبتنی بر API میتوانند در «لبه» شبکه جاسازی شوند. این کار هوش مصنوعی را از جعبه چت خارج کرده و به زیرساخت میبرد و یک قطعه سختافزاری خستهکننده را به یک شرکتکننده روایتی در محیط دفتر تبدیل میکند. اگر یک روتر OpenWrt و چند دلار اعتبار API دارید، اکنون میتوانید یک بدقلق دیجیتال نصب کنید تا راهروی شما را بپاید.




گفتگو