Python ChatBot 与 Chatterbot

260 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 15 天,点击查看活动详情

关于聊天机器人

ChatterBot是一个 Python 库,可以轻松生成对用户输入的自动响应。ChatterBot 使用一系列机器学习算法来生成不同类型的响应。这使开发人员可以轻松创建聊天机器人并自动与用户对话。有关 ChatterBot 背后的想法和概念的更多详细信息,请参阅流程图。

安装中

如果您刚刚开始使用 ChatterBot,建议您从安装 Python Package Index (PyPi) 的最新版本开始。要使用 pip 从 PyPi 安装 ChatterBot,请在终端中运行以下命令。

pip install chatterbot

创建您的第一个聊天机器人

创建一个名为 chatbot_basic.py 的新文件。然后在您选择的编辑器中打开 chatbot_basic.py。

在我们做任何其他事情之前,需要导入 ChatterBot。ChatterBot 的导入应类似于以下行。

from chatterbot import ChatBot

创建 ChatBot 类的新实例。

bot = ChatBot('Dev.to')

这行代码创建了一个名为Dev.to的新聊天机器人

设置存储适配器

ChatterBot 带有内置的适配器类,允许它连接到不同类型的数据库。在本教程中,我们将使用允许聊天机器人连接到 SQL 数据库的 SQLStorageAdapter。默认情况下,此适配器将创建一个 SQLite 数据库。

数据库参数用于指定聊天机器人将使用的数据库路径。对于这个例子,我们将调用数据库 sqlite:///database.sqlite3。如果该文件不存在,将自动创建该文件。

bot = ChatBot(
    'Dev.to',
    storage_adapter='chatterbot.storage.SQLStorageAdapter',
    database_uri='sqlite:///database.sqlite3'
)

指定逻辑适配器

logic_adapters 参数是逻辑适配器列表。在 ChatterBot 中,逻辑适配器是一个接受输入语句并返回对该语句的响应的类。

您可以选择使用任意数量的逻辑适配器。在这个例子中,我们将使用两个逻辑适配器。TimeLogicAdapter 在输入语句要求时返回当前时间。MathematicalEvaluation 适配器解决使用基本运算的数学问题。

bot = ChatBot(
    'Norman',
    storage_adapter='chatterbot.storage.SQLStorageAdapter',
    logic_adapters=[
        'chatterbot.logic.MathematicalEvaluation',
        'chatterbot.logic.TimeLogicAdapter'
    ],
    database_uri='sqlite:///database.sqlite3'
)

使用语料库数据进行训练

chatterbot.trainers.ChatterBotCorpusTrainer(chatbot, **kwargs)[source]

允许使用来自 ChatterBot 对话语料库的数据训练聊天机器人。

ChatterBot 带有一个语料库数据和实用程序模块,可以轻松快速地训练您的机器人进行交流。为此,只需指定要使用的语料库数据模块。


from chatbot import chatbot
from chatterbot.trainers import ChatterBotCorpusTrainer

trainer = ChatterBotCorpusTrainer(chatbot)

trainer.train("chatterbot.corpus.english")

简单例子

from chatterbot.trainers import ChatterBotCorpusTrainer
from chatterbot import ChatBot
from chatterbot.trainers import ListTrainer

# Create a new ChatBot with name Dev.to
chatbot = ChatBot(
    'Dev.to',
    storage_adapter='chatterbot.storage.SQLStorageAdapter',
    logic_adapters=[
        'chatterbot.logic.MathematicalEvaluation',
        'chatterbot.logic.BestMatch'
    ],
    database_uri='sqlite:///database.sqlite3'
)

# Create a new trainer for the chatbot
trainer = ChatterBotCorpusTrainer(chatbot)

# Train the chatbot based on the english corpus
trainer.train("chatterbot.corpus.english")

print("\nHello i'm Dev.to Bot\n")
while True:
    try:
        bot_input = input()

        if bot_input.strip()=='Stop':
            print('Dev.to: Bye')
            break

        bot_response = chatbot.get_response(bot_input)
        print(bot_response)

    except(KeyboardInterrupt, EOFError, SystemExit):
        break
Hello i'm Dev.to Bot

Hi
How are you doing?
pretty good thanks
That's good to hear.
What is 4 + 13?
4 + 13 = 17
Stop
Dev.to: Bye