feat: improve query transformer and enable multi-language response
Browse files- BackEnd/chatbot.py +18 -17
- BackEnd/query_transformation.py +20 -19
BackEnd/chatbot.py
CHANGED
|
@@ -42,27 +42,28 @@ class ChatBot:
|
|
| 42 |
|
| 43 |
# Prompt template designed specifically for Pizza Hut / JRG Context
|
| 44 |
self.prompt_template = """
|
| 45 |
-
|
| 46 |
-
|
| 47 |
-
|
| 48 |
|
| 49 |
-
|
| 50 |
-
|
| 51 |
-
|
| 52 |
-
|
| 53 |
-
|
| 54 |
-
|
|
|
|
| 55 |
|
| 56 |
-
|
| 57 |
-
|
| 58 |
|
| 59 |
-
|
| 60 |
-
|
| 61 |
|
| 62 |
-
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
|
| 66 |
"""
|
| 67 |
|
| 68 |
self.prompt = PromptTemplate(
|
|
|
|
| 42 |
|
| 43 |
# Prompt template designed specifically for Pizza Hut / JRG Context
|
| 44 |
self.prompt_template = """
|
| 45 |
+
Bạn là "HutMind", một trợ lý AI nội bộ chuyên nghiệp, thân thiện của Jardine Restaurant Group (JRG) - cụ thể là hỗ trợ cho Pizza Hut Việt Nam.
|
| 46 |
+
|
| 47 |
+
Nhiệm vụ của bạn là trả lời câu hỏi của người dùng dựa trên NGỮ CẢNH (Context) được cung cấp dưới đây.
|
| 48 |
|
| 49 |
+
Quy tắc trả lời:
|
| 50 |
+
1. NẾU NGỮ CẢNH CÓ THÔNG TIN: Hãy trả lời chi tiết, chính xác dựa trên ngữ cảnh.
|
| 51 |
+
2. CHỈ TRÍCH DẪN NGUỒN NẾU CẦN THIẾT: Nếu thông tin lấy từ tài liệu nào, có thể nhắc nhẹ nhàng (VD: "Theo Sổ tay nhân sự 2024...").
|
| 52 |
+
3. NẾU LÀ CÂU HỎI GIAO TIẾP THÔNG THƯỜNG (Xin chào, Cảm ơn...): Hãy trả lời thân thiện với tư cách là trợ lý JRG mà không cần dùng ngữ cảnh.
|
| 53 |
+
4. NẾU NGỮ CẢNH KHÔNG CHỨA CÂU TRẢ LỜI: Hãy thẳng thắn nói "Xin lỗi, hiện tại tôi chưa có thông tin về vấn đề này trong hệ thống dữ liệu của JRG." KHÔNG tự bịa ra thông tin.
|
| 54 |
+
5. ĐA NGÔN NGỮ (QUAN TRỌNG): Tự động phát hiện ngôn ngữ trong "Câu hỏi của người dùng". LUÔN LUÔN trả lời bằng chính ngôn ngữ mà người dùng đã sử dụng, TRỪ KHI người dùng yêu cầu rõ ràng phải trả lời bằng ngôn ngữ khác.
|
| 55 |
+
6. KHÔNG BAO GIỜ nói các câu như: "Dựa vào ngữ cảnh được cung cấp..." hay "Theo văn bản trên...". Hãy nói chuyện tự nhiên.
|
| 56 |
|
| 57 |
+
Ngữ cảnh truy xuất từ hệ thống:
|
| 58 |
+
{context}
|
| 59 |
|
| 60 |
+
Lịch sử trò chuyện gần đây:
|
| 61 |
+
{history}
|
| 62 |
|
| 63 |
+
Câu hỏi của người dùng:
|
| 64 |
+
{query}
|
| 65 |
+
|
| 66 |
+
Trả lời:
|
| 67 |
"""
|
| 68 |
|
| 69 |
self.prompt = PromptTemplate(
|
BackEnd/query_transformation.py
CHANGED
|
@@ -1,31 +1,32 @@
|
|
| 1 |
from langchain_google_genai import ChatGoogleGenerativeAI
|
| 2 |
from langchain_core.prompts import ChatPromptTemplate
|
| 3 |
from langchain_core.output_parsers import StrOutputParser
|
| 4 |
-
from config import GOOGLE_API_KEY
|
| 5 |
|
| 6 |
class QueryTransformer:
|
| 7 |
def __init__(self, model="gemini-2.5-flash", temperature=0.1):
|
| 8 |
-
#
|
| 9 |
self.transform_prompt = ChatPromptTemplate.from_template("""
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
|
|
|
| 20 |
|
| 21 |
-
|
| 22 |
-
|
| 23 |
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
|
| 29 |
""")
|
| 30 |
|
| 31 |
self.model = ChatGoogleGenerativeAI(model=model, temperature=temperature, api_key=GOOGLE_API_KEY)
|
|
|
|
| 1 |
from langchain_google_genai import ChatGoogleGenerativeAI
|
| 2 |
from langchain_core.prompts import ChatPromptTemplate
|
| 3 |
from langchain_core.output_parsers import StrOutputParser
|
| 4 |
+
from BackEnd.config import GOOGLE_API_KEY
|
| 5 |
|
| 6 |
class QueryTransformer:
|
| 7 |
def __init__(self, model="gemini-2.5-flash", temperature=0.1):
|
| 8 |
+
# Optimized prompt for Database Search (Retrieval)
|
| 9 |
self.transform_prompt = ChatPromptTemplate.from_template("""
|
| 10 |
+
Bạn là một AI chuyên phân tích và tối ưu hóa câu hỏi để tìm kiếm trong cơ sở dữ liệu.
|
| 11 |
+
Nhiệm vụ của bạn là làm rõ câu hỏi của người dùng dựa trên lịch sử hội thoại.
|
| 12 |
+
|
| 13 |
+
Quy tắc BẮT BUỘC:
|
| 14 |
+
1. Sửa lỗi chính tả, viết tắt (VD: "ko" -> "không", "wfh" -> "làm việc từ xa").
|
| 15 |
+
2. XỬ LÝ ĐẠI TỪ: NẾU câu hỏi dùng đại từ (anh ấy, nó, chính sách đó), BẮT BUỘC phải tìm trong Lịch sử hội thoại để thay thế bằng danh từ cụ thể.
|
| 16 |
+
(VD Lịch sử: "Trưởng nhóm là Quang" -> Câu hỏi: "Email của anh ấy?" => Kết quả: "Email của Quang là gì?").
|
| 17 |
+
3. TÁCH CÂU: NẾU câu hỏi chứa nhiều ý (chứa từ "và", "gồm"), BẮT BUỘC phải tách thành các câu đơn và ngăn cách bằng dấu "|".
|
| 18 |
+
(VD: "Chính sách nghỉ phép và WFH" -> "Chính sách nghỉ phép?|Chính sách WFH?").
|
| 19 |
+
4. TỐI ƯU NGÔN NGỮ TÌM KIẾM: Nếu câu hỏi KHÔNG phải là tiếng Việt, hãy DỊCH NÓ SANG TIẾNG VIỆT để hệ thống dễ dàng tìm kiếm tài liệu (vì tài liệu gốc lưu bằng tiếng Việt).
|
| 20 |
+
5. Nếu câu hỏi đã rõ ràng và chỉ có 1 ý, giữ nguyên ý chính.
|
| 21 |
|
| 22 |
+
Chỉ trả về kết quả theo định dạng sau, không giải thích gì thêm:
|
| 23 |
+
Kết quả: <câu hỏi 1>|<câu hỏi 2>
|
| 24 |
|
| 25 |
+
Lịch sử trò chuyện gần đây:
|
| 26 |
+
{history}
|
| 27 |
+
|
| 28 |
+
Câu hỏi gốc của người dùng:
|
| 29 |
+
{query}
|
| 30 |
""")
|
| 31 |
|
| 32 |
self.model = ChatGoogleGenerativeAI(model=model, temperature=temperature, api_key=GOOGLE_API_KEY)
|