这个 Rust 二进制文件是早期“聊天机器人”程序ELIZA的实现。最初的程序是由 Joseph Weizenbaum 于 1964 年至 1966 年在麻省理工学院人工智能实验室开发的。
ELIZA 通过实施模式匹配和替代方法来模拟对话,让用户产生一种理解程序部分的错觉。有关如何处理输入的指令由“脚本”提供(最初以 MAD-Slip 编写,现在以 json 编写),它允许 ELIZA 通过遵循脚本规则参与对话。魏森鲍姆的目的是证明人与机器之间的交流是肤浅的。最著名的剧本《DOCTOR》模拟了罗杰斯心理治疗师。
Weizenbaum, J. (1996), ELIZA - 用于研究人与机器之间自然语言通信的计算机程序,ACM 通信,第 9 卷,第 1 期
要安装这个 rust 二进制文件,可以从源代码或 crates.io 进行安装。无论哪种情况,您都需要在系统上安装 Rust 编译器和 Cargo。
使用 Cargo 从 crates.io 安装eliza
非常简单:
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
脚本与 crates.io 上的 eliza 二进制文件捆绑在一起。对于每个用户,它在 crates 注册表中的位置会略有不同,因此我建议在运行之前将其移动到更容易记住的地方:
user@foo(~)$ cp .cargo/registry/src/[some_hash]/eliza-[ver]/scripts/doctor.json .
user@foo(~)$ eliza doctor.json
...
让 eliza 带着货物开始,然后离开会话
ELIZA 设计方法的美妙之处在于程序员和剧作家的角色是分开的。 ELIZA 的一个重要特性是脚本是数据 - 它不是程序本身的一部分。因此,ELIZA 不限于一组特定的识别模式或响应,甚至不限于任何特定的语言。
因此,贡献者可能决定改进原始的doctor.json
脚本或完全从头开始创建自己的脚本。其中包含了一个简单的盗版脚本示例,以展示开始创建一些简洁的东西是多么简单。
有关脚本结构的更多信息可以在 doc.rs 上的script
模块文档中找到。
由于 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
启动二进制文件。