Python聊天机器人无法从JSON文件读取商品信息求助
修复聊天机器人菜单商品占位符问题
问题根源分析
- 缺失价格查询意图配置:
intents.json中未定义"查询商品价格"的意图标签,导致模型无法识别这类查询的意图。 - 实体提取逻辑缺失:现有代码未实现从用户输入中提取商品关键词的逻辑,无法匹配
menu.json中的商品数据。 - 回复占位符未替换:即使获取到商品信息,也没有对回复模板中的
[item]和[price]进行实际值替换。 - 菜单匹配逻辑不完善:
get_menu_item函数仅检查查询是否完全匹配商品名称,未利用menu中的tags字段做模糊匹配。
具体修复步骤
1. 更新intents.json,添加价格查询意图
在intents数组中新增处理价格查询的配置:
{ "intents": [ // 保留原有intent配置 { "context": "", "patterns": ["How much is [item]", "What's the price of [item]", "Cost of [item]"], "responses": ["Sure! The price for [item] is [price].", "[item] costs [price]."], "tag": "price_query" } ] }
2. 新增商品实体提取函数
替换原有的get_menu_item,实现基于关键词的模糊匹配:
def extract_item_from_query(query, menu_data): query_tokens = clean_text(query.lower()) for item in menu_data["menu"]: # 匹配商品名称或tags中的关键词 item_keywords = [item["item"].lower()] + [tag.lower() for tag in item["tags"]] for token in query_tokens: if token in item_keywords: return item["item"], item["price"] return None, None
3. 修改get_response函数,处理占位符替换
更新函数逻辑,针对价格查询和商品订单意图,自动替换回复模板中的占位符:
def get_response(intents_list, intents_json, menu_data, user_query): if len(intents_list) == 0: return "Sorry! I don't understand." tag = intents_list[0] list_of_intents = intents_json["intents"] for intent in list_of_intents: if intent["tag"] == tag: item_name, item_price = extract_item_from_query(user_query, menu_data) if tag in ["price_query", "item_order"]: if item_name and item_price: response_template = random.choice(intent["responses"]) return response_template.replace("[item]", item_name).replace("[price]", item_price) else: return "Sorry, that item is not available in our menu." else: return random.choice(intent["responses"]) return "Sorry! I don't understand."
4. 修正交互循环,传递用户查询
修改主循环中的调用代码,将用户输入传递给get_response:
print("Press 0 if you don't want to chat with our ChatBot.") while True: message = input("") if message == "0": break intents = pred_class(message, words, classes) # 传递用户输入的查询内容 result = get_response(intents, data, menu_data, message) print(result)
5. 重新训练模型
由于修改了intents.json,需要重新运行数据预处理和模型训练代码,让模型学习新的意图标签。
测试验证
输入how much does krunch burger cost?,机器人将返回:Sure! The price for Krunch Burger is Rs270.
内容的提问来源于stack exchange,提问作者Atif Ali
相关产品推荐
相关产品推荐

