هذا الثنائي الصدئ هو تطبيق لبرنامج "chatbot" المبكر ELIZA . تم تطوير البرنامج الأصلي من عام 1964 إلى عام 1966 في مختبر الذكاء الاصطناعي بمعهد ماساتشوستس للتكنولوجيا على يد جوزيف وايزنباوم.
يحاكي ELIZA المحادثة من خلال تنفيذ مطابقة الأنماط ومنهجية الاستبدال التي تمنح المستخدمين وهم الفهم من جانب البرنامج. يتم توفير التوجيهات حول كيفية معالجة المدخلات من خلال "النصوص البرمجية" (المكتوبة في الأصل بلغة MAD-Slip، والآن بتنسيق json) والتي تسمح لـ ELIZA بالمشاركة في الخطاب باتباع قواعد النص. كانت نية وايزنباوم هي إثبات أن التواصل بين الإنسان والآلة سطحي. السيناريو الأكثر شهرة، DOCTOR، يحاكي معالجًا نفسيًا روجيريًا.
Weizenbaum، J. (1996)، ELIZA – برنامج كمبيوتر لدراسة التواصل باللغة الطبيعية بين الإنسان والآلة ، اتصالات ACM، المجلد 9، العدد 1
لتثبيت ثنائي الصدأ هذا، يمكن للمرء القيام بذلك من المصدر أو من صناديق.io. في كلتا الحالتين، تحتاج إلى تثبيت مترجم الصدأ والحمولة على نظامك.
يعد تثبيت eliza
من crates.io أمرًا بسيطًا للغاية بالنسبة للبضائع:
user@foo(~)$ cargo install eliza
بعد تفرع هذا المشروع واستنساخه على جهازك المحلي، انتقل إلى دليل المشروع وقم بتشغيل:
user@foo(eliza-rs)$ cargo build
قد ترغب أيضًا في تشغيل اختبارات الوحدة بشكل اختياري للتأكد من أن ELIZA تعمل كما هو متوقع:
user@foo(eliza-rs)$ cargo test
لبدء جلسة ELIZA، يجب عليك تزويد الملف الثنائي بمسار إلى برنامج ELIZA النصي. يأخذ هذا البرنامج النصي شكل ملف json
. بافتراض أنك قمت بالتثبيت من المصدر وأردت تشغيل برنامج DOCTOR الشهير، فإن الأمر الذي ستقوم بتشغيله من جذر المشروع سيكون مشابهًا لما يلي:
user@foo(eliza-rs)$ cargo run scripts/doctor.json
...
إذا قمت بالتثبيت من crates.io بدلاً من ذلك، فسيكون موقع doctor.json
مختلفًا. من باب الراحة، قررت أن أقوم بتجميع البرنامج النصي doctor.json
مع برنامج eliza الثنائي الموجود على الصناديق.io. بالنسبة لكل مستخدم، سيكون موقعه مختلفًا قليلاً داخل سجل الصناديق، لذا أقترح نقله إلى مكان لا يُنسى قبل التشغيل:
user@foo(~)$ cp .cargo/registry/src/[some_hash]/eliza-[ver]/scripts/doctor.json .
user@foo(~)$ eliza doctor.json
...
بدء إليزا بالحمولة ثم مغادرة الجلسة
إن جمال منهجية تصميم ELIZA يعني أن دور المبرمج والكاتب المسرحي منفصلان. من الخصائص المهمة لـ ELIZA أن البرنامج النصي عبارة عن بيانات - وليس جزءًا من البرنامج نفسه. وبالتالي، لا تقتصر ELIZA على مجموعة معينة من أنماط التعرف أو الاستجابات، ولا حتى على أي لغة محددة.
على هذا النحو، قد يقرر المساهمون تحسين النص الأصلي doctor.json
أو إنشاء نص خاص بهم بالكامل من البداية. تم تضمين مثال بسيط لنص قرصان لإظهار مدى ضآلة الحاجة لبدء إنشاء شيء أنيق.
يمكن العثور على مزيد من المعلومات حول بنية البرنامج النصي في الوثائق الخاصة بوحدة script
على doc.rs.
نظرا لطبيعة ELIZA الحتمية إلى حد ما، يمكنك كتابة اختبارات الوحدة لتقييم قواعد البرنامج النصي. على سبيل المثال، في tests/conversation_test.rs
، يمكنك إضافة ما يلي:
# [ test ]
fn your_test ( ) {
let mut e = Eliza :: new ( "scripts/your_script.json" ) . unwrap ( ) ;
assert_eq ! ( "bar" , e.respond ( "foo" ) ) ;
}
حيث "foo" هو مدخلات المستخدمين إلى ELIZA، و"bar" هو الرد.
من المهم أيضًا ملاحظة أن ELIZA تنتج مخرجات التسجيل. لمراقبة هذه السجلات أثناء تنفيذ البرنامج، ابدأ الملف الثنائي باستخدام متغير البيئة RUST_LOG=eliza
.