linebot_pydantic_fastapi / test_api_cat_litter.py
mickeywu520's picture
修復商品查詢功能,解決貓砂等商品無法找到的問題
89879a0
"""
通過 API 測試貓砂查詢功能
"""
import requests
import json
def test_api_endpoints():
"""測試 API 端點"""
base_url = "http://localhost:7860"
print("🚀 開始 API 測試\n")
# 1. 測試健康檢查
print("1. 測試健康檢查...")
try:
response = requests.get(f"{base_url}/health", timeout=10)
print(f" 狀態碼: {response.status_code}")
if response.status_code == 200:
print(f" 回應: {response.json()}")
print(" ✅ 健康檢查通過\n")
except Exception as e:
print(f" ❌ 健康檢查失敗: {str(e)}\n")
return False
# 2. 測試智能路由 API
print("2. 測試智能路由 API...")
test_messages = [
"你好, 請問有沒有貓砂相關產品?",
"是否有推薦貓砂?",
"有什麼寵物用品?",
"查詢狗糧庫存",
"你好!今天天氣如何?" # 非商品查詢
]
for i, message in enumerate(test_messages, 1):
print(f"\n 測試 {i}: '{message}'")
try:
payload = {
"message": message,
"user_id": "test_user_api"
}
response = requests.post(
f"{base_url}/route",
json=payload,
timeout=30,
headers={"Content-Type": "application/json"}
)
print(f" 狀態碼: {response.status_code}")
if response.status_code == 200:
result = response.json()
print(f" 模式: {result.get('mode', 'unknown')}")
print(f" 成功: {result.get('success', False)}")
# 顯示回應內容
response_text = result.get('text', 'No response')
if len(response_text) > 150:
print(f" 回應: {response_text[:150]}...")
else:
print(f" 回應: {response_text}")
# 如果是商品查詢,顯示額外資訊
if result.get('products_found') is not None:
print(f" 找到商品: {result['products_found']}")
if result.get('has_recommendations'):
print(f" 包含推薦: {result['has_recommendations']}")
else:
print(f" ❌ API 錯誤: {response.text}")
except Exception as e:
print(f" ❌ 請求失敗: {str(e)}")
# 3. 測試專門的商品查詢 API
print(f"\n3. 測試專門的商品查詢 API...")
product_queries = [
"是否有推薦貓砂?",
"有什麼寵物用品?",
"查詢貓相關產品"
]
for i, query in enumerate(product_queries, 1):
print(f"\n 商品查詢 {i}: '{query}'")
try:
payload = {
"message": query,
"user_id": "test_user_product"
}
response = requests.post(
f"{base_url}/product-query",
json=payload,
timeout=30,
headers={"Content-Type": "application/json"}
)
print(f" 狀態碼: {response.status_code}")
if response.status_code == 200:
result = response.json()
print(f" 成功: {result.get('success', False)}")
response_text = result.get('text', 'No response')
if len(response_text) > 150:
print(f" 回應: {response_text[:150]}...")
else:
print(f" 回應: {response_text}")
if result.get('products_found') is not None:
print(f" 找到商品: {result['products_found']}")
if result.get('error'):
print(f" 錯誤: {result['error']}")
else:
print(f" ❌ API 錯誤: {response.text}")
except Exception as e:
print(f" ❌ 請求失敗: {str(e)}")
# 4. 測試傳統搜尋 API
print(f"\n4. 測試傳統搜尋 API...")
search_queries = [
"貓砂",
"寵物用品",
"貓"
]
for i, query in enumerate(search_queries, 1):
print(f"\n 搜尋 {i}: '{query}'")
try:
payload = {
"message": query,
"user_id": "test_user_search"
}
response = requests.post(
f"{base_url}/search",
json=payload,
timeout=30,
headers={"Content-Type": "application/json"}
)
print(f" 狀態碼: {response.status_code}")
if response.status_code == 200:
result = response.json()
print(f" 成功: {result.get('success', False)}")
response_text = result.get('text', 'No response')
if len(response_text) > 150:
print(f" 回應: {response_text[:150]}...")
else:
print(f" 回應: {response_text}")
else:
print(f" ❌ API 錯誤: {response.text}")
except Exception as e:
print(f" ❌ 請求失敗: {str(e)}")
def main():
"""主函數"""
print("🧪 貓砂查詢 API 測試")
print("=" * 50)
test_api_endpoints()
print("\n" + "=" * 50)
print("✅ API 測試完成!")
print("\n💡 分析建議:")
print("1. 檢查智能路由是否正確識別商品查詢意圖")
print("2. 比較不同 API 端點的回應差異")
print("3. 確認是否真的沒有貓砂相關商品,還是查詢邏輯問題")
if __name__ == "__main__":
main()