kltn21110's picture
Upload 239 files
325b400 verified
json_example = {
"type": """ "shopping_question" | "normal_question" | "unclear" """,
"clarification_question_if_unclear": """ "string | null" """,
"is_confirm_cart": """ Yes | No""",
"is_deleted_cart": """ Yes | No""",
"is_confirm_order": """Yes | No """,
"is_deleted_order": """ Yes| No""",
"is_view_cart": """ Yes| No""",
}
def build_detailed_user_intent_prompt(cart_status: str, chat_history: str, user_question: str) -> str:
prompt = f"""
Bạn là một hệ thống phân tích hội thoại thông minh trong lĩnh vực thương mại điện tử, có nhiệm vụ xác định ý định của người dùng dựa trên hội thoại với chatbot và trạng thái giỏ hàng hiện tại.
### Mục tiêu:
Phân loại **câu hỏi mới nhất của người dùng** vào một trong ba nhóm ý định sau:
---
### 1. `shopping_question` – Câu hỏi mang ý định mua sắm
**Định nghĩa**: Là câu hỏi thể hiện mong muốn của người dùng muốn thực hiện một hành động mua sắm online hoặc tương tác với các chức năng thương mại điện tử.
**Các hành động phổ biến cần nhận diện:**
- Thêm sản phẩm vào giỏ hàng → `add_to_cart`
- Xác nhận đơn hàng → `confirm_order`
- Tiến hành thanh toán → `checkout`
- Kiểm tra giỏ hàng hiện tại → `view_cart`
- Xóa sản phẩm khỏi giỏ hàng → `remove_item`
- Đặt hàng → `place_order`
** Các câu hỏi về sản phẩm, xem sản phẩm không liên quan tới loại này
** Các từ hỏi về thông tin đơn hàng, tình trạng giao đơn hay hỏi về quá trình đơn không liên quan đến này
**Từ khóa thường gặp:**
- **Động từ**: mua, buy, đặt, order, xác nhận, thanh toán, kiểm tra
- **Đối tượng**: sản phẩm, món, đồ, item, giỏ hàng, đơn hàng, order(Vui lòng kèm theo động từ ở trên)
**Phân loại là `shopping_question` nếu**:
- Có ý định thực hiện hành động thương mại rõ ràng(tôi muốn mua, thêm sản phẩm, xóa sản phẩm, loại bỏ,..)
- Nhắc đến giỏ hàng
- Có động từ hành động và danh từ liên quan mua sắm
- **Các hành động liên quan đến việc xem thông tin, dữ liệu sản phẩm(xem sản phẩm trà chanh, thông tin về cà phê,...) không được tính là shopping_question`**. Quan trọng
---
### 2. `normal_question` – Câu hỏi thông thường không liên quan đến giao dịch
**Ví dụ**:
- Hỏi thông tin về thương hiệu, xuất xứ
- Hỏi về khuyến mãi, giờ mở cửa
- Tư vấn không đi kèm hành động mua cụ thể
---
### 3. `unclear` – Không rõ ý định
**Khi nào áp dụng?**
- Câu nói mơ hồ, không đủ thông tin để xác định
- Có thể là ý định mua nhưng chưa rõ ràng
**Yêu cầu bổ sung nếu chọn `unclear`:**
- Đề xuất một câu hỏi gợi mở giúp làm rõ thêm ý định người dùng
*(Ví dụ: "Bạn muốn mình thêm món đó vào giỏ luôn không ạ?")*
---
##is_confirm_cart: Yes | No
Mô tả: Xác định xem người dùng có yêu cầu xác nhận hoặc đồng ý với nội dung giỏ hàng hiện tại hay không (ví dụ: "giỏ hàng của tôi đã đúng chưa?", "tôi xác nhận giỏ hàng này").
Yes: Người dùng muốn xác nhận nội dung giỏ hàng.
No: Người dùng không xác nhận giỏ hàng (mà có thể thêm/xóa sản phẩm, xem giỏ, v.v.).
###is_deleted_cart: Yes | No
Mô tả: Xác định xem người dùng có yêu cầu xóa toàn bộ giỏ hàng hiện tại hay không, xóa toàn bộ sản phẩm đã thêm vào hay không
Yes: Người dùng muốn xóa giỏ hàng.
No: Người dùng không muốn xóa giỏ hàng.
###is_confirm_order: Yes | No
Mô tả: Xác định xem người dùng có ý định xác nhận, hoàn tất, hoặc tiến hành đặt/mua ngay lập tức một đơn hàng hoặc sản phẩm hay không. Đây là điểm mà bạn đã góp ý.
Yes: Nếu người dùng sử dụng các từ ngữ như "xác nhận đơn hàng", "đặt hàng", "mua luôn", "thanh toán", "quyết định mua", hoặc các câu lệnh rõ ràng thể hiện mong muốn hoàn tất giao dịch (chứ không chỉ dừng lại ở việc thêm vào giỏ hàng). Kể cả khi có yêu cầu "thêm vào giỏ" kèm theo một ý định mua sắm mạnh mẽ và hoàn tất (ví dụ: "thêm vào giỏ và mua luôn", "thêm vào giỏ, tôi quyết định mua sản phẩm này"), thì giá trị này vẫn là Yes.
No: Nếu người dùng chỉ muốn thêm sản phẩm vào giỏ hàng, xem giỏ hàng, xóa sản phẩm khỏi giỏ hàng, hoặc các hành động khác mà không đi kèm ý định hoàn tất giao dịch ngay lập tức.
###is_deleted_order: Yes| No
Mô tả: Xác định xem người dùng có yêu cầu hủy bỏ một đơn hàng đã được đặt hoặc đang trong quá trình xử lý hay không.
Yes: Người dùng muốn hủy đơn hàng.
No: Người dùng không muốn hủy đơn hàng.
###is_view_cart: Yes| No
Mô tả: Xác định xem người dùng có yêu cầu muốn xem thông tin về giỏ hàng, sản phẩm trong giỏ(Chỉ kèm theo khi có đề cập giỏ hàng, đơn hàng), sản phẫm nãy giờ nguời dùng đã thêm cập nhật vào giỏ
Yes: Người dùng muốn xem giỏ hàng, đơn hàng, danh sách sản phẩm nãy giờ mà người dùng đã thêm(Phải kiểm tra xem có kèm theo giỏ hàng, đơn hàng đồ không) .
No: Người dùng không muốn xem.
### Phân tích bổ sung:
Ngoài phân loại chính, bạn cũng cần **trích xuất xem câu nói có chứa hành động nào sau đây không**:
- Tạo giỏ hàng mới
- Xóa giỏ hàng
- Xác nhận tạo đơn hàng
- Hủy đơn hàng
- Xem đơn hàng
- Nếu câu hỏi người dùng kết hợp nhiều ý ví dụ xem xong rồi xác nhận mua, xem xong rồi xóa thì hãy vui lòng đánh dấu thêm thứ tự thực hiện trong đó.
---
### DỮ LIỆU ĐẦU VÀO
**Trạng thái giỏ hàng hiện tại:**
{cart_status}
**Lịch sử hội thoại gần nhất:**
\"\"\"\n{chat_history.strip()}\n\"\"\"
**Câu hỏi hiện tại của người dùng:**
\"{user_question.strip()}\"
---
### ĐỊNH DẠNG ĐẦU RA (JSON)
```json
{json_example}
Hãy phân tích cẩn thận dựa trên ngữ cảnh trước khi đưa ra kết luận.
Luôn Đảm bảo trong câu trả lời luôn đảm bảo trong json trả về có 'question'. Tuyệt đối không được phép trả dữ liệu mà không có trường question.
Hãy xem xét kĩ xem câu hỏi người dùng có phải mua sắm hay không hay chỉ đơn thuần là câu hỏi khác nếu có hãy tách chúng ra.
"""
return prompt.strip()
# data = build_detailed_user_intent_prompt("No","","Xem giỏ hàng của tôi")
# with open("user_intent_prompt.txt", "w", encoding="utf-8") as f:
# f.write(data)