65.9K
CodeProject 正在变化。 阅读更多。
Home

开发 AI 聊天机器人

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.81/5 (36投票s)

2005年11月26日

CPOL

17分钟阅读

viewsIcon

198159

本指南将帮助您编程自己的聊天机器人。

Sample Image - Title.jpg

引言

人工智能 (AI) 技术提供开发计算机程序的技巧,这些程序可以执行各种任务,模拟人类解决问题的智能方式。人类在日常生活中解决的问题种类繁多,领域各不相同。尽管领域不同,方法也不同,但 AI 技术提供了一套形式化方法来表示问题以及解决问题的技术。AI 技术为我们提供的是上述句子中所描述的内容。基于此,很难精确定义“人工智能”一词。

聊天机器人

如您所知,聊天机器人是一种聊天机器人,它可以理解您说的话,进行分析并给出合适的响应。它被认为是 AI 开发中的一个严肃分支,因为编程聊天机器人的目的是帮助人们获取信息。例如:

  • 销售聊天机器人: 这些机器人可以帮助人们了解商品价格和优惠。
  • 支持聊天机器人: 您可能会在提供产品和服务的网站上找到这类聊天机器人。
  • 服务台(信息台)聊天机器人: 您可能会在大型图书馆、网站或程序中找到这些。
  • 娱乐聊天机器人: 这些机器人是为了娱乐和聊天而设计的。

1966年,约瑟夫·维森鲍姆(Joseph Weizenbaum)创造了第一个聊天机器人 Eliza。在本文中,我们将讨论如何构建自己的聊天机器人,如何提高其理解能力,如何让您的“机器人”能够执行帮助您日常生活的操作,最后,我们还将讨论一些使您的聊天机器人看起来几乎像人类的技巧和窍门。我们将专注于逻辑,因此任何程序员都可以将逻辑编程到任何编程语言中。

构建您的聊天机器人

在构建聊天机器人之前,您必须了解任何聊天机器人都包含三个主要部分:

  • 输入文本: 在这里您将输入您想对聊天机器人说的话。
  • 发送按钮: 这允许您发送您的输入以供分析,然后再获得输出。
  • 输出文本: 在这里您的聊天机器人将给出响应。

最重要的部分是发送按钮,因为它包含了在将结果复制到输出之前分析您输入的全部过程。因此,我将发送按钮称为人工智能基础 (AI Base)。

AI 基础原则

任何对话都有开始和结束,比如“你好”-“嘿”-“早上好”-“你好吗?”等等。当两个人开始交谈时,我们总是听到这些句子。也有其他情况不需要这些句子作为开始,比如“请问,现在几点了?”等等。另一方面,我们听到其他句子,比如,“我得走了”-“再见,回头见”-“我晚点给你打电话”-“期待见到你”等等。这些句子通常在对话结束时使用。

Screenshot - T1Pic1.jpg

如您所见,您的聊天机器人可能无法理解的输入可能性是无限的。因此,我们必须将任何对话归类为多个主题和表达。我们还需要为每个主题和每个表达式创建文件,其中包含所有相关的词语。参见图 1。现在您的聊天机器人拥有了数据库,可以理解用户输入并给出合适的输出。然而,这并不完全准确,因为有些句子虽然有相似的词语,但含义却大不相同。

示例

“我恨你。” 这会让你的聊天机器人感到生气。

“我恨我自己。” 这也可能让你的聊天机器人感到生气,因为它在寻找“恨”这个词。这是错误的,因为这个短语并没有表达对聊天机器人的仇恨;相反,用户是针对自己。所以聊天机器人应该感到难过或惊讶,而不是生气。

因此,您必须构建搜索引擎以不同的方式搜索用户输入,以确保您的聊天机器人能够很好地理解用户输入并给出合适的响应。我们将讨论这些搜索引擎,我称之为特殊搜索引擎和矩阵搜索引擎。

特殊和矩阵搜索引擎

特殊引擎在数据库中存储的句子和用户输入之间进行比较,而矩阵引擎在数据库中存储的词语和用户输入之间进行比较。每个文件有两种类型:矩阵数据库和特殊数据库。每种数据库都使用其引擎。

文件:“笑”

...到特殊“笑”数据库

...到矩阵“笑”数据库

以下示例显示了两种引擎之间的区别。

Screenshot - T1Pic2.jpg

正如您在图 2 中看到的,矩阵引擎未能给出正确答案,因为它在查找词语。您可能会认为矩阵引擎是无用的,但实际上并非如此。正如我之前所说,您无法将 AI 基础填满所有可能性,因此矩阵引擎对于覆盖比特殊引擎更多的可能性非常重要。

Screenshot - T1Pic3.jpg

图 3 显示了矩阵引擎在理解三个含义相同的不同句子中的重要性。匹配仅与矩阵数据库中的一条记录匹配。这意味着特殊引擎和矩阵引擎是互补的。关于这些引擎,您应该了解的最后一件事是,特殊引擎是矩阵引擎的一部分(属于),因此您应该按以下顺序排列搜索步骤:

  • 第一步搜索: 特殊引擎。如果找到结果,则给出输出。否则,使用矩阵引擎搜索。
  • 第二步搜索: 矩阵引擎。如果找到结果,则给出输出。否则,搜索单个词文件。

如果您按照这些搜索步骤进行操作,您就不会遇到图 2 中矩阵引擎的问题,也不会遇到图 3 中特殊引擎的问题。在矩阵引擎和特殊引擎都未能找到任何匹配项后,您可能会想知道单个词文件是什么。单个词文件是一个只包含用户输入中可能找到的一个词的数据库。因此,您的聊天机器人可能会用与用户输入相关的内容回复,但准确性较低。

特殊引擎、矩阵引擎和单个词文件准确性

  • 如果在特殊数据库中找到结果,其生成合适输出的准确性约为 95%。
  • 如果在矩阵数据库中找到结果,其生成合适输出的准确性约为 65%。
  • 如果在单个词数据库中找到结果,其生成合适输出的准确性约为 15%。

您可以通过为每个文件和单个词数据库增加矩阵和特殊数据库的记录来提高聊天机器人的响应准确性。

聊天机器人响应

现在我将讨论聊天机器人如何根据用户输入进行响应并给出合适的答案。我还将研究如何让您的聊天机器人对同一个输入给出多个答案。这将使您的聊天机器人更加真实、更像人类、更合理。每个文件都有两个数据库:特殊数据库和矩阵数据库。每个数据库还包含两个字段:

  • 第一个字段:“请求” 用户输入与此字段中记录的数据进行比较。参见图 2 和图 3。
  • 第二个字段:“响应” 聊天机器人的输出从此字段中记录的数据中获取。

Screenshot - T1Pic4.jpg

在图 4 中,同一个输入有两个输出。此外,一行可以包含多个请求和响应值。这减少了记录的数量,因为它减少了一个行中重复(相关)的句子。

如何让您的聊天机器人以不同方式响应

为此,您必须创建一个初始值为一的变量。每次聊天机器人给出响应时,将变量值加 1。当请求值与用户输入匹配时,输出等于具有变量号的句子。如果变量大于最后一个句子编号,则将此变量设置为 1,并将输出设置为第一个句子。否则,将变量值加 1。

Screenshot - T1Pic5.jpg

图 5 显示了如何将相关记录合并为一条记录。这也会导致将响应合并为一条记录,从而使您的聊天机器人以不同的方式响应。

误解

假设,在尝试了矩阵和特殊搜索引擎后,您的聊天机器人没有找到与用户输入相似的记录。这意味着您的聊天机器人无法理解用户输入。也许用户输入错误,或者您的 AI 数据库很差。您需要创建一个数据库,您的聊天机器人可以使用该数据库来生成关于误解的句子。

Example:

  I don't understand. 
  Please explain.

此外,您可以通过插入不涉及理解或误解的句子来改进数据库。这些句子会给用户留下深刻印象,因为它们会让您的聊天机器人显得理解。

 

Example:

  Wait, I got a phone call. 

  Oh, my keyboard hung again.

其他引擎

先前事件引擎

 

当您问某人某事,然后又问他们一次时,他们会说:“我告诉你了……等等。”这意味着他的/她的思维记录了关于同一主题的先前对话,这使他/她说了这句话。先前事件引擎功能模拟了您的聊天机器人的相同行为。

Screenshot - T1Pic6.jpg

图 6 显示了先前事件引擎的工作原理。您可能注意到此引擎有两个数据库:请求数据库,用于记录用户输入(如果没有重复输入),以及响应数据库,您的聊天机器人从中获取一个表达重复输入的随机句子。

自动对话引擎

如果用户在特定时间内没有聊天,此引擎会自动响应。您还可以通过让聊天机器人在用户键入消息时等待来改进此引擎。假设两分钟是此引擎工作的定义时间段。如果时间到了,您的聊天机器人将从自动对话数据库发送响应。

Example: 

  chatbot: Where did you go?

  chatbot: Are you there?

  chatbot: I'm bored from talking to my self.

AM-ARE 函数引擎

 

此引擎被认为是任何聊天机器人的基础设施。AM-ARE 函数引擎的主要任务是识别用户句子输入中的发音。它还应该识别一些动词,并提供其所有时态的发音,例如“to be”、“to have”和“to do”的动词,以及情态动词。然后,它在响应句子中使用它们。为了理解我的意思,让我们举个例子:

用户说,“你是可疑的。”如果我们看这句话,我们会发现两个重要组成部分:1- 代词“你”,2- 动词。首先,机器人识别并排除句子中的这些内容。然后它开始替换句子中的一些代词,如 I/We、You、My/Our、Your、Me/Us、You、Myself、Yourself、Ourselves、Yourselves 等。它还替换它们的动词,如 Am、Are、Was、Were 等。您也可以在句子中添加一小部分,例如“你为什么这么认为?”这会产生最终输出:“你为什么认为我可疑?”您也可以将句子转换为问题,例如“我可疑吗?”

说服性聊天机器人

谚语

添加谚语的优点是它们可以方便地回应许多句子。它还能使您的聊天机器人显得更明智。比如,用户在谈论麻烦,机器人可以回答:“别惹麻烦,直到麻烦惹你。”如果他在谈论贪婪,“一鸟在手胜过双鸟在林。”如您所知,有许多谚语适合许多主题。

提高聊天机器人的智能

您的聊天机器人的智能取决于两个因素:良好的逻辑和包含大量记录的数据库。由于最重要的因素是数据库,因此在与聊天机器人聊天时,我应该编程一些东西来增加我的聊天机器人数据库。我将称之为学习引擎。学习引擎的目的是让您的聊天机器人理解用户提供的信息,将其记录在数据库中,然后在用户询问时回忆起来。例如……

  "WHAT IS THE COLOR OF THE SKY?  

  OF COURSE, THE SKY COLOR IS BLUE  BUT SOMETIMES
  IT SEEMS TO WHITE AS THERE IS SOME CLOUDS 

在前面的例子中,聊天机器人给出了正确的答案。示例:(当您的聊天机器人不知道答案时)

  HOW MANY FINGERS IN YOUR  HAND? 

  WHY YOU DON'T ANSWER  THIS DIFFICULT QUESTION, 
  I'D LIKE TO HEAR THE ANSWER FROM YOU?  

  YOU HAVE 5 FINGERS IN  ONE HAND 

  BEFORE GOING TO SAVE  THAT IN MY MIND, IS THAT 
  THE ANSWER OF YOUR QUESTION?  

  YES 

  I APPRECIATE TEACHING  ME, SAVE APPROVED.  

  HOW MANY FINGERS IN YOUR  HAND?   

  YOU HAVE 5 FINGERS IN  ONE HAND

此外,您的聊天机器人可以识别任何用户在与之聊天时的行为。通过分析用户先前的输入,记录下来并与当前对话进行比较,它可以判断他/她是否在撒谎。

提高聊天机器人能力的技巧和窍门

提高聊天机器人执行特定任务的能力是 AI 开发的另一个重要部分。此类 AI 操作的示例包括在聊天时下棋的能力、安排日程的能力以及控制 PC 的能力。我现在将讨论一些用于我们聊天机器人 RoboMatic X1 的操作想法。

系统操作

以下是如何让您的聊天机器人能够执行某些系统操作,例如打开和关闭 CD-ROM、浏览、复制文件夹等。请记住,这是一个危险的领域。执行系统操作的任何故障不仅可能导致用户对聊天机器人的呼叫出现错误,还可能导致聊天机器人程序无法再次打开。在删除文件等危险操作的情况下,聊天机器人必须在执行之前警告用户。也许聊天机器人没有正确理解,或者没有正确地从它说的话中排除要删除的文件路径或名称。

操作并不认为是一个孤立的工作区域,而不关心其他聊天机器人引擎。因此,我们必须首先将操作句子视为普通句子。当我们使操作基于矩阵引擎工作时,我们让聊天机器人知道句子的含义并选择合适的答案。

操作数据库中有一个小区别,因为它不包含请求和响应句子。相反,它包含有关聊天机器人应执行的操作的一些信息。我们通过为每个操作定义 ID 号来简单地做到这一点。当聊天机器人找到操作句子的等效 ID 时,它就会执行具有相同 ID 的操作。操作有两个主要部分:有限(直接)操作和扩展操作。

有限操作 是聊天机器人直接执行的命令,而不考虑用户的下一步响应。示例包括打开 CD-ROM、打开文件、最小化资源管理器窗口等。这些不需要一个句子来警告用户他/她即将打开文件等。聊天机器人会立即打开文件。在这种操作类型中,唯一困难的是在你编程聊天机器人的语言中拥有所需操作的代码。

扩展操作 是聊天机器人执行的命令,需要考虑用户的下一步响应,用户可能会提供更多关于它的细节以及如何完成。这种操作的难度不仅在于代码,还在于如何将命令句子与用户将提供关于正在运行的操作的更多所需信息的后续句子联系起来。

在这部分,执行任务的效率取决于聊天机器人的智能。因此,我们将使用先前事件引擎,其主要任务是建立句子之间的联系。为了理解我的意思,让我们举个例子,看看下面的流程图。

Screenshot - T1Pic7.jpg

图 7 显示了从一个路径 (E:\) 复制一些文件到一个确定的目的地 (F:\),其中一些文件与要复制的文件同名。让我们看看聊天机器人将如何执行这样的操作。

  1. 在聊天机器人接收包含复制文件命令的句子后,它将被矩阵引擎分析,该引擎会识别命令。它会选择一个合适的响应,并让用户确定要复制的文件和目的地。
  2. 聊天机器人将开始将文件复制到目的地,目的地的一些文件与要复制的文件同名。因此,聊天机器人将询问用户该怎么做,消息是:“粘贴目的地已包含文件(文件名)。您要覆盖它吗?是、全部是、否、全部否。”这句话将被存储在先前事件引擎中,此外还有当前过程(复制)。这使得聊天机器人能够建立它提出的问题与用户回复之间的联系。
  3. 用户回复将通过 AI 引擎,直到到达先前事件。这将识别出先前为复制操作记录的事件尚未完成。此回复属于该事件,但有五种可能的回复:是、全部是、否、全部否,或与聊天机器人问题无关的回复。

随机称呼

此功能将使与聊天机器人的对话看起来更可靠,因为它使聊天机器人能在回复句子的开头或结尾添加用户名。例如,假设用户名是 John。

  John: Hi bot.

  Bot: Hi john, how are you? <OR>
  John, I'm glad to see you.  <OR>
  Hello, john.

有 3 种方法可以让您的聊天机器人说出用户名。第一种方法是让聊天机器人随机说出用户名,通过将其添加到回复句子中,如果引擎选择添加。第二种方法是在数据库响应记录中放置一个符号,如 /N 符号,这样当聊天机器人在此符号出现在响应句子中时,它会用用户名替换它。这种方法不被推荐,因为它使得聊天机器人总是在句子的相同位置称呼用户名,并且由于它总是找到符号 (/N),所以会重复。

第三种方法是将前两种方法结合起来。让我们举个例子,用户说,“我确定你能游泳。”机器人会在数据库记录中搜索矩阵引擎,然后找到响应:“你为什么认为我能做到这个,(/N)?”它发现句子中有一个 /N 标记,然后随机选择是否用用户名替换 /N 符号。如果不替换,则 /N 符号将被从句子中删除。

数学引擎

此引擎使您的聊天机器人能够计算数字,包括加法、减法和除法运算。如果您想通过与聊天机器人聊天来计算某项内容,您应该改进此引擎以搜索句子中的方程式。下图显示了如何做到这一点以及如何让您的引擎接受用字母写的数字。

Screenshot - T1Pic8.jpg

颜色/首都数据库

您可以教您的聊天机器人颜色和国家的首都来提高它的知识。首先,创建两个数据库。第一个包含用户可以用来询问颜色/首都的句子,例如,“...的颜色/首都是什么?”或“你知道...的颜色/首都吗?”另一个数据库包含国家和首都。当用户说,“美国的首都是什么?”时,机器人会搜索第一个数据库,在那里它会找到这个问题以及它的响应,“(/Cap) 是 (/Count) 的首都。”

接下来,机器人会从问题中排除国家名称(USA),并用 (/Count) 符号替换它。最后,机器人会搜索第二个数据库,找到这个国家的首都(华盛顿),然后用它替换 (/Cap) 符号。最终的输出将是,“华盛顿是美国的首都。”我们可以用同样的方式创建颜色数据库。图 9 显示了它的工作原理。

Screenshot - T1Pic9.jpg

提醒和通知

要将此功能添加到您的聊天机器人中,您应该创建一个数据库,其中包含在特定日期、时间或日期和时间发生的所有事件的记录。创建此数据库后,让您的聊天机器人始终检查当前的时间和日期,并将其与数据库中的记录进行比较。如果当前时间、日期或两者都等于记录中的一项,则您的聊天机器人应该说出匹配记录中记录的内容。

Screenshot - T1Pic10.jpg

 

最后,您成功了!

我们希望您喜欢我们这篇关于构建自己的聊天机器人的简单文章。您可以使用任何您想要的编程语言。我们讨论了构建聊天机器人的基本知识,并使用了我们聊天机器人 Robomatic X1 的真实示例。您可以 下载聊天机器人 作为参考。我们还想推荐一些有用的链接来帮助您构建自己的聊天机器人。

如果您有任何需要与我们讨论的事项,请随时 联系我们

历史

  • 2005年11月26日 -- 首次发布
  • 2007年6月11日 -- 文章已编辑并移至 CodeProject.com 主要文章库
© . All rights reserved.