You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 06:36:18