用 Leaf 编程 AI/与外部程序通信
让 Leaf 与其他程序交换数据可能很困难。本文作者 Thomas Messerschmidt 与他的机器人 Robot Betty9(参见 http://www.myspace.com/robotbetty9)一起创建了一种非常简单但非常有效的方法,使 Leaf 可以与几乎任何外部(对 LISP 而言外部)程序进行通信。
该方法包括通过创建和销毁小型文本 (.txt) 文件在 Leaf/LISP 和外部世界之间传递文本消息。它最初是为了让 Leaf 使用标准的 ALICE-BASED(ProgramD)聊天机器人扩展其 AI 而编写的。
第一部分包括函数 “sendchatout2chatbot”。它将数据写入名为 “in.txt” 的“in” 文件中。
第二部分包括函数 “readchatbotfile”。它读取来自应用程序(在本例中为使用名为 “out.txt” 的文件的聊天机器人)的返回文本。
- 聊天机器人接口代码开始 -----------------------------------------
- 聊天机器人接口代码开始 -----------------------------------------
- 聊天机器人接口代码开始 -----------------------------------------
- 代码作者:Thomas Messerschmidt(请注明作者。链接回 Betty9 会很好。)
(defun sendchatout2chatbot ()
(print *text-phrase*) (setf mytext *text-phrase* ) (setf mytext (subseq mytext 6)) (with-open-file (textin "C:/in.txt" :direction :output :if-exists :supersede) (print mytext textin) ) (setf *text-phrase* nil) )
(defun readchatbotfile ()
(with-open-file (stream "C:/out.txt") (do ((line (read-line stream nil) (read-line stream nil))) ((null line)) (setf x1 line))) (sapi-tts x1) (delete-file "C:/out.txt") ); and then delete the file
(defun getchatin () ; tts 返回的聊天机器人内容,然后删除文件
(if (probe-file "C:/out.txt") (readchatbotfile)) ) ; Read the file if there is a file to be read.
- 聊天机器人接口代码结束 -------------------------------------------
- 聊天机器人接口代码结束 -------------------------------------------
- 聊天机器人接口代码结束 -------------------------------------------
总结一下:1. 用户向 Leaf 提问 2. Leaf 通过 sendchatout2chatbot 函数将问题发送给聊天机器人,该函数写入 “C:/in.txt” 3. 聊天机器人读取 “C:/in.txt” 中提出的问题,然后删除该文件。4. 聊天机器人将对问题的回答写入文件 “C:/out.txt” 5. 当 Leaf 看到存在 C:/out.txt 文件时,它会使用 readchatbotfile 函数读取该文件,该函数还使用 Microsoft 标准的 TTS(文本转语音)SAPI 5.x 将其朗读出来。6. Leaf 随后删除文件 “C:/out.txt”。