RisalDash RisalDash

دليل · ذكاء اصطناعي · ESP32

امنح ESP32 وجهًا يفكّر

لا يستطيع ESP32 تشغيل نموذج لغوي كبير — لكنّه واجهة مثالية له. تأخذ الرقاقة سؤالك، ويفكّر نموذج مُستضاف، ويتفاعل وجه الروبوت طوال الطريق: يستمع ← يفكّر ← يتكلّم ← تمّ. إليك البنية، وقاعدة الأمان الوحيدة المهمّة، والنمط الذي يربط كل شيء.

وكيل ذكيLLMESP32وسيطRisalDash
مسار وكيل ESP32 الذكي: وجه الروبوت يمرّ بمراحل يستمع ويفكّر ويتكلّم والنجاح
الوجه هو آلة حالات الوكيل — لكلّ مرحلة من الطلب تعبيرها الخاص.

الشكل: ESP في الأمام، النموذج في الخلف

لا تحاول تشغيل الذكاء على الرقاقة نفسها. التقسيم الرابح بسيط: ESP32 يملك الواجهة — يأخذ المُدخل (رسالة مكتوبة، زرّ، لاحقًا ميكروفون)، ويُظهر ما يجري، ويرسم الجواب — بينما النموذج المُستضاف يتولّى اللغة. وبينهما خادم صغير تتحكّم به. يذهب الطلب في اتجاه ويعود:

you type  →  ESP32  →  your proxy  →  LLM  →  reply + mood  →  ESP32 face

كلّ ما يراه المستخدم ويلمسه يعيش على ESP ويُقدَّم لوحةً حيّة على الويب — فيصبح لـ«الوكيل» جسدٌ قبل أن يكون له صوت بوقتٍ طويل.

القاعدة الوحيدة: مفتاح الـ API لا يلمس ESP أبدًا

هنا يخطئ الناس غالبًا. لا تضع مفتاح النموذج اللغوي في البرنامج الثابت أبدًا. أيّ شخص يسحب ملفّ .bin من الفلاش يقرؤه — انظر أين يخزّن ESP32 الأشياء — والمتحكّم الدقيق لا يستطيع أصلًا تثبيت سلسلة TLS المتغيّرة للمزوّد بأمان. بدلًا من ذلك، أقِم وسيطًا رفيعًا (Cloudflare Worker، أو مسار Node صغير) يحمل السرّ. يستدعي ESP رابطك أنت برسالة عادية؛ يضيف الوسيط المفتاح، ويستدعي النموذج، ويُعيد JSON صغيرًا. إنها نحو خمسة عشر سطرًا — وتتيح لك أيضًا تبديل النماذج ووضع حدود وتخزينًا مؤقتًا، دون إعادة برمجة جهاز واحد.

الوجه آلة حالات

هذه هي الحيلة التي تجعله ينبض: لطلب الشبكة حالات — إرسال، انتظار، وصل-الجواب، فشل — وهي تنطبق واحدةً بواحدة على التعبيرات. أنت لا تسرد التقدّم بالنصّ؛ الوجه هو شريط التقدّم. تضبط متغيّرًا مربوطًا واحدًا فيتبعه الوجه المُقدَّم (وأيّ شاشة على الجهاز) عبر WebSocket:

mood = FACE_LISTENING;   // you asked
mood = FACE_PONDERING;   // handed to the model
reply = askAgent(msg);   // the proxy call
mood = FACE_SPEAKING;    // the answer is here
mood = replyMood;        // settle into the model's mood

السطر الأخير هو الأمتع: دع النموذج يختار مزاجه بنفسه. اطلب منه أن يُنهي جوابه بمؤشّر مزاج، فيعكس الوجه مضمون الجواب لا مجرّد «الأنابيب»: راضٍ، متردّد، معتذر. للوجه عشرات الحالات للاختيار منها (مبنيّة ومعاينة في BoardLab)؛ ويكفي الوكيل حفنة منها ليبدو متجاوبًا.

من يفعل ماذا

الطبقةأين تعملمهمّتها
الوجه + الواجهةعلى ESP32أخذ المُدخل، إظهار الحالة، رسم الجواب
الوسيطخادمك / Workerحمل المفتاح، استدعاء النموذج، تشكيل الـ JSON
النموذجفي السحابةالفهم، الردّ، اختيار المزاج

أبقِ الحدّ نظيفًا فيبقى كلّ جزء قابلًا للتبديل: تغيّر النماذج في الوسيط، وتعيد تلوين الوجه في البرنامج الثابت، ولا يزعج أحدهما الآخر.

إلى أين بعد ذلك

النصّ في المتصفّح أبسط واجهة، لكنّ المسار نفسه يقبل زرًّا أو ميكروفونًا بالمثل — تبدّل المُدخل وتُبقي آلة الحالات. اقرنه بـالراديو المناسب ومصدر طاقة فيصير الوجه المتكلّم جهازًا حقيقيًّا على رفّ. المخطّط الكامل (مع عقد الوسيط) يأتي مثالًا باسم AI-Agent في مستودع RisalDash.

الجسد أولًا؟ لوحة حيّة كاملة — وجه، ومقاييس، وتحكّم — في أسطر C++ قليلة.

وجه الوكيل حيًّا

بعض الحالات التي يقودها هذا المسار — تتحرّك من تلقاء نفسها.

neutral
listening
pondering
speaking
happy
success
worried
error
ابنِ المجموعة الكاملة في BoardLab ←