Этот двоичный файл ржавчины является реализацией ранней программы-чат-бота ELIZA . Оригинальная программа была разработана с 1964 по 1966 год в Лаборатории искусственного интеллекта Массачусетского технологического института Джозефом Вайценбаумом.
ELIZA имитирует разговор, реализуя сопоставление с образцом и методологию замены , которая дает пользователям иллюзию понимания со стороны программы. Директивы о том, как обрабатывать вводимые данные, предоставляются в виде «скриптов» (первоначально написанных в MAD-Slip, теперь в формате json), которые позволяют ELIZA участвовать в обсуждении, следуя правилам сценария. Целью Вайценбаума было продемонстрировать, что общение между человеком и машиной поверхностно. Самый известный сценарий «ДОКТОР» имитирует роджерианского психотерапевта.
Вайзенбаум, Дж. (1996), ELIZA - Компьютерная программа для изучения естественного языка общения между человеком и машиной , Связь ACM, том 9, выпуск 1
Установить этот двоичный файл ржавчины можно из исходного кода или из crates.io. В любом случае вам необходимо, чтобы в вашей системе были установлены компилятор ржавчины и груз.
Установить eliza
с сайта crates.io с помощью Cargo довольно просто:
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 на crates.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
.