Este binário ferrugem é uma implementação do primeiro programa 'chatbot' ELIZA . O programa original foi desenvolvido de 1964 a 1966 no Laboratório de Inteligência Artificial do MIT por Joseph Weizenbaum.
ELIZA simula conversas implementando correspondência de padrões e uma metodologia de substituição que dá aos usuários a ilusão de compreensão por parte do programa. As diretivas sobre como processar a entrada são fornecidas por 'scripts' (escritos originalmente em MAD-Slip, agora em json) que permitem que ELIZA se envolva no discurso seguindo regras de script. A intenção de Weizenbaum era demonstrar que a comunicação entre homem e máquina é superficial. O roteiro mais famoso, DOCTOR, simula um psicoterapeuta rogeriano.
Weizenbaum, J. (1996), ELIZA - Um programa de computador para o estudo da comunicação em linguagem natural entre homem e máquina , Communications of the ACM, vol 9, edição 1
Para instalar este binário ferrugem, pode-se fazê-lo a partir do código-fonte ou em crates.io. Em ambos os casos, você precisa ter o compilador de ferrugem e o cargo instalados em seu sistema.
Instalar eliza
do crates.io é bastante simples com carga:
user@foo(~)$ cargo install eliza
Após bifurcar este projeto e cloná-lo em sua máquina local, navegue até o diretório do projeto e execute:
user@foo(eliza-rs)$ cargo build
Você também pode executar opcionalmente os testes de unidade para garantir que ELIZA esteja se comportando conforme o esperado:
user@foo(eliza-rs)$ cargo test
Para iniciar uma sessão ELIZA, você deve fornecer ao binário um caminho para um script ELIZA. Este script assume a forma de um arquivo json
. Supondo que você tenha instalado a partir do código-fonte e queira executar o famoso programa DOCTOR, o comando que você executaria a partir da raiz do projeto seria semelhante a:
user@foo(eliza-rs)$ cargo run scripts/doctor.json
...
Se, em vez disso, você instalou a partir de crates.io, a localização de doctor.json
será diferente. Por conveniência, decidi agrupar o script doctor.json
com o binário eliza em crates.io. Para cada usuário, sua localização será um pouco diferente no registro de crates, então sugiro movê-lo para algum lugar mais memorável antes de executar:
user@foo(~)$ cp .cargo/registry/src/[some_hash]/eliza-[ver]/scripts/doctor.json .
user@foo(~)$ eliza doctor.json
...
Iniciando eliza com carga e saindo da sessão
A beleza da metodologia de design da ELIZA significa que os papéis do programador e do dramaturgo estão separados. Uma propriedade importante do ELIZA é que um script é um dado – não faz parte do programa em si. Conseqüentemente, ELIZA não está restrito a um conjunto particular de padrões ou respostas de reconhecimento, nem mesmo a qualquer idioma específico.
Como tal, os contribuidores podem decidir melhorar o script doctor.json
original ou criar o seu próprio script do zero. Um exemplo simples de script pirata foi incluído para mostrar quão pouco é necessário para começar a criar algo interessante.
Mais informações sobre a estrutura de um script podem ser encontradas na documentação do módulo script
em doc.rs.
Devido à natureza um tanto determinística do ELIZA, você pode escrever testes unitários para avaliar regras de script. Por exemplo, em tests/conversation_test.rs
, você pode adicionar o seguinte:
# [ test ]
fn your_test ( ) {
let mut e = Eliza :: new ( "scripts/your_script.json" ) . unwrap ( ) ;
assert_eq ! ( "bar" , e.respond ( "foo" ) ) ;
}
Onde 'foo' é a entrada do usuário para ELIZA e 'bar' é a resposta.
Também é importante observar que ELIZA produz saída de registro. Para observar esses logs durante a execução do programa, inicie o binário com a variável de ambiente RUST_LOG=eliza
.