Ruby/Rails 中的人工智能或机器人

Artificial Intelligence or Bot in Ruby/Rails

这更像是一个 vague/general 问题,因此我提前道歉。我正在构建一个带有 Twilio 集成的简单 Rails 应用程序,它将允许用户发送 "how are you" 等消息并从应用程序接收返回的准智能响应,例如 "Good, how about yourself, John?"。

我已经把所有东西都连接好并且可以正常工作,但我想知道是否有人可以指出我在 Ruby 中编写算法的正确方向,这将使这个 "bot" 更智能。现在我正在使用一个非常直接的 if/elsif/else 链来解析有效负载并提供正确的响应,但是一旦我超过 5-10 个关键字,这似乎无法维护。

使用 case 语句(至少为了可读性)我会更好还是有更好的 OOP 设计模式可以帮助我匹配我的关键字并提供特定响应?

视情况而定。如果你想写一个真正的聊天机器人,准备 5 年以上阅读神经网络论文。不如现在就放弃 :)

但是,如果您降低要求(让机器人只识别几个选定的关键字,每个关键字都有预定义的响应),那么简单的字典方法就足够了。

你说得对,在代码中存储字典是不可扩展的。最好将知识存储在数据文件(YAML、JSON 或您喜欢的任何文件)或数据库中。然后您的代码将加载文件并能够按关键字查找响应。

像这样:

def reply(input)
  # you load this from a storage, so that when you add new keywords,
  # your code doesn't have to be touched.
  knowledge = [
    { keyword: 'how are you', response: 'Good, how about yourself, %{name}?' },
    { keyword: 'bye', response: 'Ciao!' },
  ]

  response = knowledge.detect do |pair|
    input.downcase.include?(pair[:keyword].downcase)
  end

  response && response[:response]
end

reply('How are you doing, machine?') # => "Good, how about yourself, %{name}?"
reply('gotta go, bye') # => "Ciao!"