كل المقالات

· Casimiro Ferreira· 5 دقيقة قراءة

إذا أطلق الجميع تطبيقًا، فسنُطلق نحن الصوت: تحويل المواقع إلى تطبيقات صوتية

  • Voice
  • Accessibility
  • OpenVoiceOS
  • Web Automation
  • CLI
  • FOSS

في وقتٍ ما خلال الأعوام الخمسة عشر الماضية، قرّرت الويب بهدوء أن كل موقع مهمّ يحتاج أيضًا إلى تطبيق جوّال. لا لأن HTML توقّف عن العمل — بل لأن التطبيق سطح مُتحكَّم فيه: مجموعة مُنتقاة من الأفعال، بلا زخرفة لم تخترها، وواجهة مبنية لطريقة واحدة في التفاعل.

ونعتقد أن الحركة نفسها تنتظر أن تُصنَع لمجموعة مختلفة من المستخدمين ومجموعة مختلفة من الواجهات. فإذا حوّل الجميع موقعه إلى تطبيق أندرويد، فبإمكاننا تحويل المواقع إلى تطبيقات صوتية — وتطبيقات سطر أوامر، وتدفّقات أصلية لقارئات الشاشة. الفكرة نفسها، بالاتجاه المعاكس: تغليف موقع في سطحٍ مبنيّ على الطريقة التي أنت تريد التفاعل بها معه، إلا أن السطح هو صوتك وطرفيّتك بدلًا من شاشة اللمس.

الويب بالكاد قابلة للاستخدام بالأذن

بالنسبة لمستخدم مُبصِر بفأرة، يكون الموقع الحديث مقبولًا. أما لمن يتصفّح بالصوت، أو عبر قارئ شاشة، أو من طرفيّة، فإن معظم الويب بيئة معادية: جدران تمرير لانهائي، ولافتات ملفات تعريف الارتباط، ونوافذ منبثقة، وقوائم تحتاج إلى مؤشّر، ومحتوى مدفون تحت ثلاث طبقات من الحشو التفاعلي. المعلومة موجودة في الداخل. لكن إخراجها، بلا استخدام اليدين، أمرٌ بائس.

الجواب المعتاد هو «ينبغي أن تكون المواقع أكثر إتاحةً»، وهي كذلك ينبغي أن تكون. لكننا لن نُصلح الويب كلها بالطلب اللطيف. ما نستطيع فعله هو أخذ المواقع المهمّة وبناء واجهة منطوقة نظيفة لكل واحد منها — كما فعلت متاجر التطبيقات للمس، لكن للصوت وسطر الأوامر، وبانفتاح.

طبقتان: واجهة برمجية نظيفة، ثم مهارة صوتية

كل واحد من هذه التطبيقات الصوتية قطعتان مُكدَّستان، ونحن نبني كلتيهما بالفعل.

الطبقة الأولى — عميل مُصنَّف يُحوّل الموقع إلى واجهة برمجية. هذا بالضبط عملنا في الاستخراج والهندسة العكسية للواجهات البرمجية: نصل إلى موقع لا يملك واجهة عامة قابلة للاستخدام، ونُعيد كائنات مُهيكلة ومُصنَّفة بدلًا من HTML هشّ — أفعال، لا استخراج:

from py_bandcamp import BandCamp

for release in BandCamp.search_albums("king gizzard"):
    artist = release.work.credits[0].entity.name if release.work.credits else ""
    print(release.work.title, artist, release.uri)

أدوات الاستطلاع والنقل المضاد للروبوتات الكامنة تحتها تُبقي ذلك الوصول عاملًا مع تغيّر الموقع. وذلك العميل مفيد بالفعل بذاته: فلمستخدم الطرفيّة تكون الواجهة البرمجية هي النسخة المُتاحة من الموقع — بل إن عميل SoundCloud لدينا يأتي مع nds، وهو تطبيق سطر أوامر للبحث عن الموسيقى وتشغيلها بلا متصفّح على الإطلاق. وحالما يصبح الموقع واجهة برمجية، يتوقّف عن كونه أثرًا بصريًا ويصبح شيئًا يمكن لآلة — أو لمسار صوتي — أن تقوده.

الطبقة الثانية — مُلحق OVOS ينطق بتلك الواجهة البرمجية. فوق العميل يجلس مُلحق OpenVoiceOS يُطابِق النوايا المنطوقة إلى استدعاءات الواجهة البرمجية ويسرد النتائج بـأصوات TTS دون اتصال لدينا. وهو عمدًا ليس مهارة مُفصَّلة لكل موقع — فذلك الطريق يؤدّي إلى عشرات المهارات المُفردة التي لا يستطيع أحد صيانتها. ولأي شيء ذي شكل وسائطي فهو مُلحق مزوّد OCP: مُحوِّل صغير واحد يكشف سطح البحث-والتشغيل لموقع ما لإطار عمل Open Common Play بأكمله، بحيث تعمل «ابحث»، و«شغّل»، و«التالي»، و«استأنف» بالفعل بالطريقة نفسها كما تعمل لكل مصدر آخر. الموقع يندرج في واجهة صوتية موحّدة بدلًا من ابتكار واجهته الخاصة.

والنتيجة: «شغّل قناة SomaFM Groove Salad.» «ابحث في Bandcamp عن موسيقى محيطية بترخيص المشاع الإبداعي.» الموقع، مُحوَّلًا إلى شيء يمكنك استخدامه دون النظر إليه — ودون قواعد جديدة تتعلّمها لكل موقع.

في عصر نماذج LLM، الواجهة البرمجية المُصنَّفة هي واجهة لغة طبيعية تنتظر أن تُولَد

ثمة سبب ثانٍ يجعل هذا الشكل أهمّ الآن ممّا كان سيكون قبل خمس سنوات. فالعميل النظيف المُصنَّف هو بالضبط ما يحتاجه نموذج لغة كبير كي يصبح واجهة أمامية بلغة طبيعية لموقع.

أعطِ نموذج LLM مجموعة موثّقة من الدوال — search_albums، وget_recommendations، وstream_url — وسيُترجم بكل سرور «جِد لي شيئًا مثل Naxatras لكن أثقل» إلى الاستدعاءات الصحيحة، ويسلسلها، وينطق النتيجة عائدًا. الواجهة البرمجية المُهيكلة هي الجزء الصعب؛ والواجهة الحوارية فوقها هي على نحو متزايد شيء يُوفّره النموذج ببساطة، ما دامت الأدوات المُسلَّمة إليه حسنة التصنيف وصادقة بشأن ما تُعيده. HTML الفوضوي لا يمنح نموذج LLM ما يتشبّث به. أما العميل المُصنَّف فيمنحه سطح تحكّم.

لذا يأتي عملاء مواقعنا مع SKILL.md — وصفٌ بلغة عادية لما تفعله الواجهة البرمجية، وأفعالها، وأنواع إرجاعها، وأمثلة على الاستدعاءات، مكتوبٌ ليقرأه عميل. وجّه مساعدًا يعمل بنموذج LLM إليه وسيصبح العميل أداة يستطيع النموذج استخدامها فورًا: بلا شيفرة ربط، ولا تكامل مُفصَّل، فقط «هذا ما يستطيع هذا الموقع فعله، بالكلمات». مستند واحد يُحوّل أداة استخراج إلى شيء يستطيع نموذج لغة تشغيله نيابةً عنك.

إنها البيانات المُهيكلة نفسها تخدم ثلاث واجهات أمامية دفعةً واحدة: CLI لمستخدمي الطرفيّة، ومُلحق OCP/صوتي للاستخدام بلا يدين، وأداة LLM للتحكّم باللغة الطبيعية. ابنِ الواجهة البرمجية مرة واحدة؛ والبسها بثلاث طرق.

لماذا يهمّ هذا أكثر لمن لا يستطيعون رؤية الشاشة

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

إنه المبدأ نفسه وراء ألعابنا التي تُعطي الأولوية للصوت — المبنيّة للآذان، لا للعيون، مع اللاعبين المكفوفين بوصفهم الجمهور الأساسي لا فكرةً لاحقة. تطبيقات الصوت للمواقع تمدّ ذلك المبدأ من الألعاب إلى بقية الويب.

موقعًا تلو الآخر — لكن الاتجاه هو متصفّح صوتي

وإليك الجزء الصادق: لا يوجد اختصار شامل. لا تستطيع تفعيل الصوت في «الويب» دفعةً واحدة، لأن كل موقع تشابكه الخاص. لا بدّ من فعله لكل موقع — عميل واحد، ومهارة واحدة، ومجموعة نوايا واحدة مُصمَّمة بعناية في كل مرة. يبدو ذلك قيدًا، وهو كذلك على المدى القصير.

لكن انظر إلى أين تشير التراكمات. كل موقع نُغلّفه هو زاوية أخرى من الويب صارت الآن قابلة للوصول بالصوت وبسطر الأوامر. اربط ما يكفي منها معًا — مفردات بيانات وصفية مشتركة، وطبقة صوت مشتركة، ومجموعة متّسقة من نوايا «ابحث / افتح / اقرأ / شغّل / التالي» — ولن تعود تنظر إلى كومة من مهارات منفصلة. بل ستنظر إلى بدايات متصفّح صوتي: طريقة للتنقّل عبر الويب بالكلام، حيث المواقع الفردية مجرد وجهات تعرف بالفعل كيف تُجيب.

كانت رهانات عصر الجوّال أن الموقع الجدير بالاستخدام جدير بتطبيق. ورهاننا هو أن الموقع الجدير بالاستخدام جدير بـصوت. نحن نبنيها واحدًا تلو الآخر، بانفتاح، وكل واحد منها يجعل الويب أكثر قابلية للتصفّح قليلًا لمن تركتهم الويب البصرية وراءها.

هل تريد موقعًا بعينه مُحوّلًا إلى تطبيق صوتي أو تطبيق سطر أوامر — للإتاحة، أو لمنتجك، أو لمجرّد أنه يجب أن يوجد؟ لنتحدّث.