وضع Think-Aloud
يتحدث المعلّقون أثناء عملهم ويخزّن Potato النص التفريغي الحرفي بوصفه المبرّر. يعمل تحويل الكلام إلى نص محلياً بالكامل عبر faster-whisper، فلا يغادر الصوت الجهاز ولا يدخل في المسار أي واجهة سحابية أو LLM.
جديد في الإصدار v2.7.0
قبل نماذج اللغة الكبيرة، كان بروتوكول التفكير بصوت مسموع هو المعيار الذهبي لفهم كيفية اتخاذ الحكم، ولم ينجُ قط من الاصطدام بأدوات التعليق التوضيحي. يتيح وضع Think-Aloud للمعلّقين أن يتحدثوا ببساطة أثناء عملهم.
يُخزَّن النص التفريغي الحرفي بوصفه المبرّر، وبلا تلخيص عن قصد، لأن إعادة صياغة بروتوكول التفكير بصوت مسموع تلوّث الأثر الذي تحاول جمعه. ويمكن تثبيت التصنيفات بالصوت عبر صيغ لفظية محدّدة يكشفها محلّل قائم على القواعد، بلا أي LLM في أي موضع من المسار.
يعمل تحويل الكلام إلى نص محلياً بالكامل عبر faster-whisper، وهو يعمل بزمن حقيقي على المعالج مع نموذج tiny.en بحجم 39 ميغابايت. لا يغادر الصوت الجهاز، ولا توجد واجهة سحابية تُستدعى ولا فاتورة تُدفع لكل رمز.
Note: يفرّغ Think-Aloud كلام معلّقيك. أما إن أردت التعليق على نصوص تفريغية لديك مسبقاً، من Whisper أو من واجهة تعرّف كلام سحابية أو من ترجمات منزّلة، فتلك ميزة منفصلة: راجع صيغ النصوص التفريغية. ويقع الالتباس بين الاثنتين لأن كلتيهما تتعلق بـ Whisper.

تسجيل سلسلة التفكير البشرية
الغاية ليست جمع المبرّرات وحدها. يلتقط Think-Aloud كيف يستدل شخص فعلاً وصولاً إلى تصنيف، فتستطيع وضع سلسلة التفكير البشرية تلك بإزاء سلسلة تفكير نموذج على العنصر نفسه.
يقسّم تعليق مكافأة العملية في Potato كيفية استدلال النموذج، خطوة بخطوة. ويلتقط Think-Aloud كيفية استدلال الإنسان. وكلاهما سطح التقاط، ووضعهما جنباً إلى جنب على العنصر نفسه هو حيث تظهر الاختلافات المثيرة للاهتمام.
كيف يعمل
- ينقر المعلّق على 🎤 فكّر بصوت مسموع ويتحدث بحرية.
- يُلتقط الصوت في مقاطع كاملة مدتها ست ثوانٍ ويُفرَّغ محلياً.
- ولتثبيت تصنيف بالصوت، يستخدم إحدى الصيغ اللفظية المقبولة:
- "I label this Polite" / "I'd call it neutral"
- "My answer is impolite"
- "Final answer: polite" / "I go with neutral"
- يحدّد الكشف الخيار المطابق في الواجهة تلقائياً، فينطلق مسار الحفظ المعتاد، وتؤكد الشارة: سُمِع: Impolite ✓. وقول عبارة جديدة لاحقاً يغيّر التصنيف، فالتثبيت الأخير هو المعتمد.
- مع
require_spoken_label: true، يؤدي الضغط على التالي دون تصنيف مثبَّت إلى تنبيه لمرة واحدة يعرض الصيغة المتوقعة. ويمرّ الضغط الثاني على التالي، والنقر على التصنيفات يعمل دائماً.
ويُتجاهل كل ما يُذكر أثناء التفكير. فعبارة "This seems polite, but…" لا تثبّت شيئاً. ولا تثبّت إلا الصيغ المحدّدة، وهو ما يجعل التحليل القائم على القواعد كافياً. وتُستوعب أخطاء السماع بمطابقة تصنيفات ضبابية، فتُحلّ "in polite" إلى Impolite.
الإعداد
pip install faster-whisper # local STT; first recording downloads the model (~39 MB)يحتاج المتصفح إلى إذن الميكروفون. ويُحتسب localhost سياقاً آمناً.
التهيئة
thinkaloud:
enabled: true
schema: politeness # scheme whose labels can be spoken (default: first radio)
stt: auto # faster_whisper | mock | auto
model: tiny.en # tiny.en is CPU real-time; base.en is sturdier
chunk_seconds: 6 # recording chunk length
require_spoken_label: true # nudge on Next without a committed label
# stems: # override accepted phrasing regexes (advanced)
# fillers: [um, uh, hmm, i guess, maybe]
# language: en| الخيار | الافتراضي | الوصف |
|---|---|---|
stt | auto | faster_whisper (محلي)، أو mock (للاختبارات والتطوير)، أو auto الذي يختار faster-whisper ويعطي خطأ مفيداً إن كان غائباً. |
model | tiny.en | أي معرّف نموذج من faster-whisper. |
chunk_seconds | 6 | كل مقطع ملف صوتي كامل. |
stems | مضمّنة | جذور التعابير النمطية للصيغ المقبولة، ويلتقط كل منها الكلمات التالية له. |
fillers | um، uh، hmm، … | المعجم المستخدم في عدّاد التردد. |
require_spoken_label | true | تنبيه لمرة واحدة عند زر التالي حين لا يكون شيء قد ثُبّت. |
ما تحصل عليه
- تدفقات مبرّرات حرفية موائمة لكل (معلّق، عنصر)، مع فصل عبارة التصنيف عنها. والنص التفريغي بعد حذف عبارة التثبيت هو المبرّر.
- إشارات تردد حتمية: أعداد المقاطع الصامتة وأعداد كلمات الحشو على معجم قابل للتهيئة، محسوبة بالحساب لا بالنماذج.
- صفحة مراجعة على
/thinkaloud/review(للمشرف) تضم نص كل جلسة، والتصنيف المثبَّت صوتياً، والثقة، وإحصاءات التردد. - التعليق التوضيحي دون استخدام اليدين كأثر جانبي، بما في ذلك إتاحة حقيقية وتخفيف لإصابات الإجهاد المتكرر.
البيانات وواجهة برمجة التطبيقات
تُحفظ النصوص التفريغية في {output_annotation_dir}/thinkaloud/transcripts.jsonl (إلحاق فقط، سجل واحد لكل مقطع).
| نقطة النهاية | الطريقة | الصلاحية | الغرض |
|---|---|---|---|
/thinkaloud/api/chunk | POST | جلسة | مقطع صوتي متعدد الأجزاء ← نص تفريغي + كشف |
/thinkaloud/api/text | POST | جلسة | مقطع نصي (مسار بلا صوت) |
/thinkaloud/api/state | GET | جلسة | تجميع الجلسة لعنصر واحد |
/thinkaloud/review | GET | مشرف | صفحة مراجعة النصوص التفريغية |
/thinkaloud/api/export | GET | مشرف | كل الجلسات بصيغة JSON |
ملاحظات التصميم
- يعمل المحلّل على نافذة متحركة تضم آخر مقطعين، فتُكشف العبارات التي تقع على حدّ فاصل بين مقطعين.
- مطابقة التصنيف تكون تامة، ثم بالبادئة، ثم عبر
difflibعند عتبة 0.8، مع تفضيل المطابقات التامة. فلا تتصادم "polite" ضبابياً مع "Impolite" أبداً. - تعني إضافة خلفية جديدة لتحويل الكلام إلى نص اشتقاق صنف فرعي من
STTBackendفيpotato/thinkaloud/stt.pyوتسجيله فيcreate_stt.
قراءات إضافية
- تعليق مكافأة العملية — سطح سلسلة التفكير من جهة النموذج
- تتبع السلوك — تحليلات التوقيت
- مراقبة الجودة
- الوثائق المصدرية