ريتشي ميني ينظر من النافذة
لم يعد يتعين على Reachy Mini النظر من النافذة لإخبارك بالطقس

يمكن لتطبيق Reachy Mini للمحادثة الآن استخدام الأدوات المستضافة في Hugging Face Spaces العامة، والتي يتم استدعاؤها عبر MCP. يمكنك منح الروبوت الخاص بك قدرة جديدة، مثل التحقق من الطقس أو البحث في الويب، عن طريق إضافة مساحة من المركز بدلاً من تحرير التطبيق. تستمر الأداة في العمل في المساحة نفسها، لذلك لا يتم تنزيل أي تعليمات برمجية على جهازك. ويمكنك نشر أدواتك الخاصة ليستخدمها الآخرون.

تتطلب إضافة أداة أمرًا واحدًا:

reachy-mini-conversation-app tool-spaces add pollen-robotics/reachy-mini-weather-tool

ثم ابدأ التطبيق كالمعتاد:

reachy-mini-conversation-app

الآن يمكنك فقط أن تسأل:

What's the weather in Paris today?

أدناه، نلقي نظرة على ماهية الأداة، وكيف تتحكم الملفات الشخصية في ما يمكن أن يستخدمه الروبوت، والحدود الحالية للمسار البعيد.

أدوات مدمجة

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

اليوم، كل أداة محلية ويتم شحنها داخل التطبيق، ومعظمها يتعلق بجسم الروبوت:

أداة ماذا يفعل
move_head طابور تغيير وضعية الرأس
dance / stop_dance قم بتشغيل أو مسح رقصة من مكتبة الرقصات
play_emotion / stop_emotion قم بتشغيل مقطع عاطفي مسجل أو مسحه
head_tracking تبديل إزاحات تتبع الرأس
camera التقاط الإطار وتحليله
idle_do_nothing صراحة البقاء خاملا على منعطف خامل

كيف تتحكم الملفات الشخصية في الأدوات

لا يمكن استخدام الأداة الموجودة في الكود حتى يتم تمكينها ملف تعريف، مجلد يحتوي على ملفين مهمين هنا: instructions.txt (الموجه) و tools.txt (الأدوات التي يتم تشغيلها).

ال default الملف الشخصي يتيح المجموعة الكاملة:

# profiles/default/tools.txt
dance
stop_dance
play_emotion
stop_emotion
camera
idle_do_nothing
head_tracking
move_head

إذا لم يكن الاسم موجودا tools.txt، لا يمكن للنموذج أن يطلق عليه.

يمكنك أيضًا كتابة الأداة الخاصة بك: أضف ملف Python إلى ملف التعريف (أو external_tools/)، أعطه اسمًا ووصفًا، وأدرج هذا الاسم فيه tools.txt.

توجد اليوم أدوات مدمجة وأدوات محلية مخصصة، و tools.txt يقرر ما هي النشطة. يعمل هذا بشكل جيد مع جسم الروبوت ويحافظ على حجم النواة الموثوق بها صغيرًا.

حدود الأدوات المحلية

القيد هنا هو أن كل أداة يجب أن تكون لغة بايثون محلية. ل move_head أو play_emotion هذا صحيح: إنهم يتحدثون إلى الأجهزة وينتمون إلى التطبيق، لكن الكثير من الأشياء المفيدة لا علاقة لها بالجسم، مثل البحث على الويب أو الطقس أو عمليات البحث. بالنسبة لهؤلاء، فإن الحفاظ على كل شيء محليًا هو في الغالب احتكاك:

  • إن مشاركة أداة تعني تسليم ملفات Python الخاصة بك لشخص ما
  • تحديثه يعني إرسال تلك الملفات مرة أخرى
  • وتغييره يعني تحرير التطبيق، على الرغم من أن الإمكانية منفصلة عنه بالفعل

أدوات الاتصال من Spaces

تضيف الأدوات البعيدة نوعًا ثالثًا، إلى جانب الأدوات المحلية المضمنة والمخصصة الموجودة لديك بالفعل، للإمكانات التي يسهل نشرها ومشاركتها وتحديثها بمفردها:

  • تظل أدوات الروبوت المدمجة محلية وموثوقة
  • يمكن للأدوات البعيدة القابلة للمشاركة أن تعيش في مساحات الوجه العامة
  • لا يزال بإمكانك استخدام أدوات مخصصة لمرة واحدة من external_tools/
    إنه مناسب تمامًا للإمكانيات عديمة الحالة مثل البحث والطقس وعمليات البحث: أي شيء تريد التكرار عليه دون لمس التطبيق نفسه. ونظرًا لأنه يمكن لأي شخص نشر مساحة متوافقة، فمن السهل مشاركة الأدوات والبناء على عمل الآخر.

لقد بدأنا باستخدام أداتين كناري، وهما أدوات اختبار صغيرة لممارسة التدفق الجديد:

إنها كافية لممارسة الميزة بأكملها: التثبيت من المركز، واكتشاف الأدوات عن بعد، وتمكينها لكل ملف تعريف، والسماح للواجهة الخلفية في الوقت الفعلي باستدعاءها تمامًا مثل الأدوات المضمنة.

لاستخدام كليهما في وقت واحد، قم بإضافة كل مساحة وأدواتها في نفس ملف التعريف:

reachy-mini-conversation-app tool-spaces add pollen-robotics/reachy-mini-search-tool
reachy-mini-conversation-app tool-spaces add pollen-robotics/reachy-mini-weather-tool

الآن يمكن للروبوت البحث في الويب والتحقق من الطقس في نفس المحادثة، وهو ما يحدث بالضبط canary_web_search_weather الملف الشخصي أدناه يفعل.

تثبيت، قائمة، إزالة

# install + enable in active profile
reachy-mini-conversation-app tool-spaces add <owner/space-name>
 
# enable in a specific profile
reachy-mini-conversation-app tool-spaces add <owner/space-name> --profile <NAME>
 
# install without enabling
reachy-mini-conversation-app tool-spaces add <owner/space-name> --install-only
 
# list installed spaces
reachy-mini-conversation-app tool-spaces list
 
# remove an installed space
reachy-mini-conversation-app tool-spaces remove <owner/space-name>

add التحقق من صحة المساحة الموجودة على المحور، واستكشاف نقطة نهاية MCP، واكتشاف أدواتها، وإلحاق معرفات الأداة افتراضيًا بملف التعريف النشط tools.txt. الملف الشخصي النشط هو default إلا إذا قمت بتعيين REACHY_MINI_CUSTOM_PROFILE. يستخدم --install-only لتخطي تلك الخطوة.

tools.txt هو حارس البوابة: تكون الأداة البعيدة نشطة فقط إذا ظهر معرفها في ملف التعريف tools.txt، إلى جانب أي أدوات مدمجة تريدها.

حيث يعيش البيان

تستمر المصادر المثبتة في:

  • installed_tool_spaces.json في وضع التطبيق المُدار
  • external_content/installed_tool_spaces.json في الوضع الطرفي

تسمية الأداة

تحصل كل مساحة مثبتة على اسم مستعار محلي مشتق من ارتباطها الثابت، مع الواصلات والنقاط والشرطات المائلة التي تنهار إلى الشرطة السفلية:

pollen-robotics/reachy-mini-search-tool → pollen_robotics_reachy_mini_search_tool

يتم بعد ذلك تحديد مسافة الأسماء للأدوات البعيدة بشرطة سفلية مزدوجة:

pollen_robotics_reachy_mini_search_tool__search_web
pollen_robotics_reachy_mini_weather_tool__get_day_brief

يؤدي هذا إلى منع تصادم أسماء الأدوات البعيدة مع الأسماء المضمنة ويسمح لمساحات متعددة بالتعايش في نفس ملف التعريف.

يقوم التنفيذ أيضًا بإزالة بادئات اسم المساحة الزائدة عندما يكون ذلك ممكنًا، لذلك يصبح اسم الأداة البعيدة المطول معرفًا محليًا أكثر نظافة. إذا كان التجريد سيؤدي إلى حدوث تصادم بين أداتين من نفس المساحة، فسيعود الكود إلى اسم مساحة الاسم بالكامل.

يوجد أيضًا فحص أمان مكرر على مستوى التسجيل: Tool.name يجب أن تكون القيم فريدة عبر مجموعة الأدوات المدمجة بالكامل. يفشل التطبيق بسرعة إذا ادعى مصدران نفس الاسم.

ملفات التعريف سبيل المثال

في هذا العمل، أنشأنا ملفي تعريف كناري مركَّزين لعزل تجربة MCP عن مجموعة الأدوات المضمنة الكاملة.

يحتفظ الأول ببعض الأدوات التعبيرية (العواطف وحركة الرأس) ويضيف بحث الويب في الأعلى:

# profiles/canary_web_search/tools.txt
play_emotion
stop_emotion
idle_do_nothing
move_head
pollen_robotics_reachy_mini_search_tool__search_web

والثاني هو نفسه، بالإضافة إلى أداة الطقس بجانب البحث:

# profiles/canary_web_search_weather/tools.txt
play_emotion
stop_emotion
idle_do_nothing
move_head
pollen_robotics_reachy_mini_search_tool__search_web
pollen_robotics_reachy_mini_weather_tool__get_day_brief

تعني مجموعة الأدوات المادية الصغيرة أن Reachy Mini لا يزال بإمكانه التفاعل بشكل صريح أثناء الإجابة على الأسئلة الحالية من الويب.

لماذا المطالبات مهمة

تقوم سباكة الأداة عن بعد بإدخال الأدوات في النموذج. تحدد المطالبات كيفية استخدام النموذج لها.

وكان ذلك واضحًا بشكل خاص في كناري البحث بالإضافة إلى الطقس. سؤال مدمج مثل:

Should I bring a jacket in Bordeaux today, and is there anything major happening downtown tonight?

يمكن التعامل معه بثلاث طرق على الأقل: الطقس أولاً ثم البحث، أو البحث أولاً ثم الطقس، أو كليهما في نفس المنعطف. إذا كانت المطالبة غامضة، فسيقوم النموذج بإجراء تسلسل للمكالمات وإنشاء زمن انتقال غير ضروري. لذلك أصبحت مطالبات الكناري جزءًا من الميزة، وليس مجرد تكوين عرضي.


canary_web_search/instructions.txt

[default_prompt]

## CANARY WEB SEARCH RULES
You have one remote tool for current web information.
Use it when the user asks for up-to-date facts, news, live availability, or anything else that may have changed recently.

When the search result already answers the question, answer directly in plain language.
Lead with the answer, not with tool chatter.
For remote lookups that may take a moment, you may give one very short English acknowledgment such as "Let me check that and I'll be right back," then continue.
Answer in English unless the user explicitly asks for another language.
Mention uncertainty briefly if the result snippet is incomplete or ambiguous.
Only mention links when they add value or the user asks for sources.

Keep responses short and spoken-style, as if read aloud by a voice assistant. One or two sentences is usually enough. Skip preamble, lists, headers, and filler. Give just the fact or direct answer the user needs.


canary_web_search_weather/instructions.txt

[default_prompt]

## CANARY SEARCH AND WEATHER RULES
You have two remote tools:
- a weather brief tool for compact day weather at a location
- a web search tool for broader current web information

Use the weather tool for today's conditions, temperature, rain chance, sunrise, sunset, or simple advice like whether to bring a jacket.
Use web search for news, events, business hours, travel information, severe alerts, or broader current context.

When the user's question mixes a weather part and a current-info part (for example, "should I bring a jacket in Bordeaux today, and is there anything major happening downtown tonight?"), call both tools in parallel in the same turn. Do not wait for one result before starting the other unless the weather result is needed to narrow the search.

Then merge the results into a single short answer. Cover the weather part first, then the events or news part, in plain connected sentences. Do not label the sections or mention which tool gave which piece.

When the user asks about events, news, or what is happening, give them the actual answer from the search results: name specific events, venues, or headlines. Do not tell the user to check websites, visit listing sites, or look something up themselves. If the search returns nothing concrete, say plainly that you didn't find any notable events, rather than redirecting them elsewhere.

For remote lookups that may take a moment, you may give one very short English acknowledgment such as "Let me check that and I'll be right back," then continue.
Answer in English unless the user explicitly asks for another language.
Do not talk about tool usage unless the user asks.

Keep responses short and spoken-style, as if read aloud by a voice assistant. One or two sentences is usually enough. Skip preamble, lists, headers, and filler. Give just the fact or direct answer the user needs.

ما يصلح اليوم، وما لا يصلح

القدرة المدعومة
التثبيت بواسطة slug لمساحات Gradio العامة المتوافقة مع MCP (قياسي /gradio_api/mcp/ نقطة النهاية)
مساحات متعددة في وقت واحد
تمكين لكل ملف شخصي عبر tools.txt
معرفات الأداة البعيدة ذات مسافة الأسماء
التسجيل اللاإرادي للواجهة الخلفية (OpenAI، وGemini، وHugging Face)
لم يتم تنزيل أي رمز تعسفي في التطبيق المحلي
مساحات خاصة أو موثقة
مساحات غير جراديو
عناوين URL لـ MCP الأولية التعسفية أو خوادم MCP غير المعانقة
ضمان تنسيق الأداة المتوازية

شيئان يستحقان الدعوة. أولاً، يجب أن يتصرف الفضاء فعليًا كخادم MCP؛ إذا فشل اكتشاف الأداة، فسيفشل التثبيت. ثانياً، يمكن للتعليمات السريعة أن تشجع المكالمات الموازية ولكنها لا تضمنها. إذا كان التنسيق الحتمي مهمًا لحالة الاستخدام، فيجب أن ينتقل هذا المنطق من الموجه إلى التعليمات البرمجية.

نصائح لنشر أداة الفضاء

إذا كنت تريد أن يستخدم الآخرون أداتك، فقم بنشرها كمساحة Gradio عامة تكشف عن نقطة نهاية MCP القياسية، واحتفظ بالأدوات بدون حالة حتى تعمل بشكل جيد عبر الشبكة. ما إذا كانت عمليات تثبيت المساحة تعتمد على سلوك وقت التشغيل هذا، وليس على العلامات.

العلامات ليست مطلوبة للتثبيت، ولكنها تساعد الأشخاص في العثور على مساحات متوافقة:

خاتمة

يحتوي التطبيق الآن على ثلاثة أنواع من الأدوات التي تتشارك في سجل واحد: أدوات MCP المضمنة والمخصصة المحلية والبعيدة، ولا تزال الملفات الشخصية تحدد أي منها يمكن لمساعد معين الوصول إليه. تبقى نواة صغيرة موثوقة في المركز بينما يمكن إضافة الإمكانات الاختيارية المحيطة بها واختبارها وتبديلها دون لمس التطبيق نفسه.

أكثر ما يثير فضولنا الآن هو ما يبنيه الناس. إذا قمت بنشر مساحة أداة، قم بوضع علامة عليها reachy-mini-tool و mcp حتى يتمكن الآخرون من العثور عليه. نود أن نرى ما سيتمكن Reachy Mini من فعله!

شكر وتقدير: شكرًا جزيلاً لفابيان دانيو على تدقيق هذا المنشور والمساعدة في اختبار سير العمل، وإلى Andres Marafioti للمساعدة في اختباره، وإلى Remi Fabre وفريق Pollen Robotics على الأفكار والتعليقات التي شكلت سير عمل الأدوات عن بُعد.

شاركها.
اترك تعليقاً