|
""" |
|
緊急調試:貓砂查詢問題 |
|
""" |
|
|
|
def debug_keyword_expansion(): |
|
"""調試關鍵字擴展邏輯""" |
|
|
|
def extract_keywords_with_expansion(query_text: str): |
|
"""擴展版關鍵字提取""" |
|
|
|
stop_words = ['推薦', '有沒有', '是否有', '請問', '想要', '需要', '找', '查詢', '搜尋', '還有嗎', '?', '?'] |
|
|
|
|
|
words = query_text.replace('?', '').replace('?', '').split() |
|
keywords = [word for word in words if word not in stop_words and len(word) > 1] |
|
|
|
|
|
expanded_keywords = [] |
|
for keyword in keywords: |
|
expanded_keywords.append(keyword) |
|
|
|
|
|
if '貓砂' in keyword or '貓' in keyword: |
|
expanded_keywords.extend(['礦砂', '豆腐砂', '水晶砂', '木屑砂', 'litter']) |
|
|
|
|
|
if '狗糧' in keyword or '狗' in keyword: |
|
expanded_keywords.extend(['犬糧', '犬種', '狗食', 'dog']) |
|
|
|
|
|
if '寵物' in keyword: |
|
expanded_keywords.extend(['貓', '狗', '犬', 'pet', 'cat']) |
|
|
|
return expanded_keywords if expanded_keywords else [query_text.strip()] |
|
|
|
print("🔍 調試關鍵字擴展邏輯") |
|
print("=" * 50) |
|
|
|
test_query = "貓砂還有嗎?" |
|
print(f"原始查詢: '{test_query}'") |
|
|
|
keywords = extract_keywords_with_expansion(test_query) |
|
print(f"擴展關鍵字: {keywords}") |
|
|
|
return keywords |
|
|
|
def debug_product_matching(): |
|
"""調試商品匹配邏輯""" |
|
|
|
|
|
products = [ |
|
{ |
|
"id": 2, |
|
"productCode": "SW-06-01", |
|
"productName": "Shovel well豪好鏟 破碎型礦砂", |
|
"stock": 50, |
|
"category_id": 1 |
|
}, |
|
{ |
|
"id": 3, |
|
"productCode": "TL-03", |
|
"productName": "美國極冠貓砂 薰衣草12kg", |
|
"stock": 48, |
|
"category_id": 1 |
|
} |
|
] |
|
|
|
print("\n🛍️ 調試商品匹配邏輯") |
|
print("=" * 50) |
|
|
|
keywords = debug_keyword_expansion() |
|
|
|
print(f"\n商品資料:") |
|
for product in products: |
|
print(f" - {product['productName']}") |
|
|
|
print(f"\n匹配測試:") |
|
for keyword in keywords: |
|
print(f"\n關鍵字: '{keyword}'") |
|
matches = [] |
|
|
|
for product in products: |
|
product_name_lower = product["productName"].lower() |
|
product_code_lower = product["productCode"].lower() |
|
keyword_lower = keyword.lower() |
|
|
|
if (keyword_lower in product_name_lower or |
|
keyword_lower in product_code_lower): |
|
matches.append(product) |
|
print(f" ✅ 匹配: {product['productName']}") |
|
|
|
if not matches: |
|
print(f" ❌ 無匹配") |
|
|
|
return keywords |
|
|
|
def debug_intent_analysis(): |
|
"""調試意圖分析邏輯""" |
|
|
|
def analyze_query_intent_debug(message: str): |
|
"""調試版意圖分析""" |
|
message_lower = message.lower() |
|
|
|
|
|
product_keywords = [ |
|
'推薦', '有沒有', '是否有', '請問有', '商品', '產品', '貨品', |
|
'查詢', '搜尋', '找', '庫存', '存貨', '價格', '多少錢', |
|
'貓砂', '狗糧', '寵物', '食品', '用品', '貓', '狗', '寵物用品', |
|
'cat', 'dog', 'pet', 'litter', 'food', '還有嗎', '還有' |
|
] |
|
|
|
|
|
recommendation_keywords = ['推薦', '建議', '介紹', '有什麼', '哪些', '什麼好', '推薦一些'] |
|
|
|
|
|
inventory_keywords = ['庫存', '存貨', '剩餘', '還有', '現貨', '有多少', '剩多少', '還有嗎'] |
|
|
|
is_product_query = any(keyword in message_lower for keyword in product_keywords) |
|
is_recommendation = any(keyword in message_lower for keyword in recommendation_keywords) |
|
is_inventory_check = any(keyword in message_lower for keyword in inventory_keywords) |
|
|
|
confidence = 0.5 |
|
if is_product_query: |
|
confidence += 0.3 |
|
if is_recommendation: |
|
confidence += 0.2 |
|
if is_inventory_check: |
|
confidence += 0.2 |
|
|
|
return { |
|
"is_product_query": is_product_query, |
|
"is_recommendation": is_recommendation, |
|
"is_inventory_check": is_inventory_check, |
|
"confidence": min(confidence, 1.0), |
|
"intent": "product_query" if is_product_query else "unknown", |
|
"matched_keywords": [kw for kw in product_keywords if kw in message_lower] |
|
} |
|
|
|
print("\n🤖 調試意圖分析邏輯") |
|
print("=" * 50) |
|
|
|
test_query = "貓砂還有嗎?" |
|
print(f"查詢: '{test_query}'") |
|
|
|
analysis = analyze_query_intent_debug(test_query) |
|
|
|
print(f"商品查詢: {analysis['is_product_query']}") |
|
print(f"推薦查詢: {analysis['is_recommendation']}") |
|
print(f"庫存查詢: {analysis['is_inventory_check']}") |
|
print(f"信心度: {analysis['confidence']:.2f}") |
|
print(f"匹配的關鍵字: {analysis['matched_keywords']}") |
|
|
|
return analysis |
|
|
|
def debug_search_logic(): |
|
"""調試搜尋邏輯""" |
|
|
|
print("\n🔍 調試搜尋邏輯") |
|
print("=" * 50) |
|
|
|
|
|
def simulate_search_products_advanced(query_text: str): |
|
"""模擬進階商品搜尋""" |
|
|
|
|
|
def extract_keywords_with_expansion(query_text: str): |
|
stop_words = ['推薦', '有沒有', '是否有', '請問', '想要', '需要', '找', '查詢', '搜尋', '還有嗎', '?', '?'] |
|
words = query_text.replace('?', '').replace('?', '').split() |
|
keywords = [word for word in words if word not in stop_words and len(word) > 1] |
|
|
|
expanded_keywords = [] |
|
for keyword in keywords: |
|
expanded_keywords.append(keyword) |
|
|
|
if '貓砂' in keyword or '貓' in keyword: |
|
expanded_keywords.extend(['礦砂', '豆腐砂', '水晶砂', '木屑砂', 'litter']) |
|
|
|
if '狗糧' in keyword or '狗' in keyword: |
|
expanded_keywords.extend(['犬糧', '犬種', '狗食', 'dog']) |
|
|
|
if '寵物' in keyword: |
|
expanded_keywords.extend(['貓', '狗', '犬', 'pet', 'cat']) |
|
|
|
return expanded_keywords if expanded_keywords else [query_text.strip()] |
|
|
|
|
|
products = [ |
|
{ |
|
"id": 2, |
|
"productCode": "SW-06-01", |
|
"productName": "Shovel well豪好鏟 破碎型礦砂", |
|
"stock": 50, |
|
"is_deleted": False |
|
}, |
|
{ |
|
"id": 3, |
|
"productCode": "TL-03", |
|
"productName": "美國極冠貓砂 薰衣草12kg", |
|
"stock": 48, |
|
"is_deleted": False |
|
} |
|
] |
|
|
|
|
|
keywords = extract_keywords_with_expansion(query_text) |
|
print(f"搜尋關鍵字: {keywords}") |
|
|
|
matched_products = [] |
|
|
|
for product in products: |
|
if product["is_deleted"]: |
|
continue |
|
|
|
|
|
for keyword in keywords: |
|
keyword_lower = keyword.lower() |
|
product_name_lower = product["productName"].lower() |
|
product_code_lower = product["productCode"].lower() |
|
|
|
if (keyword_lower in product_name_lower or |
|
keyword_lower in product_code_lower): |
|
matched_products.append(product) |
|
print(f" ✅ 匹配: {product['productName']} (關鍵字: {keyword})") |
|
break |
|
|
|
return { |
|
"success": True, |
|
"data": matched_products, |
|
"count": len(matched_products) |
|
} |
|
|
|
test_query = "貓砂還有嗎?" |
|
result = simulate_search_products_advanced(test_query) |
|
|
|
print(f"搜尋結果:") |
|
print(f" 成功: {result['success']}") |
|
print(f" 數量: {result['count']}") |
|
|
|
if result['data']: |
|
print(f" 找到的商品:") |
|
for product in result['data']: |
|
print(f" - {product['productName']} (庫存: {product['stock']})") |
|
else: |
|
print(f" ❌ 沒有找到商品") |
|
|
|
def main(): |
|
"""主函數""" |
|
print("🚨 緊急調試:貓砂查詢問題") |
|
print("=" * 60) |
|
|
|
|
|
intent_analysis = debug_intent_analysis() |
|
|
|
|
|
debug_product_matching() |
|
|
|
|
|
debug_search_logic() |
|
|
|
print("\n" + "=" * 60) |
|
print("🔍 問題診斷結果:") |
|
|
|
if intent_analysis["confidence"] >= 1.0: |
|
print("✅ 意圖識別正常 (信心度 1.00)") |
|
else: |
|
print("❌ 意圖識別有問題") |
|
|
|
print("\n💡 可能的問題:") |
|
print("1. 關鍵字擴展邏輯是否正確執行?") |
|
print("2. 資料庫查詢是否有錯誤?") |
|
print("3. 商品資料是否正確載入?") |
|
print("4. SQL 查詢條件是否正確?") |
|
|
|
if __name__ == "__main__": |
|
main() |
|
|