""" 測試 Pydantic AI 整合 - 驗證商品查詢功能 特別測試 "是否有推薦貓砂?" 這類查詢的準確性 """ import asyncio import sys import os # 添加專案根目錄到 Python 路徑 sys.path.append(os.path.dirname(os.path.abspath(__file__))) from backend.services.message_router import MessageRouter from backend.services.pydantic_ai_service import ProductQueryService from backend.services.enhanced_product_service import EnhancedProductService def test_message_router(): """測試訊息路由器""" print("🧪 測試訊息路由器...") router = MessageRouter() # 測試案例 test_cases = [ "是否有推薦貓砂?", "有什麼狗糧推薦?", "查詢寵物用品庫存", "iPhone 還有庫存嗎?", "推薦一些好用的商品", "你好!今天天氣如何?", # 應該路由到聊天模式 "/help", # 應該顯示幫助 ] for i, message in enumerate(test_cases, 1): print(f"\n--- 測試案例 {i}: {message} ---") try: result = router.route_message(message, "test_user") print(f"模式: {result.get('mode', 'unknown')}") print(f"成功: {result.get('success', False)}") print(f"回應: {result.get('text', 'No response')[:100]}...") if result.get('products_found'): print(f"找到商品數量: {result['products_found']}") except Exception as e: print(f"❌ 錯誤: {str(e)}") # 顯示統計 print(f"\n📊 路由統計:") stats = router.get_route_statistics() for mode, count in stats['stats'].items(): print(f" {mode}: {count}") def test_product_query_service(): """測試 Pydantic AI 商品查詢服務""" print("\n🛍️ 測試 Pydantic AI 商品查詢服務...") try: service = ProductQueryService() if not service.is_available(): print("❌ Pydantic AI 服務不可用 (請檢查 GROQ_API_KEY)") return # 測試意圖分析 test_messages = [ "是否有推薦貓砂?", "有什麼狗糧推薦?", "查詢iPhone庫存", "今天天氣如何?", # 非商品查詢 ] print("\n🔍 意圖分析測試:") for message in test_messages: intent = service.analyze_query_intent(message) print(f" '{message}' -> 商品查詢: {intent['is_product_query']}, 信心度: {intent['confidence']:.2f}") # 測試實際查詢 print("\n🛍️ 實際查詢測試:") query_result = service.process_product_query_sync("是否有推薦貓砂?", "test_user") print(f"成功: {query_result['success']}") print(f"意圖: {query_result.get('intent', 'unknown')}") print(f"回應: {query_result.get('text', 'No response')}") if query_result.get('products_found'): print(f"找到商品: {query_result['products_found']}") except Exception as e: print(f"❌ 測試錯誤: {str(e)}") def test_enhanced_product_service(): """測試增強商品服務""" print("\n🔧 測試增強商品服務...") try: service = EnhancedProductService() # 測試商品推薦 print("🎯 測試商品推薦功能:") result = service.get_product_recommendations("貓砂", limit=5) print(f"成功: {result.success}") print(f"找到商品數量: {result.count}") if result.success and result.data: print("推薦商品:") for i, product in enumerate(result.data[:3], 1): print(f" {i}. {product.get('product_name', 'N/A')} - 庫存: {product.get('current_stock', 0)}") elif result.error: print(f"錯誤: {result.error}") # 測試進階搜尋 print("\n🔍 測試進階搜尋功能:") result = service.search_products_advanced("寵物", include_stock_info=True, limit=3) print(f"成功: {result.success}") print(f"找到商品數量: {result.count}") if result.success and result.data: print("搜尋結果:") for i, product in enumerate(result.data, 1): print(f" {i}. {product.get('product_name', 'N/A')} - {product.get('stock_status', 'N/A')}") except Exception as e: print(f"❌ 測試錯誤: {str(e)}") def test_database_connection(): """測試資料庫連接""" print("\n🗄️ 測試資料庫連接...") try: from backend.database.connection import test_database_connection if test_database_connection(): print("✅ 資料庫連接正常") else: print("❌ 資料庫連接失敗") except Exception as e: print(f"❌ 資料庫測試錯誤: {str(e)}") def main(): """主測試函數""" print("🚀 開始 Pydantic AI 整合測試\n") # 1. 測試資料庫連接 test_database_connection() # 2. 測試增強商品服務 test_enhanced_product_service() # 3. 測試 Pydantic AI 服務 test_product_query_service() # 4. 測試訊息路由器 test_message_router() print("\n✅ 測試完成!") if __name__ == "__main__": # 檢查環境變數 from backend.config import settings print("🔧 環境檢查:") print(f" GROQ_API_KEY: {'✅ 已設定' if settings.GROQ_API_KEY else '❌ 未設定'}") print(f" DATABASE_URL: {'✅ 已設定' if settings.DATABASE_URL else '❌ 未設定'}") print() # 執行測試 main()