Rag_ChatBot / evaluation /rag_pipeline.py
Dus Tran
Add and refactor evaluation scripts
ebeb2ae
Raw
History Blame Contribute Delete
1.91 kB
from app.service.memory import contextualize_user_query, add_message_to_history
from app.service.router import logical_router
from app.service.retriever import hybrid_retrieval, apply_post_retrieval_rerank
from app.service.generator import generate_answer
from app.core.config import get_llm
def run_rag_pipeline(question: str, session_id: str = "eval_session") -> dict:
"""
Chạy toàn bộ pipeline RAG và trả về answer + contexts.
Args:
question: Câu hỏi của người dùng.
session_id: ID phiên để quản lý memory.
Returns:
dict với các key:
- question (str): Câu hỏi gốc
- answer (str): Câu trả lời từ RAG pipeline
- contexts (list[str]): Danh sách các đoạn context đã retrieve được
"""
llm = get_llm()
# Bước 1: Contextualize query với lịch sử hội thoại
full_query = contextualize_user_query(question, session_id)
# Bước 2: Router phân loại độ phức tạp và nguồn dữ liệu
routing_res = logical_router(full_query)
# Bước 3: Retrieve tài liệu liên quan
raw_docs = hybrid_retrieval(routing_res)
# Bước 4: Rerank để lấy các context tốt nhất
final_context_str = apply_post_retrieval_rerank(full_query, raw_docs)
# Tách chuỗi context thành danh sách
contexts = [
c.strip()
for c in final_context_str.split("\n\n---\n\n")
if c.strip()
]
# Bước 5: Sinh câu trả lời
answer = generate_answer(full_query, final_context_str, llm)
# Lưu vào memory
add_message_to_history(session_id, "user", question)
add_message_to_history(session_id, "ai", answer)
return {
"question": question,
"answer": answer,
"contexts": contexts if contexts else ["Không tìm thấy ngữ cảnh phù hợp."],
}