如何让聊天机器人响应特定问题时每次重新执行随机函数?
问题原因
你当前的代码在定义bevarages_category_intent和entrees_category_intent字典时,会立即执行get_products_by_category函数,把随机生成的结果拼接成字符串存入responses列表。这个过程只在字典初始化时发生一次,后续用户重复提问时,只会返回预先生成好的固定结果,不会重新调用函数生成新的随机内容。
解决方案
要让函数在用户每次触发对应意图时才执行,需要把响应生成逻辑延迟到意图匹配之后,而不是提前计算好结果存在字典里。以下是两种可行的修改方式:
方式一:用可调用函数存储响应逻辑
修改意图配置,把responses换成存储一个lambda函数,在匹配到意图时再调用该函数生成响应:
beverages_category_intent = { "tag": "beverages category", "patterns": [ "what drinks are available", "what drinks do you have", "i'm thirsty" ], # 用lambda包裹响应生成逻辑,延迟执行 "response_func": lambda: "Here are some suggestions: " + ', '.join(get_products_by_category("Beverages")) } entrees_category_intent = { "tag": "entrees category", "patterns": [ "what are the main dishes", "what are some main dishes you recommend", "what kind of entrees do you have", "i'm hungry" ], "response_func": lambda: "Here are some suggestions: " + ', '.join(get_products_by_category("Entrees")) }
在聊天机器人核心逻辑中,匹配到对应意图后调用函数生成实时响应:
# 假设matched_intent是匹配到的意图字典 response = matched_intent["response_func"]() # 将response返回给用户
方式二:用模板+分类标记延迟生成
如果你的聊天框架不支持存储函数,可以给意图添加分类标记和响应模板,匹配后动态生成结果:
beverages_category_intent = { "tag": "beverages category", "patterns": [ "what drinks are available", "what drinks do you have", "i'm thirsty" ], "response_template": "Here are some suggestions: {products}", "target_category": "Beverages" } entrees_category_intent = { "tag": "entrees category", "patterns": [ "what are the main dishes", "what are some main dishes you recommend", "what kind of entrees do you have", "i'm hungry" ], "response_template": "Here are some suggestions: {products}", "target_category": "Entrees" }
匹配到意图后,调用函数生成随机产品并填充模板:
# 假设matched_intent是匹配到的意图字典 category = matched_intent["target_category"] random_products = get_products_by_category(category) response = matched_intent["response_template"].format(products=', '.join(random_products)) # 返回response给用户
补充说明
你之前尝试的lambda表达式没生效,大概率是因为没有在响应时调用它——如果只是把lambda放进responses列表但不执行(不加()),它只会是一个函数对象,不会生成实际的响应文本。
内容的提问来源于stack exchange,提问作者Yara Nassar
相关产品推荐
相关产品推荐

