基于ChatterBot与Flask的聊天机器人无法识别消息时自定义回复咨询
解决方案
首先你的现有代码存在逻辑问题:你重复初始化了3次ChatBot实例,存储适配器、逻辑适配器的配置都写在了bot实例上,但最终训练和调用的是最早初始化的chatbot实例,所有额外配置都没有生效,需要先修正这个问题。
方案1:使用ChatterBot内置默认回复配置(推荐)
直接在BestMatch逻辑适配器的参数里配置默认回复和匹配阈值即可,开箱即用。
修改后完整代码如下:
from flask import Flask, render_template, request from chatterbot import ChatBot from chatterbot.trainers import ChatterBotCorpusTrainer app = Flask(__name__) # 整合所有配置到同一个ChatBot实例 chatbot = ChatBot( 'chatbot_name', storage_adapter='chatterbot.storage.SQLStorageAdapter', database_uri='sqlite:///database.sqlite3', logic_adapters=[ { 'import_path': 'chatterbot.logic.BestMatch', # 配置无法识别时的默认回复 'default_response': 'Sorry I don\'t understand that', # 配置匹配阈值,范围0-1,匹配度低于该值就返回默认回复,可根据实际效果调整 'maximum_similarity_threshold': 0.65 }, 'chatterbot.logic.TimeLogicAdapter' ] ) trainer = ChatterBotCorpusTrainer(chatbot) trainer.train("chatterbot.corpus.english") @app.route('/') def home(): return render_template('bot1.html') @app.route('/get') def get_bot_response(): userText = request.args.get('msg') return str(chatbot.get_response(userText)) if __name__ == '__main__': app.run()
方案2:手动判断回复置信度
如果你需要更灵活的自定义判断逻辑,可以在获取回复后手动读取置信度参数,低于阈值就返回自定义回复,只需修改get_bot_response路由即可:
@app.route('/get') def get_bot_response(): userText = request.args.get('msg') response = chatbot.get_response(userText) # 匹配度低于0.65就返回默认回复,阈值可自行调整 if response.confidence < 0.65: return "Sorry I don't understand that" return str(response)
两个方案任选其一即可,阈值可以根据实际测试效果调整,数值越高触发默认回复的条件越严格。
内容的提问来源于stack exchange,提问作者user13944038
相关产品推荐
相关产品推荐

