如何在Python中刷新ChatterBot聊天机器人的训练内容?
这个问题我之前也碰到过!核心原因是ChatterBot默认会把训练数据持久化存储到本地的SQLite数据库里,而不是只依赖你每次运行时读取的训练文本文件。哪怕你清空了训练文件、改了程序名,只要那个数据库文件还在,机器人就会优先读取里面的旧数据,所以看起来像是记忆没刷新。
下面给你几个实用的解决办法:
方法1:手动清除旧数据库文件
ChatterBot默认生成的数据库文件是db.sqlite3,一般就在你的Python脚本运行的目录下。直接找到这个文件删掉,下次运行程序时,ChatterBot会自动创建一个全新的空数据库,重新用你当前的训练文件训练,这样旧记忆就彻底清除了。
方法2:让ChatterBot使用内存存储(无需持久化)
如果你不想每次手动删文件,可以在初始化ChatBot的时候,指定它把数据存在内存里,程序一关闭数据就清空。修改你的初始化代码如下:
bot = ChatBot( 'trialBot', storage_adapter='chatterbot.storage.SQLStorageAdapter', database_uri='sqlite:///:memory:' )
这样每次运行程序都会从零开始训练,非常适合调试阶段快速测试不同的训练内容。
方法3:自定义数据库路径,方便管理
如果需要保留不同版本的训练数据,可以指定一个自定义的数据库文件路径,比如:
bot = ChatBot( 'trialBot', storage_adapter='chatterbot.storage.SQLStorageAdapter', database_uri='sqlite:///my_trial_bot_db.sqlite3' )
之后要刷新训练,只需要删掉my_trial_bot_db.sqlite3这个文件就行,不会误删其他程序的数据库。
另外提个小细节:你代码里的mainDir = 'C:\Users\xyz\Desktop\trainfiles\'会因为末尾的反斜杠转义引号导致语法错误,建议改成原始字符串:mainDir = r'C:\Users\xyz\Desktop\trainfiles\',或者用双反斜杠:mainDir = 'C:\\Users\\xyz\\Desktop\\trainfiles\\'。
内容的提问来源于stack exchange,提问作者Syntax-Tax

