linebot_pydantic_fastapi / test_debug_logs.py
mickeywu520's picture
新增debug訊息
3887148
"""
測試調試日誌是否正常工作
"""
import logging
# 設置日誌格式
logging.basicConfig(
level=logging.INFO,
format='%(levelname)s:%(name)s:%(message)s'
)
def test_keyword_extraction_with_logs():
"""測試關鍵字提取並顯示日誌"""
def extract_keywords_with_logs(query_text: str):
"""帶日誌的關鍵字提取"""
logger = logging.getLogger("test_keyword_extraction")
# 移除常見的查詢詞彙
stop_words = ['推薦', '有沒有', '是否有', '請問', '想要', '需要', '找', '查詢', '搜尋', '還有嗎', '還有', '嗎', '可以']
# 清理查詢文字
cleaned_text = query_text.replace('?', '').replace('?', '').strip()
logger.info(f"清理後的文字: '{cleaned_text}'")
# 先嘗試提取核心商品詞彙
core_product_words = ['貓砂', '狗糧', '寵物', '商品', '產品', '貓', '狗', '犬', '礦砂']
extracted_core_words = []
for core_word in core_product_words:
if core_word in cleaned_text:
extracted_core_words.append(core_word)
logger.info(f"提取的核心詞彙: {extracted_core_words}")
# 分割並清理關鍵字
words = cleaned_text.split()
keywords = []
for word in words:
if word not in stop_words and len(word) > 1:
keywords.append(word)
logger.info(f"分割後的關鍵字: {keywords}")
# 合併核心詞彙和分割的關鍵字
all_keywords = list(set(extracted_core_words + keywords))
logger.info(f"合併後的關鍵字: {all_keywords}")
# 如果沒有有效關鍵字,使用清理後的文字
if not all_keywords:
all_keywords = [cleaned_text]
logger.warning(f"沒有有效關鍵字,使用原始文字: {all_keywords}")
# 擴展相關關鍵字
expanded_keywords = []
for keyword in all_keywords:
expanded_keywords.append(keyword)
# 貓砂相關擴展
if '貓砂' in keyword or '貓' in keyword:
expanded_keywords.extend(['礦砂', '豆腐砂', '水晶砂', '木屑砂', 'litter', '貓砂'])
logger.info(f"貓砂相關擴展: {keyword} → 添加貓砂相關詞彙")
# 狗糧相關擴展
if '狗糧' in keyword or '狗' in keyword:
expanded_keywords.extend(['犬糧', '犬種', '狗食', 'dog'])
logger.info(f"狗糧相關擴展: {keyword} → 添加狗糧相關詞彙")
# 寵物相關擴展
if '寵物' in keyword:
expanded_keywords.extend(['貓', '狗', '犬', 'pet', 'cat'])
logger.info(f"寵物相關擴展: {keyword} → 添加寵物相關詞彙")
# 商品相關擴展
if '商品' in keyword or '產品' in keyword:
expanded_keywords.extend(['貓砂', '狗糧', '寵物', '食品', '用品'])
logger.info(f"商品相關擴展: {keyword} → 添加商品相關詞彙")
# 去除重複並返回
unique_keywords = list(set(expanded_keywords))
# 記錄關鍵字提取結果用於調試
logger.info(f"關鍵字提取: '{query_text}' → 核心詞: {extracted_core_words} → 最終: {unique_keywords}")
return unique_keywords, extracted_core_words
print("🔍 測試關鍵字提取日誌")
print("=" * 50)
test_queries = [
"請問貓砂還有嗎?",
"貓砂還有嗎?",
"請問有商品可以推薦嗎?"
]
for query in test_queries:
print(f"\n測試查詢: '{query}'")
print("-" * 30)
keywords, core_words = extract_keywords_with_logs(query)
print(f"最終結果: {keywords}")
def test_product_matching_simulation():
"""模擬商品匹配過程"""
logger = logging.getLogger("test_product_matching")
# 實際商品資料
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
}
]
print(f"\n🛍️ 測試商品匹配模擬")
print("=" * 50)
test_query = "貓砂還有嗎?"
logger.info(f"開始商品匹配測試: '{test_query}'")
# 模擬關鍵字提取
keywords = ['貓', '水晶砂', '貓砂', '豆腐砂', 'litter', '木屑砂', '礦砂', '貓砂還有嗎']
logger.info(f"使用關鍵字: {keywords}")
# 模擬商品匹配
matched_products = []
for product in products:
if product["is_deleted"]:
continue
# 檢查哪個關鍵字匹配了這個商品
matched_keywords = []
for keyword in keywords:
if (keyword.lower() in product["productName"].lower() or
keyword.lower() in product["productCode"].lower()):
matched_keywords.append(keyword)
if matched_keywords:
matched_products.append(product)
logger.info(f"📦 商品: {product['productName']} - 匹配關鍵字: {matched_keywords}")
logger.info(f"✅ 匹配完成,找到 {len(matched_products)} 個商品")
print(f"匹配結果: 找到 {len(matched_products)} 個商品")
for product in matched_products:
print(f" - {product['productName']}")
def main():
"""主函數"""
print("🚀 測試調試日誌功能")
print("=" * 60)
test_keyword_extraction_with_logs()
test_product_matching_simulation()
print("\n" + "=" * 60)
print("✅ 日誌測試完成!")
print("\n💡 現在重啟服務,應該能看到詳細的調試日誌")
if __name__ == "__main__":
main()