# Anonymous vs Profile History

Hệ thống định danh người dùng dựa trên `identity_key` được xử lý động qua Middleware trong mỗi request.

## Cơ chế phân giải Identity
1. **Khách vãng lai (Guest):** Middleware trích xuất `device_id` từ Token hoặc Header. Nếu không có, fallback thành `unknown_{host}`. Lúc này `identity_key = device_id`.
2. **Khách đã đăng nhập (Profile):** Middleware trích xuất `user_id` từ Access Token, xác nhận `is_authenticated = True`. Lúc này `identity_key = user_id`.

## Lưu trữ History trong Redis
Hiện tại (theo mã nguồn `ConversationManager`), toàn bộ lịch sử được lưu trữ tại **Redis** với TTL là **30 phút** (1800 giây), giúp giảm tải cho DB chính.
- Định dạng Key: `chat_history:{identity_key}:{conversation_id}`
- Default key: `chat_history:{identity_key}:default`

Mỗi lượt chat (turn) lưu dưới dạng JSON list (lưu đồng thời `is_human=True` và `is_human=False`).