davidtran999's picture
Push full code from hue-portal-backend folder
519b145
# Chatbot API Endpoints
## Overview
This document describes the chatbot API endpoints available in the system.
## Base URL
- Default: `http://localhost:8000`
- Override via env when running test scripts:
```bash
export API_BASE_URL=http://localhost:8090 # e.g. when runserver uses port 8090
```
## Endpoints
### 1. Health Check
**Endpoint**: `GET /api/chatbot/health/`
**Description**: Check the health status of the chatbot service.
**Response**:
```json
{
"status": "healthy",
"service": "chatbot",
"classifier_loaded": true
}
```
**Example**:
```bash
curl http://localhost:8000/api/chatbot/health/
```
### 2. Chat
**Endpoint**: `POST /api/chat/`
**Description**: Send a message to the chatbot and get a response.
**Request Body**:
```json
{
"message": "Làm thủ tục cư trú cần gì?"
}
```
**Response**:
```json
{
"message": "Tôi tìm thấy 5 thủ tục liên quan đến 'Làm thủ tục cư trú cần gì?':\n\n1. Đăng ký thường trú\n ...",
"intent": "search_procedure",
"confidence": 0.95,
"results": [
{
"type": "procedure",
"data": {
"id": 1,
"title": "Đăng ký thường trú",
"domain": "Cư trú",
...
}
}
],
"count": 5
}
```
**Example**:
```bash
curl -X POST http://localhost:8000/api/chat/ \
-H "Content-Type: application/json" \
-d '{"message": "Làm thủ tục cư trú cần gì?"}'
```
## Intent Types
The chatbot can classify queries into the following intents:
- `search_fine`: Search for traffic fines
- `search_procedure`: Search for administrative procedures
- `search_office`: Search for office/unit information
- `search_advisory`: Search for security advisories
- `general_query`: General queries
- `greeting`: Greetings
## Response Fields
- `message`: The response message to display to the user
- `intent`: The classified intent
- `confidence`: Confidence score (0.0 to 1.0)
- `results`: Array of search results
- `count`: Number of results found
## Error Handling
### 400 Bad Request
```json
{
"error": "message is required"
}
```
### 500 Internal Server Error
```json
{
"message": "Xin lỗi, có lỗi xảy ra. Vui lòng thử lại.",
"intent": "error",
"error": "Error details",
"results": [],
"count": 0
}
```
## Testing
Use the provided test script:
```bash
cd backend
API_BASE_URL=http://localhost:8090 \\
POSTGRES_HOST=localhost POSTGRES_PORT=5433 \\
python scripts/test_api_endpoint.py
```
The script automatically:
- Hits `GET /api/chatbot/health/` to confirm classifier loading.
- Sends six representative queries and reports status, intent, confidence, latency, and first result title.
## API Endpoint Testing & Fixes — 2025-11-14
- Added trailing slashes to `backend/hue_portal/chatbot/urls.py` and `backend/hue_portal/core/urls.py` so `/api/chatbot/health/` and `/api/chat/` resolve correctly.
- Hardened chatbot serialization via `_serialize_document` to avoid `TypeError: Object of type type is not JSON serializable`.
- Latest test run:
- Command: `API_BASE_URL=http://localhost:8090 POSTGRES_HOST=localhost POSTGRES_PORT=5433 python scripts/test_api_endpoint.py`
- Result: **6/6** successful queries, **100 % intent accuracy**, avg latency **~3.7 s** (first call includes SentenceTransformer warm-up).
- Checklist before running tests:
1. `POSTGRES_HOST=localhost POSTGRES_PORT=5433 ../../.venv/bin/python manage.py runserver 0.0.0.0:8090`
2. Ensure `API_BASE_URL` matches runserver port.
3. (Optional) export `DJANGO_DEBUG=1` for verbose stack traces during local debugging.
## Notes
- The API uses RAG (Retrieval-Augmented Generation) pipeline for generating responses
- Hybrid search (BM25 + Vector similarity) is used for retrieval
- Intent classification uses ML model with keyword-based fallback
- Response latency typically ranges from 200-1000ms depending on query complexity