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!"
这更像是一个 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!"