# 5. Thêm Tool mới

**Yêu cầu mẫu:** Tích hợp tool `check_store_location` để AI báo khách cửa hàng nào gần nhà còn đồ.

## Quy trình 3 bước

### Bước 1: Viết logic tool

```python
# Tạo file: backend/agent/tools/store_locator.py

def check_store_location(sku: str, lat: float, lng: float) -> dict:
    """
    Tìm cửa hàng Canifa gần nhất còn sản phẩm SKU này.
    Returns: { "store_name": "...", "address": "...", "distance_km": 2.5 }
    """
    stores = canifa_api.get_stores_with_stock(sku)
    nearest = min(stores, key=lambda s: haversine(lat, lng, s.lat, s.lng))
    return {
        "store_name": nearest.name,
        "address": nearest.address,
        "distance_km": round(haversine(lat, lng, nearest.lat, nearest.lng), 1)
    }
```

### Bước 2: Đăng ký tool vào ClassifierOutput

```python
# graph.py — Thêm tên tool vào description
class ClassifierOutput(BaseModel):
    tool_name: str | None = Field(
        description="Ten tool can goi. "
                    "lead_search_tool: tim san pham. "
                    "check_store_location: tim cua hang gan. "  # ← MỚI
                    "Null neu khach chi dang tam su."
    )
```

### Bước 3: Kết nối tool vào registry

```python
# graph.py — Thêm vào tool registry
self._tool_registry = {
    "lead_search_tool": self._lead_search_tool,
    "check_store_location": check_store_location,  # ← MỚI
}
```

## Lưu ý quan trọng

- Bất kỳ sửa đổi nào ở **Classifier** (đầu vào) sẽ ảnh hưởng toàn bộ luồng phía sau
- Tool mới cần có **timeout** (max 3s) và **fallback** nếu API fail
- Sau khi thêm tool, cập nhật `CLASSIFIER_SYSTEM_PROMPT` để AI biết **khi nào** nên gọi tool mới
