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

Python聊天机器人无法从JSON文件读取商品信息求助

修复聊天机器人菜单商品占位符问题

问题根源分析

  1. 缺失价格查询意图配置:intents.json中未定义"查询商品价格"的意图标签,导致模型无法识别这类查询的意图。
  2. 实体提取逻辑缺失:现有代码未实现从用户输入中提取商品关键词的逻辑,无法匹配menu.json中的商品数据。
  3. 回复占位符未替换:即使获取到商品信息,也没有对回复模板中的[item]和[price]进行实际值替换。
  4. 菜单匹配逻辑不完善: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 09:01:32