fix prompt
Browse files- app.py +5 -1
- rag_core/business.py +16 -7
- ui.py +1 -1
app.py
CHANGED
|
@@ -4,19 +4,23 @@ from ui import app_ui
|
|
| 4 |
import gradio as gr
|
| 5 |
import logging
|
| 6 |
|
|
|
|
|
|
|
| 7 |
app = FastAPI()
|
| 8 |
|
| 9 |
@app.post("/ask")
|
| 10 |
async def ask_api(req: Request):
|
| 11 |
data = await req.json()
|
| 12 |
query = data.get("query", "")
|
|
|
|
| 13 |
return answer_query(query)
|
| 14 |
|
| 15 |
@app.post("/rescan")
|
| 16 |
async def rescan_api():
|
|
|
|
| 17 |
return rescan_index()
|
| 18 |
|
| 19 |
# Mount Gradio UI vào FastAPI tại root
|
| 20 |
app = gr.mount_gradio_app(app, app_ui, path="")
|
| 21 |
|
| 22 |
-
logging.info("✅ Gradio UI đã mount vào root /")
|
|
|
|
| 4 |
import gradio as gr
|
| 5 |
import logging
|
| 6 |
|
| 7 |
+
logging.info("🚀 Khởi động ứng dụng FastAPI...")
|
| 8 |
+
|
| 9 |
app = FastAPI()
|
| 10 |
|
| 11 |
@app.post("/ask")
|
| 12 |
async def ask_api(req: Request):
|
| 13 |
data = await req.json()
|
| 14 |
query = data.get("query", "")
|
| 15 |
+
logging.info(f"📥 API /ask nhận query: {query}")
|
| 16 |
return answer_query(query)
|
| 17 |
|
| 18 |
@app.post("/rescan")
|
| 19 |
async def rescan_api():
|
| 20 |
+
logging.info("♻️ API /rescan được gọi")
|
| 21 |
return rescan_index()
|
| 22 |
|
| 23 |
# Mount Gradio UI vào FastAPI tại root
|
| 24 |
app = gr.mount_gradio_app(app, app_ui, path="")
|
| 25 |
|
| 26 |
+
logging.info("✅ Gradio UI đã mount vào root /")
|
rag_core/business.py
CHANGED
|
@@ -8,6 +8,8 @@ from rag_core.utils import log_timed
|
|
| 8 |
retriever = Retriever()
|
| 9 |
ready = retriever.index is not None
|
| 10 |
|
|
|
|
|
|
|
| 11 |
def is_ready():
|
| 12 |
return ready
|
| 13 |
|
|
@@ -18,7 +20,9 @@ def build_index():
|
|
| 18 |
try:
|
| 19 |
with open("data/raw_law.txt", "r", encoding="utf-8") as f:
|
| 20 |
text = f.read()
|
|
|
|
| 21 |
chunks = chunk_legal_text(text)
|
|
|
|
| 22 |
retriever.build(chunks, get_embedding)
|
| 23 |
ready = True
|
| 24 |
logging.info("✅ Xây FAISS index thành công.")
|
|
@@ -38,7 +42,9 @@ def rescan_index():
|
|
| 38 |
try:
|
| 39 |
with open("data/raw_law.txt", "r", encoding="utf-8") as f:
|
| 40 |
text = f.read()
|
|
|
|
| 41 |
chunks = chunk_legal_text(text)
|
|
|
|
| 42 |
retriever.rescan_and_append(chunks, get_embedding)
|
| 43 |
logging.info("✅ Đã cập nhật index với các chunk mới.")
|
| 44 |
return {"status": "✅ Rescan & update thành công."}
|
|
@@ -58,16 +64,19 @@ def answer_query(query: str) -> str:
|
|
| 58 |
for i, doc in enumerate(docs):
|
| 59 |
logging.info(f"🔍 Đoạn {i+1}: {doc[:300]}{'...' if len(doc) > 300 else ''}")
|
| 60 |
|
| 61 |
-
formatted_context = "\n\n".join([f"[Văn bản {i+1}]\n{doc}" for i, doc in enumerate(docs)])
|
| 62 |
prompt = (
|
| 63 |
-
"Bạn là một trợ lý pháp
|
| 64 |
-
|
| 65 |
-
"Hãy trả lời câu hỏi sau dựa trên các trích đoạn trên. "
|
| 66 |
-
"Nếu không đủ thông tin, hãy nói rõ là không tìm thấy.\n\n"
|
| 67 |
-
f"Câu hỏi: {query}\nTrả lời:"
|
| 68 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 69 |
answer = generate_answer(prompt)
|
|
|
|
| 70 |
return {"answer": answer}
|
| 71 |
except Exception as e:
|
| 72 |
logging.error(f"❌ Lỗi khi trả lời câu hỏi: {e}")
|
| 73 |
-
return {"error": str(e)}
|
|
|
|
| 8 |
retriever = Retriever()
|
| 9 |
ready = retriever.index is not None
|
| 10 |
|
| 11 |
+
logging.info("📦 Khởi tạo retriever")
|
| 12 |
+
|
| 13 |
def is_ready():
|
| 14 |
return ready
|
| 15 |
|
|
|
|
| 20 |
try:
|
| 21 |
with open("data/raw_law.txt", "r", encoding="utf-8") as f:
|
| 22 |
text = f.read()
|
| 23 |
+
logging.info(f"📄 Đọc dữ liệu xong, độ dài: {len(text)} ký tự")
|
| 24 |
chunks = chunk_legal_text(text)
|
| 25 |
+
logging.info(f"✂️ Chunking xong, tổng số chunk: {len(chunks)}")
|
| 26 |
retriever.build(chunks, get_embedding)
|
| 27 |
ready = True
|
| 28 |
logging.info("✅ Xây FAISS index thành công.")
|
|
|
|
| 42 |
try:
|
| 43 |
with open("data/raw_law.txt", "r", encoding="utf-8") as f:
|
| 44 |
text = f.read()
|
| 45 |
+
logging.info(f"📄 Đọc dữ liệu xong, độ dài: {len(text)} ký tự")
|
| 46 |
chunks = chunk_legal_text(text)
|
| 47 |
+
logging.info(f"🔁 Rescan: tổng số chunk mới: {len(chunks)}")
|
| 48 |
retriever.rescan_and_append(chunks, get_embedding)
|
| 49 |
logging.info("✅ Đã cập nhật index với các chunk mới.")
|
| 50 |
return {"status": "✅ Rescan & update thành công."}
|
|
|
|
| 64 |
for i, doc in enumerate(docs):
|
| 65 |
logging.info(f"🔍 Đoạn {i+1}: {doc[:300]}{'...' if len(doc) > 300 else ''}")
|
| 66 |
|
|
|
|
| 67 |
prompt = (
|
| 68 |
+
"Bạn là một trợ lý AI có kiến thức pháp luật, hãy trả lời câu hỏi dựa trên các đoạn luật sau. "
|
| 69 |
+
"Chỉ sử dụng thông tin có trong các đoạn, không tự đoán.\n"
|
|
|
|
|
|
|
|
|
|
| 70 |
)
|
| 71 |
+
prompt += "\n\n".join(docs)
|
| 72 |
+
prompt += f"\n\nCâu hỏi: {query}\nTrả lời:"
|
| 73 |
+
|
| 74 |
+
logging.info("🧠 Prompt gửi đến LLM:")
|
| 75 |
+
logging.info(prompt[:1000] + ("..." if len(prompt) > 1000 else ""))
|
| 76 |
+
|
| 77 |
answer = generate_answer(prompt)
|
| 78 |
+
logging.info(f"💬 Câu trả lời từ LLM: {answer}")
|
| 79 |
return {"answer": answer}
|
| 80 |
except Exception as e:
|
| 81 |
logging.error(f"❌ Lỗi khi trả lời câu hỏi: {e}")
|
| 82 |
+
return {"error": str(e)}
|
ui.py
CHANGED
|
@@ -4,7 +4,6 @@ from rag_core.business import build_index, rescan_index, answer_query, retriever
|
|
| 4 |
import os
|
| 5 |
os.environ["SPACE_HOST"] = "https://vietcat-ragsample.hf.space"
|
| 6 |
|
| 7 |
-
|
| 8 |
logging.info("🎨 Khởi tạo Gradio UI...")
|
| 9 |
|
| 10 |
def handle_rebuild():
|
|
@@ -18,6 +17,7 @@ def handle_rebuild():
|
|
| 18 |
return result["status"]
|
| 19 |
|
| 20 |
def handle_query(query):
|
|
|
|
| 21 |
result = answer_query(query)
|
| 22 |
return result.get("answer", result.get("error", "❌ Lỗi không xác định."))
|
| 23 |
|
|
|
|
| 4 |
import os
|
| 5 |
os.environ["SPACE_HOST"] = "https://vietcat-ragsample.hf.space"
|
| 6 |
|
|
|
|
| 7 |
logging.info("🎨 Khởi tạo Gradio UI...")
|
| 8 |
|
| 9 |
def handle_rebuild():
|
|
|
|
| 17 |
return result["status"]
|
| 18 |
|
| 19 |
def handle_query(query):
|
| 20 |
+
logging.info(f"📨 Người dùng gửi truy vấn: {query}")
|
| 21 |
result = answer_query(query)
|
| 22 |
return result.get("answer", result.get("error", "❌ Lỗi không xác định."))
|
| 23 |
|