تصور کنید هر صبح با کودکی میجنگید که میخواهد همزمان لباس بپوشد، مسواک بزند و بازی کند و در نهایت هیچکدام را تمام نمیکند. یک پدر توسعهدهنده برای حل این آشفتگی، اپلیکیشنی به نام One Thing را بر پایه Gemma 4 ساخت تا «خستگی از لیستهای طولانی» را برای پسر ۶ سالهاش از بین ببرد. این اپلیکیشن طراحی شده است تا وضعیتی را درمان کند که در آن کودکان سعی میکنند پنج کار را همزمان انجام دهند و در نتیجه هیچکدام را به پایان نرسانند.
برای بسیاری از والدین، عجلهی صبحگاهی نبردی برای مدیریت توابع اجرایی مغز است. در این مورد خاص، یک صبح معمولی برای مدرسه نیازمند پنج مورد مشخص است: صبحانه خوردن، مسواک زدن، پوشیدن لباس، پوشیدن کفش و کاپشن، و آماده کردن کولهپشتی. در حالی که بخش صبحانه ثابت است — یک پنکیک با عسل — بقیه مراحل اغلب از هم میپاشد. کودک ممکن است شروع به پوشیدن لباس کند، ناگهان یاد مسواک بیفتد و سپس تصمیم بگیرد بازی کند. نتیجه این است که در یک حلقه هرجومرج از کارهای ناتمام گیر میکند و هر سه کار را همزمان پیش میبرد، که یعنی در واقع هیچکدام انجام نمیشوند. اپلیکیشن One Thing دقیقاً همین نقطه اصطکاک را هدف قرار داده است؛ به این صورت که کودک هرگز یک لیست را نمیبیند، بلکه در هر لحظه فقط یک «مأموریت» تکمرحلهای با یک تم خاص را مشاهده میکند.
معماری فنی One Thing
همانطور که در بحثهای گذشتهی ما دربارهی امنیت مدلهای بازمتن اشاره کردیم، حذف واسطههای ابری برای دادههای حساس حیاتی است. این سامانه برای تضمین حریم خصوصی کامل، بهطور کلی روی شبکه محلی خانه اجرا میشود. توسعهدهنده از Ollama — یک محیط اجرای متنباز برای مدلهای هوش مصنوعی — استفاده کرد تا مدل Gemma 4 (بهطور مشخص نسخه gemma4:e4b) را روی یک لپتاپ Apple M5 Max با ۶۴ گیگابایت رم میزبانی کند.
طبق گزارش منتشر شده، زیرساخت فنی این پروژه بهطور عمدی بسیار ساده و سبک طراحی شده است:
- یک فایل اجرایی تکواحدی (Binary) به زبان Go که فقط از کتابخانههای استاندارد استفاده میکند.
- رابط کاربری React که در دل فایل اجرایی کامپایل شده است.
- عدم اتصال به ابر، نبود پایگاهداده و عدم نیاز به ایجاد حساب کاربری.
- استفاده از فایلهای JSON محلی در یک پوشه برای ذخیره مأموریتهای ذخیره شده.
- تنها ارتباط شبکهای اپلیکیشن، فراخوانی Ollama روی localhost است.
تبدیل روتینها به مأموریتهای فضایی
والد ابتدا روتین را به زبان انگلیسی ساده توصیف کرده و یک تم (مثلاً «پرتاب راکتی» یا «پیادهروی در فضا») انتخاب میکند. سپس هوش مصنوعی زاینده (Generative AI) — شبیه به نویسندهای خلاق که میتواند دستورات خشک را به داستان تبدیل کند — این توصیفات را به یک ساختار JSON تبدیل میکند. برای جلوگیری از توهم (Hallucination) — یعنی وقتی مدل با اطمینان چیزی میگوید که وجود ندارد، مثل دوستی که خاطرهای را اشتباه تعریف میکند — توسعهدهنده یک طرحواره (Schema) سختگیرانه تعریف کرده است.
طبق این طرحواره، هر مرحله باید شامل موارد زیر باشد: یک ایموجی، یک عنوان، یک دستور صوتی، یک حالت اجرا (یا 'until_done' برای کارهای متغیر یا 'for_duration' برای کارهای زماندار) و یک محدودیت زمانی به ثانیه. ویژگیهای مورد نیاز در کد عبارتند از: emoji ،title ،say ،mode و seconds.
پس از پاسخ مدل، سرور دادهها را از دو فیلتر تخصصی عبور میدهد:
۱. پاکسازی (Sanitize): این تابع خطاهای جزئی مانند فاصلههای خالی اضافی را اصلاح میکند، اطمینان حاصل میکند که عناوین مراحل با حروف بزرگ (Title Case) شروع شوند، تایمرهایی که خارج از محدوده مجاز هستند را تصحیح میکند و تأیید میکند که فیلد «ایموجی» واقعاً حاوی یک ایموجی باشد.
۲. اعتبارسنجی (Validate): این تابع خطاهای ساختاری را بررسی میکند؛ برای مثال، اگر عنوان یک مرحله بیش از ۶ کلمه باشد، آن را رد میکند.
اگر خروجی رد شود، سرور خطاها را به عنوان یک پیام تکمیلی به مدل برمیگرداند تا یک بار دیگر تلاش کند. این حلقه تضمین میکند که کودک فقط محتوایی را ببیند که بهصورت برنامهنویسیشده تأیید شده و توسط والدین خوانده شده است. توسعهدهنده تأکید میکند که کودک هرگز مستقیماً با مدل صحبت نمیکند و هیچ کلمهای را نمیبیند که ابتدا توسط والدین تأیید نشده باشد.
طراحی بر اساس روانشناسی کودک
این اپلیکیشن برای جلوگیری از اینکه کودک ۶ ساله فقط دکمهها را سریع فشار دهد و از مراحل بپرد، از چندین حفاظ رفتاری استفاده میکند:
- نگه داشتن برای پیشروی (Hold-to-Proceed): دکمه پیشروی باید به مدت ۰.۸ ثانیه نگه داشته شود. این زمان بر اساس برچسبهای زمانی (Timestamps) اندازهگیری میشود، نه فریمهای انیمیشن. ضربههای سریع هیچ اثری ندارند و اگر دکمه زود رها شود، حلقه پیشرفت خالی میشود.
- تایمرهای غیرقابل رد: مسواک زدن یک رویداد زماندار است که کودک نمیتواند آن را دور بزند. منطق برنامه این است که پذیرفتن عبارت «تا وقتی تایمر تمام شود» برای یک کودک بسیار راحتتر از پذیرفتن عبارت «تا وقتی بابا اجازه دهد» است.
- تقویت مثبت: در برنامه هیچ صفحه قرمزی، هشدار «خیلی کند بودی» یا کسر امتیاز وجود ندارد. اگر زمان یک تایمر تمام شود، اپلیکیشن صرفاً یک بار میپرسد که آیا کودک هنوز در حال انجام آن کار است یا خیر.
- پیشرفت بصری: یک ردیف نقطه با یک راکت متحرک، مرحله فعلی را نشان میدهد. دیدن پایان مسیر باعث میشود روتین در ذهن کودک کوتاهتر به نظر برسد.
- پشتیبانی صوتی: چون کودک تازه در حال یادگیری خواندن است، تمام مراحل با صدای بلند خوانده میشوند. اپلیکیشن برای کیفیت بهتر، از صداهای رباتیک ابری دوری کرده و اولویت را به صداهای Premium، سپس Enhanced و در نهایت صداهای طبیعی نصبشده روی دستگاه میدهد.
عملکرد و تنظیمات پرامپت
در بررسیهای فنی روی M5 Max (با نسخه Ollama 0.35 و مدل پیشبارگذاری شده)، مدل Gemma 4 مأموریتها را بهطور متوسط در ۲.۴ ثانیه تولید کرد (دامنه بین ۱.۷ تا ۲.۸ ثانیه) در حالی که حالت «تفکر» (Thinking) خاموش بود. در ۲۲ مورد از ۲۲ اجرا، خروجی در همان تلاش اول معتبر بود.
جالب اینجاست که فعال کردن قابلیت زنجیره تفکر (Chain-of-Thought) — شبیه وقتی شاگرد ریاضی پای تخته بلند بلند فکر میکند تا به جواب برسد — سرعت را به ۱۱.۳ ثانیه کاهش داد و حتی باعث کاهش اثربخشی شد. در یکی از اجراها با حالت تفکر، مدل بهاشتباه صبحانه را به یک مرحله زماندار ۱۰ دقیقهای تبدیل کرد!
مهندسی پرامپت (Prompt Engineering) — هنر سؤال درست پرسیدن برای گرفتن بهترین جواب — در اینجا حیاتی بود. توسعهدهنده متوجه شد اگر فقط کلمه «صبحانه» را به کار ببرد، مدل شروع به اختراع غذاهای خاص مثل غلات میکند. در نهایت، پرامپت نهایی صراحتاً مدل را از اختراع اشیاء منع کرد و آن را مجبور کرد فقط از کلمات دقیق والدین استفاده کند (مثلاً «صبحانهات را بخور»).
علاوه بر این، پرامپت اکنون حکم میکند که اگر والدی بخشی را «سخت» معرفی کند یا بخواهد آن را تقسیم کند، آن بخش حتماً باید به دو یا سه مرحله مجزا تبدیل شود. برای مثال، مسواک زدن به «دندانهای بالا» و «دندانهای پایین» تفکیک میشود و هر کدام تایمر مخصوص خود را دارند.
با این حال، یک چالش باقی مانده است: تمایل مدل به ادغام کارها. در ۳ مورد از ۸ اجرای صبحگاهی، مدل «کفش و کاپشن» را فقط به «کفش» تبدیل کرد. این موضوع حتی پس از چهار دور تغییر پرامپت ادامه داشت و نشان میدهد چرا مرحله تأیید توسط والدین قبل از رسیدن مأموریت به تبلت کودک ضروری است.
اصلاحات فنی و جزئیات پیادهسازی
چندین تنظیم کوچک برای بهبود تجربه کاربری اعمال شد:
- تست سرعت: توسعهدهنده پارامتر
?speed=20را به آدرس اضافه کرد تا تایمرها برای تست ۲۰ برابر سریعتر اجرا شوند و مجبور نباشد برای هر تست، دقایق کامل مسواک بزند. - اعتبارسنجی ایموجی: پس از اینکه مدل یک بار به جای ایموجی، علامت دو نقطه (:) را برگرداند، اعتبارسنج تغییر کرد تا هرگونه کاراکتر ASCII ساده را رد کرده و آن را با یک ستاره جایگزین کند.
- مدیریت زمان: اگر والدی زمان خاصی را برای خروج از خانه تعیین کند، صفحه نهایی به کودک اطلاع میدهد که چقدر زمان باقی مانده است (مثلاً «۱۴ دقیقه تا پرتاب راکت فرصت داری بازی کنی»).
برای درک بهتر، یک نمونه ورودی و خروجی JSON مدل را بررسی میکنیم.
ورودی والدین:
«روتین: صبح مدرسه برای یک کودک ۶ ساله: صبحانه، مسواک، پوشیدن لباس، کفش و کاپشن، کولهپشتی. مسواک زدن سختترین بخش است، آن را به تکههای کوچک تقسیم کن. تم: پرتاب راکت»
خروجی Gemma 4:
- عنوان: «آماده برای پرتاب راکت»
- مقدمه: «کاپیتان، وقت آن است که راکتت را برای مأموریت امروز آماده کنی!»
- مرحله ۱ (سوخترسانی به راکت): ایموجی 🍳، «کاپیتان، حالا صبحانهات را بخور. به سوخترسانی ادامه بده!»، حالت: until_done، ۶۰ ثانیه.
- مرحله ۲ (پولیش عرشه بالایی): ایموجی 🦷، «دندانهای بالایت را مسواک بزن. آنها را برای پرتاب براق کن!»، حالت: for_duration، ۱۲۰ ثانیه.
- مرحله ۳ (پولیش عرشه پایینی): ایموجی 🦷، «دندانهای پایینت را مسواک بزن. مرکز کنترل به دندانهای تمیز نیاز دارد!»، حالت: for_duration، ۱۲۰ ثانیه.
- مرحله ۴ (پوشیدن لباس راکت): ایموجی 👕، «کاپیتان، حالا لباس بپوش. لباس پروازت آماده است!»، حالت: until_done، ۶۰ ثانیه.
- مرحله ۵ (بستن ارابه فرود): ایموجی 🥾، «کفش و کاپشن بپوش. وقت آن است که تجهیزاتت را ایمن کنی!»، حالت: until_done، ۶۰ ثانیه.
- مرحله ۶ (بستهبندی راکت): ایموجی 🎒، «کاپیتان، کولهپشتیات را جمع کن. مطمئن شو همه چیز داخل است!»، حالت: until_done، ۶۰ ثانیه.
- پایان: «مأموریت با موفقیت انجام شد، کاپیتان! تو برای پرتاب آمادهای!»
حتی با این خروجی باکیفیت، توسعهدهنده متوجه نیاز به ویرایش دستی شد. برای مثال، عبارت «به سوخترسانی ادامه بده!» ممکن است توسط کودک به معنای «بیشتر بخور» تفسیر شود که با دستور پرامپت برای عدم تشویق به پرخوری در تضاد است.
استدلال برای مدلهای وزنهای باز (Open Weights)
این پروژه استدلالی قدرتمند برای استفاده از مدلهای وزنهای باز — یعنی مدلهایی که دستور پختشان علناً منتشر شده — در برابر APIهای ابری است. چون دادهها روی لپتاپ میمانند، نیازی به خواندن سیاستهای حریم خصوصی برای اطمینان از اینکه مشکلات روزمره فرزندش — مانند اینکه کدام بخش از صبح سختترین است — به سروری در آمریکا ارسال نمیشود، نیست.
میزبانی محلی همچنین ریسک قطعی سرویس یا افزایش قیمت APIها را از بین میبرد. توسعهدهنده استدلال میکند که یک روتین صبحگاهی نباید به پایداری سرورهای یک شرکت ثالث وابسته باشد. با استفاده از مدل محلی، این ابزار به یک utility ثابت، رایگان و خصوصی تبدیل میشود. هیچ کنتوری برای محاسبه هزینه نمیچرخد، هیچ کلید API برای محافظت وجود ندارد و نیازی به ساخت حساب کاربری برای ابزاری که توسط یک کودک ۶ ساله استفاده میشود، نیست.
علاوه بر این، نوآوری باز اجازه سفارشیسازی آسان را میدهد. پرامپت سیستم یک فایل متنی ساده در مخزن کد است و مدل تنها یک خط پیکربندی است. اگر کودک به جای ۶ سال، ۴ ساله باشد یا نیاز باشد مراحل حتی کوچکتر شوند، والد به جای کلنجار رفتن با یک محصول صلب و بسته، فقط یک پاراگراف انگلیسی را ویرایش میکند.
این تغییر به سمت هوش مصنوعی محلی در «مقیاس خانوادگی» نشاندهنده آیندهای است که در آن ابزارهای بسیار شخصیسازی شده با تأخیر کم، جزئیات زندگی خانگی را مدیریت میکنند بدون اینکه هرگز شبکه خانه را ترک کنند. توسعهدهنده اشاره میکند که اگرچه نسخه اول در یک شب ساخته شد، اما قبل از تحویل به کودک کاملاً بررسی شد تا اولین تجربه او آرام باشد و نه چیزی که در عجله و قبل از یک ضربالاجل ساخته شده باشد.
وضعیت فعلی و تستها
در حال حاضر، منطق برنامه کامل شده اما هنوز چندین بخش در محیط واقعی تست نشده است:
- تست سختافزاری: اپلیکیشن در حالت مرورگر تبلت روی لپتاپ اجرا شده، اما هنوز روی یک تبلت فیزیکی تست نشده است.
- تست کاربر: کودک هنوز از اپلیکیشن استفاده نکرده است؛ توسعهدهنده میخواست ابتدا برنامه کاملاً تمام و بررسی شود.
- تنوع صداها: صداهای گفتاری بین دستگاهها متفاوت است. برای تجربه طبیعی در مک یا آیپد، کاربران باید صداهای Premium یا Enhanced انگلیسی را از مسیر Settings > Accessibility > Spoken Content دانلود کنند.
- تنظیم تایمرها: توسعهدهنده انتظار دارد که مدت زمان تایمرها پس از تعامل واقعی با یک کودک ۶ ساله و نحوه فشار دادن دکمه Hold، نیاز به تنظیم مجدد داشته باشد.
شما میتوانید منطق رابط کاربری صفحه کودک را از طریق دموی عمومی پروژه در nazboyko.github.io/one-thing/demo بررسی کنید تا ببینید مکانیزم دکمه Hold-to-Proceed در عمل چگونه کار میکند.
گام بعدی شما
- اگر از مدلهای محلی استفاده میکنید، سعی کنید برای کارهای تکراری خانه، یک «طرحواره JSON» سختگیرانه تعریف کنید تا خروجی مدل قابل پیشبینی باشد.
- برای کاهش تأخیر در مدلهای محلی، بررسی کنید که آیا قابلیتهای استدلالی (Thinking) برای تسکهای ساده ضروری هستند یا خیر؛ گاهی خاموش کردن آنها سرعت را ۵ برابر میکند.
- دموهای رابط کاربری مشابه را در nazboyko.github.io/one-thing/demo بررسی کنید تا با مکانیزم دکمههای Hold-to-Proceed آشنا شوید.
اما تأثیر این مدلهای کوچک بر سختافزارهای خانگی تازه شروع شده است؛ در تحلیل ما درباره رایانش لبه و اجرای مدلها روی سختافزارهای ارزانقیمت، ابعاد جدیدتری از این تحول را بررسی کردهایم.




گفتگو