|
""" |
|
測試意圖識別邏輯 - 不依賴外部套件 |
|
""" |
|
|
|
def test_product_intent_logic(): |
|
"""測試商品意圖識別邏輯""" |
|
|
|
def analyze_query_intent_simple(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" |
|
} |
|
|
|
def quick_intent_check_simple(message: str): |
|
"""簡化版的快速意圖檢查""" |
|
message_lower = message.lower() |
|
|
|
|
|
help_keywords = ['幫助', 'help', '說明', '怎麼用', '指令', '功能', '統計', 'stats', '選單', 'menu'] |
|
|
|
|
|
business_keywords = [ |
|
'訂單狀態', '訂單查詢', '我的訂單', '交易記錄', '購買記錄', |
|
'客戶資料', '會員資料', '帳戶資訊', '銷售報表', '財務報表' |
|
] |
|
|
|
if any(keyword in message_lower for keyword in help_keywords): |
|
return "help" |
|
elif any(keyword in message_lower for keyword in business_keywords): |
|
return "search" |
|
else: |
|
|
|
return "chat" |
|
|
|
|
|
test_messages = [ |
|
"你好, 請問有沒有貓砂相關產品?", |
|
"是否有推薦貓砂?", |
|
"有什麼寵物用品?", |
|
"查詢狗糧庫存", |
|
"貓砂還有嗎?", |
|
"推薦一些好的貓砂", |
|
"你好!今天天氣如何?", |
|
"/help", |
|
"統計", |
|
"我的訂單狀態" |
|
] |
|
|
|
print("🧪 測試意圖識別邏輯") |
|
print("=" * 80) |
|
|
|
for i, message in enumerate(test_messages, 1): |
|
print(f"\n{i}. 測試訊息: '{message}'") |
|
|
|
|
|
quick_intent = quick_intent_check_simple(message) |
|
print(f" 快速意圖: {quick_intent}") |
|
|
|
|
|
product_intent = analyze_query_intent_simple(message) |
|
print(f" 商品查詢: {product_intent['is_product_query']}") |
|
print(f" 推薦查詢: {product_intent['is_recommendation']}") |
|
print(f" 庫存查詢: {product_intent['is_inventory_check']}") |
|
print(f" 信心度: {product_intent['confidence']:.2f}") |
|
|
|
|
|
should_use_pydantic_ai = ( |
|
product_intent["is_product_query"] and |
|
product_intent["confidence"] > 0.5 |
|
) |
|
|
|
if quick_intent == "help": |
|
final_route = "幫助模式" |
|
elif should_use_pydantic_ai: |
|
final_route = "🛍️ Pydantic AI 商品查詢" |
|
elif quick_intent == "search": |
|
final_route = "傳統搜尋模式" |
|
else: |
|
final_route = "聊天模式" |
|
|
|
print(f" 👉 最終路由: {final_route}") |
|
|
|
|
|
if "貓砂" in message or "貓" in message: |
|
print(f" 🐱 貓砂查詢檢測: {'✅ 應該被 Pydantic AI 處理' if should_use_pydantic_ai else '❌ 可能被錯誤路由'}") |
|
|
|
def test_keyword_extraction(): |
|
"""測試關鍵字提取邏輯""" |
|
|
|
def extract_keywords_simple(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] |
|
|
|
return keywords if keywords else [query_text.strip()] |
|
|
|
print(f"\n\n🔍 測試關鍵字提取") |
|
print("=" * 50) |
|
|
|
test_queries = [ |
|
"你好, 請問有沒有貓砂相關產品?", |
|
"是否有推薦貓砂?", |
|
"有什麼寵物用品?", |
|
"查詢狗糧庫存" |
|
] |
|
|
|
for query in test_queries: |
|
keywords = extract_keywords_simple(query) |
|
print(f"'{query}' → {keywords}") |
|
|
|
def main(): |
|
"""主函數""" |
|
print("🚀 開始意圖識別測試\n") |
|
|
|
test_product_intent_logic() |
|
test_keyword_extraction() |
|
|
|
print("\n" + "=" * 80) |
|
print("✅ 測試完成!") |
|
print("\n💡 分析結果:") |
|
print("1. 檢查貓砂相關查詢是否被正確識別為商品查詢") |
|
print("2. 確認信心度是否超過 0.5 閾值") |
|
print("3. 驗證路由決策是否正確") |
|
|
|
if __name__ == "__main__": |
|
main() |
|
|