|
""" |
|
測試 Pydantic AI 整合 - 驗證商品查詢功能 |
|
特別測試 "是否有推薦貓砂?" 這類查詢的準確性 |
|
""" |
|
|
|
import asyncio |
|
import sys |
|
import os |
|
|
|
|
|
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") |
|
|
|
|
|
test_database_connection() |
|
|
|
|
|
test_enhanced_product_service() |
|
|
|
|
|
test_product_query_service() |
|
|
|
|
|
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() |
|
|