Ce binaire rust est une implémentation du premier programme « chatbot » ELIZA . Le programme original a été développé de 1964 à 1966 au laboratoire d'intelligence artificielle du MIT par Joseph Weizenbaum.
ELIZA simule la conversation en mettant en œuvre une correspondance de modèles et une méthodologie de substitution qui donne aux utilisateurs une illusion de compréhension de la part du programme. Les directives sur la façon de traiter les entrées sont fournies par des « scripts » (écrits à l'origine en MAD-slip, maintenant en json) qui permettent à ELIZA de s'engager dans un discours en suivant les règles du script. L'intention de Weizenbaum était de démontrer que la communication entre l'homme et la machine est superficielle. Le scénario le plus célèbre, DOCTOR, simule un psychothérapeute rogérien.
Weizenbaum, J. (1996), ELIZA - Un programme informatique pour l'étude de la communication en langage naturel entre l'homme et la machine , Communications de l'ACM, vol 9, numéro 1
Pour installer ce binaire rust, on peut le faire depuis les sources ou depuis crates.io. Dans les deux cas, vous devez avoir le compilateur Rust et Cargo installés sur votre système.
Installer eliza
depuis crates.io est assez simple avec cargo :
user@foo(~)$ cargo install eliza
Après avoir créé ce projet et l'avoir cloné sur votre ordinateur local, accédez au répertoire du projet et exécutez :
user@foo(eliza-rs)$ cargo build
Vous pouvez également éventuellement exécuter les tests unitaires pour vous assurer qu'ELIZA se comporte comme prévu :
user@foo(eliza-rs)$ cargo test
Pour démarrer une session ELIZA, vous devez fournir au binaire un chemin vers un script ELIZA. Ce script prend la forme d'un fichier json
. En supposant que vous ayez installé à partir des sources et que vous souhaitiez exécuter le célèbre programme DOCTOR, la commande que vous exécuteriez à partir de la racine du projet serait similaire à :
user@foo(eliza-rs)$ cargo run scripts/doctor.json
...
Si, à la place, vous avez installé à partir de crates.io, l'emplacement de doctor.json
sera différent. Par commodité, j'ai décidé de regrouper le script doctor.json
avec le binaire eliza sur crates.io. Pour chaque utilisateur, son emplacement sera légèrement différent dans le registre des caisses, je suggère donc de le déplacer vers un endroit plus mémorable avant de l'exécuter :
user@foo(~)$ cp .cargo/registry/src/[some_hash]/eliza-[ver]/scripts/doctor.json .
user@foo(~)$ eliza doctor.json
...
Démarrer Eliza avec Cargo puis quitter la session
La beauté de la méthodologie de conception d'ELIZA signifie que les rôles du programmeur et du dramaturge sont séparés. Une propriété importante d'ELIZA est qu'un script est une donnée - il ne fait pas partie du programme lui-même. Par conséquent, ELIZA ne se limite pas à un ensemble particulier de modèles de reconnaissance ou de réponses, ni même à une langue spécifique.
En tant que tel, les contributeurs peuvent décider d’améliorer le script doctor.json
original ou de créer complètement le leur à partir de zéro. Un exemple simple de script pirate a été inclus pour montrer à quel point il en faut peu pour commencer à créer quelque chose de soigné.
Plus d'informations sur la structure d'un script peuvent être trouvées dans la documentation du module script
sur doc.rs.
En raison de la nature quelque peu déterministe d'ELIZA, vous pouvez écrire des tests unitaires pour évaluer les règles de script. Par exemple, dans tests/conversation_test.rs
, vous pouvez ajouter ce qui suit :
# [ test ]
fn your_test ( ) {
let mut e = Eliza :: new ( "scripts/your_script.json" ) . unwrap ( ) ;
assert_eq ! ( "bar" , e.respond ( "foo" ) ) ;
}
Où « foo » est la saisie de l'utilisateur dans ELIZA et « bar » est la réponse.
Il est également important de noter qu'ELIZA produit une sortie de journalisation. Pour observer ces journaux pendant l'exécution du programme, démarrez le binaire avec la variable d'environnement RUST_LOG=eliza
.