# 6. Troubleshooting & Gotchas

## Classifier trả về Structured Output lỗi

**Triệu chứng:** API trả 500, log `[CLASSIFIER]` báo `OutputParserException`.

**Nguyên nhân:** Model không tuân thủ JSON schema → `with_structured_output()` parse fail.

**Sửa:**
1. Kiểm tra model có hỗ trợ `function_calling` không (GPT-4o, Claude 3.5 hỗ trợ; GPT-3.5 không ổn định)
2. Giảm độ phức tạp `ClassifierOutput` schema nếu cần
3. Thêm `strict=True` vào `with_structured_output()` nếu dùng OpenAI

## Stylist sinh câu trả lời quá dài (> 200 từ)

**Triệu chứng:** Tin nhắn AI dài 500+ từ, khách không đọc hết.

**Nguyên nhân:** `STYLIST_SYSTEM_PROMPT` chưa enforce giới hạn từ đủ mạnh.

**Sửa:** Thêm vào prompt:
```
- GIỚI HẠN TỐI ĐA 200 TỪ. NẾU CÓ NHIỀU SP, CHỈ HIGHLIGHT 2-3 SP TỐT NHẤT.
```

## Early Exit nhưng vẫn gọi Tool

**Triệu chứng:** Classifier trả `tool_name = null` nhưng pipeline vẫn chạy vào Stylist Node và gọi Tool.

**Nguyên nhân:** Bug trong conditional edge — `state.get("early_exit")` trả `None` thay vì `True`.

**Sửa:** Kiểm tra `_classifier_node()` có set `state["early_exit"] = True` khi `tool_name is None` không.

## Stylist không cập nhật InsightJSON

**Triệu chứng:** `updated_insight` luôn null → InsightJSON không thay đổi qua các turn.

**Nguyên nhân:** Stylist model không xuất đúng `StylistOutput` schema → `user_insight` field bị skip.

**Sửa:**
1. Kiểm tra `StylistOutput` schema có match với model output không
2. Thêm explicit instruction vào prompt: "BẮT BUỘC cập nhật user_insight mỗi turn"

## 2 Agent gọi cùng 1 model (lãng phí)

**Triệu chứng:** Cả Classifier và Stylist đều dùng GPT-4o → chi phí gấp đôi.

**Sửa:** Classifier nên dùng model nhẹ hơn:

| Agent | Recommended Model | Cost |
|---|---|---|
| Classifier | GPT-4o-mini / Claude 3 Haiku | $0.15/1M tokens |
| Stylist | GPT-4o / Claude 3.5 Sonnet | $2.50/1M tokens |
