Update generator.py
Browse files- generator.py +20 -6
generator.py
CHANGED
@@ -29,7 +29,12 @@ def format_sources(docs):
|
|
29 |
sources.add(filename)
|
30 |
return "\n".join(f"- {src}" for src in sorted(sources))
|
31 |
|
32 |
-
def answer_query(query, model="Gemini Pro", temperature=0.2):
|
|
|
|
|
|
|
|
|
|
|
33 |
all_docs = retrieve_docs(query)
|
34 |
if not all_docs:
|
35 |
return "Không tìm thấy tài liệu liên quan để trả lời.", []
|
@@ -37,23 +42,31 @@ def answer_query(query, model="Gemini Pro", temperature=0.2):
|
|
37 |
docs = filter_relevant_docs(all_docs, query)
|
38 |
context = "\n\n".join([doc.page_content for doc in docs])
|
39 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
40 |
prompt = f"""
|
41 |
-
Dựa trên tài liệu sau, hãy trả lời câu hỏi theo phong cách trang trọng, lịch sự và chuyên nghiệp:
|
42 |
{context}
|
43 |
Câu hỏi: {query}
|
44 |
-
|
45 |
Yêu cầu:
|
46 |
- Luôn sử dụng từ ngữ lịch sự ("Bạn cần...", "Vui lòng...", "Sau khi...").
|
47 |
- Tránh dùng từ nói miệng như "nhé", "nha", "ok".
|
48 |
- Câu trả lời cần đầy đủ, rõ ràng, không mơ hồ.
|
|
|
49 |
- Chỉ sử dụng thông tin có trong tài liệu. Nếu không có thông tin liên quan, trả lời: "Thông tin không có trong tài liệu được cung cấp."
|
50 |
- Không được nhắc đến việc đã tham khảo hay nguồn tài liệu.
|
51 |
- Nếu người dùng yêu cầu, vui lòng cung cấp câu trả lời bằng ngôn ngữ khác hoặc viết code chính xác, đầy đủ theo yêu cầu.
|
52 |
- Trả lời như một chatbot thông thường, không cần giải thích về quy trình hay tài liệu.
|
53 |
-
|
54 |
Trả lời:
|
55 |
"""
|
56 |
|
|
|
57 |
url = f"https://generativelanguage.googleapis.com/v1/models/gemini-2.0-flash:generateContent?key={API_KEY}"
|
58 |
headers = {"Content-Type": "application/json"}
|
59 |
payload = {
|
@@ -64,10 +77,11 @@ Trả lời:
|
|
64 |
response = requests.post(url, headers=headers, json=payload)
|
65 |
data = response.json()
|
66 |
|
|
|
67 |
try:
|
68 |
answer = data['candidates'][0]['content']['parts'][0]['text']
|
69 |
except Exception as e:
|
70 |
-
print("🔴
|
71 |
answer = "Lỗi khi gọi Gemini API: " + str(e)
|
72 |
|
73 |
-
return answer, docs
|
|
|
29 |
sources.add(filename)
|
30 |
return "\n".join(f"- {src}" for src in sorted(sources))
|
31 |
|
32 |
+
def answer_query(query, model="Gemini Pro", temperature=0.2, history=None):
|
33 |
+
# Khởi tạo lịch sử nếu None
|
34 |
+
if history is None:
|
35 |
+
history = []
|
36 |
+
|
37 |
+
# Lấy và lọc tài liệu
|
38 |
all_docs = retrieve_docs(query)
|
39 |
if not all_docs:
|
40 |
return "Không tìm thấy tài liệu liên quan để trả lời.", []
|
|
|
42 |
docs = filter_relevant_docs(all_docs, query)
|
43 |
context = "\n\n".join([doc.page_content for doc in docs])
|
44 |
|
45 |
+
# Định dạng lịch sử hội thoại
|
46 |
+
history_text = ""
|
47 |
+
if history:
|
48 |
+
history_text = "Lịch sử hội thoại:\n"
|
49 |
+
for exchange in history:
|
50 |
+
history_text += f"Người dùng: {exchange['user']}\nTrợ lý: {exchange['assistant']}\n\n"
|
51 |
+
|
52 |
+
# Tạo prompt với lịch sử hội thoại
|
53 |
prompt = f"""
|
54 |
+
{history_text}Dựa trên tài liệu sau, hãy trả lời câu hỏi theo phong cách trang trọng, lịch sự và chuyên nghiệp:
|
55 |
{context}
|
56 |
Câu hỏi: {query}
|
|
|
57 |
Yêu cầu:
|
58 |
- Luôn sử dụng từ ngữ lịch sự ("Bạn cần...", "Vui lòng...", "Sau khi...").
|
59 |
- Tránh dùng từ nói miệng như "nhé", "nha", "ok".
|
60 |
- Câu trả lời cần đầy đủ, rõ ràng, không mơ hồ.
|
61 |
+
- Đọc kĩ các tài liệu để đưa ra câu trả lời liên quan và chính xác nhất
|
62 |
- Chỉ sử dụng thông tin có trong tài liệu. Nếu không có thông tin liên quan, trả lời: "Thông tin không có trong tài liệu được cung cấp."
|
63 |
- Không được nhắc đến việc đã tham khảo hay nguồn tài liệu.
|
64 |
- Nếu người dùng yêu cầu, vui lòng cung cấp câu trả lời bằng ngôn ngữ khác hoặc viết code chính xác, đầy đủ theo yêu cầu.
|
65 |
- Trả lời như một chatbot thông thường, không cần giải thích về quy trình hay tài liệu.
|
|
|
66 |
Trả lời:
|
67 |
"""
|
68 |
|
69 |
+
# Gọi API Gemini
|
70 |
url = f"https://generativelanguage.googleapis.com/v1/models/gemini-2.0-flash:generateContent?key={API_KEY}"
|
71 |
headers = {"Content-Type": "application/json"}
|
72 |
payload = {
|
|
|
77 |
response = requests.post(url, headers=headers, json=payload)
|
78 |
data = response.json()
|
79 |
|
80 |
+
# Xử lý phản hồi từ API
|
81 |
try:
|
82 |
answer = data['candidates'][0]['content']['parts'][0]['text']
|
83 |
except Exception as e:
|
84 |
+
print("🔴 Phản hồi từ Gemini:", data)
|
85 |
answer = "Lỗi khi gọi Gemini API: " + str(e)
|
86 |
|
87 |
+
return answer, docs
|