Este binario de Rust es una implementación del primer programa de 'chatbot' ELIZA . El programa original fue desarrollado entre 1964 y 1966 en el Laboratorio de Inteligencia Artificial del MIT por Joseph Weizenbaum.
ELIZA simula la conversación implementando coincidencia de patrones y una metodología de sustitución que brinda a los usuarios una ilusión de comprensión por parte del programa. Las directivas sobre cómo procesar la entrada las proporcionan 'scripts' (escritos originalmente en MAD-slip, ahora en json) que permiten a ELIZA participar en el discurso siguiendo las reglas del script. La intención de Weizenbaum era demostrar que la comunicación entre hombre y máquina es superficial. El guión más famoso, DOCTOR, simula a un psicoterapeuta rogeriano.
Weizenbaum, J. (1996), ELIZA - Un programa informático para el estudio de la comunicación en lenguaje natural entre el hombre y la máquina , Communications of the ACM, vol 9, número 1
Para instalar este binario de Rust, se puede hacerlo desde la fuente o desde crates.io. En cualquier caso, necesita tener el compilador Rust y la carga instalados en su sistema.
Instalar eliza
desde crates.io es bastante sencillo con cargo:
user@foo(~)$ cargo install eliza
Después de bifurcar este proyecto y clonarlo en su máquina local, navegue hasta el directorio del proyecto y ejecute:
user@foo(eliza-rs)$ cargo build
Es posible que también desee ejecutar opcionalmente las pruebas unitarias para asegurarse de que ELIZA se comporte como se espera:
user@foo(eliza-rs)$ cargo test
Para iniciar una sesión de ELIZA, debe proporcionar al binario una ruta a un script de ELIZA. Este script toma la forma de un archivo json
. Suponiendo que haya instalado desde el código fuente y desee ejecutar el famoso programa DOCTOR, el comando que ejecutaría desde la raíz del proyecto sería similar a:
user@foo(eliza-rs)$ cargo run scripts/doctor.json
...
Si, en cambio, instaló desde crates.io, la ubicación de doctor.json
será diferente. Por conveniencia, decidí incluir el script doctor.json
con el binario eliza en crates.io. Para cada usuario, su ubicación será ligeramente diferente dentro del registro de cajas, por lo que sugeriría moverlo a algún lugar más memorable antes de ejecutar:
user@foo(~)$ cp .cargo/registry/src/[some_hash]/eliza-[ver]/scripts/doctor.json .
user@foo(~)$ eliza doctor.json
...
Empezando a Eliza con la carga y luego saliendo de la sesión.
La belleza de la metodología de diseño de ELIZA significa que el papel del programador y del dramaturgo están separados. Una propiedad importante de ELIZA es que un script es información, no forma parte del programa en sí. Por lo tanto, ELIZA no se limita a un conjunto particular de patrones o respuestas de reconocimiento, ni siquiera a ningún lenguaje específico.
Como tal, los contribuyentes pueden decidir mejorar el script doctor.json
original o crear el suyo propio desde cero. Se ha incluido un ejemplo sencillo de guión pirata para mostrar lo poco que se necesita para empezar a crear algo interesante.
Puede encontrar más información sobre la estructura de un script en la documentación del módulo script
en doc.rs.
Debido a la naturaleza algo determinista de ELIZA, puedes escribir pruebas unitarias para evaluar las reglas del script. Por ejemplo, en tests/conversation_test.rs
, podrías agregar lo siguiente:
# [ test ]
fn your_test ( ) {
let mut e = Eliza :: new ( "scripts/your_script.json" ) . unwrap ( ) ;
assert_eq ! ( "bar" , e.respond ( "foo" ) ) ;
}
Donde 'foo' es la entrada del usuario a ELIZA y 'bar' es la respuesta.
También es importante señalar que ELIZA produce productos madereros. Para observar estos registros durante la ejecución del programa, inicie el binario con la variable de entorno RUST_LOG=eliza
.