跳转到内容

用 Leaf 编程 AI/与外部程序通信

来自 Wikibooks,开放世界中的开放书籍

让 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”。

华夏公益教科书