如何基于Python ChatterBot的回复触发执行指定函数?
实现ChatterBot触发特定Python函数的方法
方法1:在回复流程中加入触发逻辑
最直接的方式是获取ChatterBot的回复后,根据用户输入或机器人回复内容判断是否执行目标函数,适合简单场景快速落地。
示例代码:
from chatterbot import ChatBot from chatterbot.trainers import ChatterBotCorpusTrainer # 定义要触发的业务函数 def add_to_database(data): # 此处编写向数据库添加数据的逻辑 print(f"已向数据库添加数据:{data}") # 初始化聊天机器人并训练基础语料 chatbot = ChatBot('FunctionBot') trainer = ChatterBotCorpusTrainer(chatbot) trainer.train("chatterbot.corpus.chinese") # 对话循环 while True: user_input = input("你:") if user_input.lower() == '退出': break # 获取机器人回复 response = chatbot.get_response(user_input) print(f"机器人:{response}") # 场景1:根据用户输入关键词直接触发函数 if "添加数据" in user_input: data = user_input.replace("添加数据", "").strip() add_to_database(data) # 场景2:根据机器人的确认回复,二次确认后触发函数 elif str(response) == "确认要添加这条数据吗?": confirm_input = input("你:") if confirm_input.lower() in ["是", "确认"]: # 实际场景可从上下文提取待添加数据 add_to_database("用户确认的目标数据") print("机器人:数据已添加成功")
方法2:意图映射触发函数
提前定义意图与函数的对应关系,通过关键词匹配识别用户意图,直接触发对应函数,适合多意图场景管理。
示例代码:
# 意图-函数映射字典 intent_function_map = { "添加数据": add_to_database, # 可扩展更多意图与对应函数 } def recognize_intent(user_input): # 简单关键词匹配识别意图,可优化为正则或更复杂的语义识别 for intent in intent_function_map.keys(): if intent in user_input: return intent return None # 对话循环 while True: user_input = input("你:") if user_input.lower() == '退出': break intent = recognize_intent(user_input) if intent: data = user_input.replace(intent, "").strip() intent_function_map[intent](data) print("机器人:已完成对应操作") else: # 非业务意图交给ChatterBot处理普通对话 response = chatbot.get_response(user_input) print(f"机器人:{response}")
方法3:自定义ChatterBot逻辑适配器
通过继承ChatterBot的LogicAdapter类,将函数触发逻辑整合到机器人的回复生成流程中,更贴合ChatterBot的架构设计。
示例代码:
from chatterbot.adapters.logic import LogicAdapter from chatterbot.conversation import Statement class FunctionTriggerAdapter(LogicAdapter): def __init__(self, chatbot, **kwargs): super().__init__(chatbot, **kwargs) def process(self, input_statement, additional_response_selection_parameters=None): # 判断输入是否匹配触发条件 if "添加数据" in input_statement.text: data = input_statement.text.replace("添加数据", "").strip() add_to_database(data) # 返回对应的回复语句 return Statement(text="数据已成功添加到数据库") # 不匹配条件则返回None,交给其他适配器处理 return None # 初始化机器人时加载自定义适配器 chatbot = ChatBot( 'FunctionBot', logic_adapters=[ '__main__.FunctionTriggerAdapter', # 替换为你的适配器实际路径 'chatterbot.logic.BestMatch' ] )
你可以根据业务场景的复杂度,选择最适合的实现方式。
内容的提问来源于stack exchange,提问作者Tiago
相关产品推荐
相关产品推荐

