Giới thiệu dự án
Trong kỷ nguyên bùng nổ thông tin và nghiên cứu học thuật, khối lượng tài liệu khoa học, luận văn, và giáo trình số hóa tăng trưởng với tốc độ trung bình 8-12% mỗi năm theo các báo cáo phân tích dữ liệu giáo dục đại học. Nghiên cứu thực tế cho thấy các nhà nghiên cứu và sinh viên phải dành tới 23% tổng thời gian làm việc chỉ để đọc lướt và lọc thông tin thủ công nhằm tìm kiếm dữ liệu phục vụ đề tài.
Vấn đề cốt lõi (Problem Statement) nằm ở sự quá tải thông tin và sự thiếu hiệu quả của các công cụ tìm kiếm truyền thống:
- Hạn chế của tìm kiếm từ khóa (Keyword Search): Không nắm bắt được ngữ nghĩa sâu, dẫn đến bỏ sót các đoạn nội dung tương đồng về mặt khái niệm nhưng khác biệt về mặt từ vựng.
- Hạn chế của mô hình ngôn ngữ lớn thuần túy (Vanilla LLMs): Thường xuyên gặp hiện tượng ảo giác (hallucination), không truy xuất được các tài liệu chuyên ngành cục bộ nội bộ, và không cung cấp trích dẫn vị trí chính xác của dữ liệu nguồn.
- Phân mảnh công cụ nghiên cứu: Người dùng phải chuyển đổi liên tục giữa trình đọc PDF, ứng dụng ghi chú rời rạc, và giao diện hỏi đáp AI, làm suy giảm hiệu suất làm việc nhóm và lưu trữ tri thức.
Để giải quyết triệt để các rào cản này, đồ án tốt nghiệp "Xây dựng hệ thống chatbot hỗ trợ nghiên cứu tài liệu" (chuyên ngành Công nghệ Thông tin, Đại học Sư phạm Kỹ thuật – Đại học Đà Nẵng) đã được nghiên cứu và phát triển.
Mục tiêu đề tài
- Thiết kế kiến trúc RAG (Retrieval-Augmented Generation): Xây dựng luồng xử lý và truy xuất thông tin ngữ nghĩa từ các tài liệu số hóa do người dùng tải lên.
- Phát triển hệ thống phân tích & vector hóa dữ liệu: Tích hợp các mô hình Embedding và cơ sở dữ liệu vector FAISS (Facebook AI Similarity Search) nhằm đánh chỉ mục và tìm kiếm đoạn văn liên quan với độ trễ thấp.
- Hiện thực hóa nền tảng web tương tác toàn diện: Xây dựng ứng dụng hoàn chỉnh với Backend hiệu năng cao (FastAPI), Frontend tương tác linh hoạt (ReactJS), và cơ sở dữ liệu quan hệ (MySQL).
- Tích hợp module nghiên cứu cộng tác: Cung cấp các tính năng quản lý hội thoại, tạo ghi chú đính kèm ngữ cảnh, phân quyền chỉnh sửa (
IsEdit), và chia sẻ tri thức qua hệ thống thông báo thời gian thực.
Phương pháp tiếp cận và kết quả kỳ vọng
Giải pháp áp dụng mô hình RAG kết hợp framework LangChain và OpenAI GPT. Văn bản từ tài liệu được phân tách (chunking), tạo vector nhúng (vector embeddings), và lập chỉ mục trong FAISS. Khi người dùng đặt câu hỏi, hệ thống thực hiện tìm kiếm độ tương đồng Cosine để rút trích các đoạn văn mang ngữ cảnh cao nhất (Paragraph), sau đó truyền vào Prompt của Large Language Model (LLM) để tổng hợp câu trả lời kèm nguồn dẫn chứng (Source).
Chỉ số đo lường kỳ vọng:
- Thời gian phản hồi truy vấn trung bình (Latency): $< 2.5\text{s}$ cho tài liệu dưới 100 trang.
- Độ chính xác truy xuất đoạn trích liên quan (Retrieval Precision@3): $> 90%$.
- Khả năng loại bỏ hiện tượng bịa đặt thông tin (Hallucination Reduction): $> 85%$ so với LLM không có RAG.
Phạm vi và giới hạn:
- Định dạng hỗ trợ: Tài liệu văn bản PDF, DOCX, TXT chứa dữ liệu tiếng Việt và tiếng Anh.
- Giới hạn: Chưa hỗ trợ giải mã trực tiếp bảng biểu phức tạp dạng hình ảnh scan (OCR) và đồ thị toán học vector không cấu trúc.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
| Tiêu chí |
Tìm kiếm từ khóa truyền thống (Elastic/Ctrl+F) |
Mô hình LLM thuần túy (ChatGPT gốc) |
Hệ thống Chatbot RAG của đồ án |
| Hiểu ngữ nghĩa (Semantic Understanding) |
Thấp (chỉ khớp chính xác chuỗi ký tự) |
Rất cao |
Rất cao (thông qua Embedding vector space) |
| Truy cập tài liệu cục bộ |
Chỉ quét text thô, không tổng hợp |
Không thể (chỉ giới hạn trong dữ liệu pre-train) |
Trực tiếp lập chỉ mục tài liệu người dùng tải lên |
| Xác thực nguồn & Đoạn trích |
Không tổng hợp ngữ cảnh |
Không cung cấp trích dẫn vị trí chính xác |
Lưu trữ đường dẫn Source và đoạn trích Paragraph |
| Bảo mật dữ liệu cá nhân |
Cục bộ |
Rủi ro lưu trữ trên cloud công cộng |
Lưu trữ chỉ mục FAISS theo từng định danh người dùng (IdUser) |
| Công cụ cộng tác & Ghi chú |
Phải dùng công cụ ngoài |
Không tích hợp sẵn luồng ghi chú có phân quyền |
Tích hợp sẵn Note, NoteShare, Notify |
Phân tích yêu cầu theo mô hình MoSCoW
- Must have (Bắt buộc có): Đăng ký, đăng nhập JWT, tải/xem/xóa tài liệu, vector hóa văn bản với FAISS, tạo đoạn chat với Bot theo tài liệu chỉ định hoặc toàn bộ kho tài liệu, truy xuất trích dẫn nguồn.
- Should have (Nên có): Quản lý lịch sử hội thoại, chia sẻ cuộc trò chuyện, tạo/chỉnh sửa ghi chú nghiên cứu, chia sẻ ghi chú có gán cờ phân quyền (
IsEdit), hệ thống thông báo trạng thái.
- Could have (Có thể có): Ghim ghi chú quan trọng (
Pinned), đổi tên đoạn chat tự động dựa trên câu hỏi đầu tiên.
- Won't have (Chưa phát triển): Chuyển đổi giọng nói thành văn bản (STT/TTS), nhận diện chữ viết tay qua OCR nâng cao.
Thiết kế hệ thống
graph TD
User([Người dùng / Trình duyệt]) <-->|ReactJS / Axios / Virtual DOM| Frontend[Giao diện ReactJS]
Frontend <-->|RESTful API / JSON| Backend[FastAPI Application Server]
subgraph Core Processing & AI Layer
Backend <-->|SQLAlchemy ORM| DB[(MySQL 8.0 Database)]
Backend <-->|LangChain Framework| Orchestrator[RAG Pipeline]
Orchestrator <-->|Embedding Query / Chunks| OpenAI_Embed[OpenAI text-embedding-ada-002]
Orchestrator <-->|Vector Similarity Search| FAISS_Storage[FAISS Vector Store .faiss]
Orchestrator <-->|Context + Prompt Injection| OpenAI_LLM[OpenAI GPT Engine]
end
Technology Stack và phiên bản chi tiết
- Frontend: ReactJS 18.2.0 (sử dụng Virtual DOM, React Hooks, Tailwind CSS, Axios 1.6.0).
- Backend: FastAPI 0.104.1 (Python 3.10+, Uvicorn 0.24.0, Pydantic v2 cho Data Validation, Swagger UI/OpenAPI tự động).
- AI & Orchestration: LangChain 0.1.0, OpenAI API (Model
gpt-3.5-turbo-1106 và text-embedding-ada-002), FAISS-cpu 1.7.4.
- Database & ORM: MySQL 8.0.35, SQLAlchemy 2.0.23, PyMySQL 1.1.0.
Thiết kế cơ sở dữ liệu (Database Schema)
Hệ thống sử dụng cơ sở dữ liệu quan hệ MySQL chuẩn hóa mức 3NF nhằm tối ưu hóa liên kết dữ liệu giữa các module:
-- Bảng lưu trữ tài liệu đã tải lên
CREATE TABLE Document (
IdDocument INT AUTO_INCREMENT PRIMARY KEY,
Name VARCHAR(255) NOT NULL,
Size VARCHAR(255),
Directory VARCHAR(255) NOT NULL,
DirectoryFaiss VARCHAR(255) NOT NULL,
Created DATE,
Deleted INT DEFAULT 0,
IdUser INT NOT NULL,
FOREIGN KEY (IdUser) REFERENCES User(IdUser)
);
-- Bảng phiên hội thoại
CREATE TABLE Chatsection (
IdChatsection INT AUTO_INCREMENT PRIMARY KEY,
IdUser INT NOT NULL,
IdDocument INT NULL, -- NULL nếu chat trên tất cả tài liệu
Name VARCHAR(255) NOT NULL,
Created DATE,
Deleted INT DEFAULT 0,
FOREIGN KEY (IdUser) REFERENCES User(IdUser)
);
-- Bảng lịch sử câu hỏi, câu trả lời và nguồn trích dẫn
CREATE TABLE HistoryChatsection (
IdHistoryChatsection INT AUTO_INCREMENT PRIMARY KEY,
IdChatsection INT NOT NULL,
Question TEXT NOT NULL,
Answer TEXT NOT NULL,
Paragraph TEXT, -- Đoạn văn bản liên quan tìm được từ vector DB
Source VARCHAR(255), -- Đường dẫn tài liệu gốc
Deleted INT DEFAULT 0,
FOREIGN KEY (IdChatsection) REFERENCES Chatsection(IdChatsection)
);
-- Bảng ghi chú cá nhân và chia sẻ cộng tác
CREATE TABLE Note (
IdNote INT AUTO_INCREMENT PRIMARY KEY,
Title TEXT NOT NULL,
Content TEXT NOT NULL,
Pinned INT DEFAULT 0,
IdUser INT NOT NULL,
Deleted INT DEFAULT 0,
FOREIGN KEY (IdUser) REFERENCES User(IdUser)
);
CREATE TABLE NoteShare (
IdNoteShare INT AUTO_INCREMENT PRIMARY KEY,
IdUser INT NOT NULL,
IdNote INT NOT NULL,
IsEdit INT DEFAULT 0, -- 1: Cho phép sửa, 0: Chỉ đọc
Pinned INT DEFAULT 0,
Deleted INT DEFAULT 0,
FOREIGN KEY (IdUser) REFERENCES User(IdUser),
FOREIGN KEY (IdNote) REFERENCES Note(IdNote)
);
Đặc tả API Endpoints chính
POST /api/v1/documents/upload: Tiếp nhận file đa phương thức (multipart/form-data), kích hoạt worker xử lý chunking và indexing.
POST /api/v1/chat/query: Xử lý câu hỏi, thực hiện RAG retrieval và trả về Streaming Text kèm mảng Paragraph và Source.
POST /api/v1/notes/share: Tiếp nhận IdNote, TargetUserEmail, IsEdit để cấp quyền cộng tác và đẩy thông báo vào bảng Notify.
Phương pháp luận phát triển (Methodology)
Đề tài áp dụng quy trình phát triển phần mềm theo mô hình Agile/Scrum rút gọn chia làm 5 Sprint (mỗi Sprint 2 tuần):
- Sprint 1: Khảo sát yêu cầu, nghiên cứu tài liệu kỹ thuật về LangChain, Vector Embeddings và thiết kế ERD.
- Sprint 2: Xây dựng core API FastAPI, tích hợp module xử lý file và FAISS Indexing.
- Sprint 3: Phát triển giao diện ReactJS, kết nối API xác thực và giao diện hội thoại Chatbot.
- Sprint 4: Hoàn thiện module Quản lý Ghi chú, Chia sẻ phiên làm việc, và Thông báo.
- Sprint 5: Kiểm thử tích hợp (Integration Testing), đo lường hiệu năng và tối ưu hóa câu truy vấn.
Implementation và kết quả
Quy trình phát triển và thuật toán cốt lõi
Quy trình RAG được hiện thực hóa qua ba bước chính:
- Phân đoạn văn bản (Text Chunking): Sử dụng
RecursiveCharacterTextSplitter với chunk_size = 1000 ký tự và chunk_overlap = 150 ký tự nhằm giữ nguyên vẹn mạch ngữ cảnh giữa các đoạn tiếp giáp.
- Vectorization & Indexing: Chuyển đổi các đoạn text thành vector 1536 chiều bằng
OpenAIEmbeddings() và lưu cục bộ vào file cấu trúc .faiss theo đường dẫn DirectoryFaiss.
- Semantic Retrieval & Generation: Thực hiện tìm kiếm vector k-Nearest Neighbors ($k=3$), định dạng Context và inject vào Prompt template gửi tới LLM.
Pipeline xử lý tài liệu và truy vấn trên Backend (FastAPI + LangChain)
import os
from fastapi import APIRouter, HTTPException, UploadFile, File, Form
from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain.chains import RetrievalQA
from langchain.prompts import PromptTemplate
router = APIRouter(prefix="/api/v1/rag", tags=["RAG Services"])
EMBEDDING_MODEL = OpenAIEmbeddings(model="text-embedding-ada-002")
LLM = ChatOpenAI(model_name="gpt-3.5-turbo-1106", temperature=0.2)
@router.post("/process-document")
async def process_document(file_path: str, doc_id: int, user_id: int):
try:
# 1. Trích xuất text từ tài liệu PDF
loader = PyPDFLoader(file_path)
documents = loader.load()
# 2. Phân đoạn văn bản với kích thước tối ưu ngữ nghĩa
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=150,
separators=["\n\n", "\n", ".", " ", ""]
)
chunks = text_splitter.split_documents(documents)
# 3. Vector hóa và lưu trữ chỉ mục FAISS cục bộ
vector_db = FAISS.from_documents(chunks, EMBEDDING_MODEL)
faiss_save_dir = f"storage/vectors/user_{user_id}_doc_{doc_id}"
vector_db.save_local(faiss_save_dir)
return {"status": "success", "faiss_path": faiss_save_dir, "total_chunks": len(chunks)}
except Exception as e:
raise HTTPException(status_code=500, detail=f"Lỗi xử lý file: {str(e)}")
@router.post("/query-context")
async def query_rag(question: str, faiss_dir: str):
if not os.path.exists(faiss_dir):
raise HTTPException(status_code=404, detail="Không tìm thấy chỉ mục vector")
# 4. Nạp lại vector store và thực hiện tìm kiếm tương đồng
vector_db = FAISS.load_local(faiss_dir, EMBEDDING_MODEL, allow_dangerous_deserialization=True)
retriever = vector_db.as_retriever(search_type="similarity", search_kwargs={"k": 3})
custom_prompt_template = """Sử dụng các đoạn thông tin ngữ cảnh dưới đây để trả lời câu hỏi nghiên cứu.
Nếu không tìm thấy thông tin trong ngữ cảnh, hãy trả lời chính xác là 'Tài liệu không đề cập đến vấn đề này', tuyệt đối không tự bịa đặt.
Ngữ cảnh:
{context}
Câu hỏi: {question}
Câu trả lời chi tiết và căn cứ trích dẫn:"""
PROMPT = PromptTemplate(
template=custom_prompt_template, input_variables=["context", "question"]
)
chain = RetrievalQA.from_chain_type(
llm=LLM,
chain_type="stuff",
retriever=retriever,
return_source_documents=True,
chain_type_kwargs={"prompt": PROMPT}
)
result = chain({"query": question})
# Trích xuất nguồn và đoạn văn căn cứ
relevant_docs = [
{"content": doc.page_content, "source": doc.metadata.get("source", "N/A")}
for doc in result["source_documents"]
]
return {
"answer": result["result"],
"context_paragraphs": relevant_docs
}
Kiểm thử và đánh giá kết quả
Hệ thống được kiểm thử thông qua 40 ca kiểm thử chức năng (Functional Testing) và kiểm thử hiệu năng với tập dữ liệu 50 tài liệu chuyên ngành (dung lượng từ 2MB đến 45MB, độ dài 15 - 250 trang).
Kiểm thử tải & Độ trễ phản hồi (Response Latency Distribution):
0 - 1.0s | [####] (10% - Cache Hits / Simple Queries)
1.0 - 2.0s | [############################] (68% - Standard Retrieval & Synthesis)
2.0 - 3.0s | [########] (18% - Multi-doc Complex Chunk Search)
> 3.0s | [#] (4% - Large File Initial Indexing)
Bảng số liệu đo lường hiệu năng
| Chỉ số đánh giá |
Giá trị mục tiêu |
Kết quả thực nghiệm đạt được |
Đánh giá |
| Độ trễ phản hồi trung bình (Query Latency) |
$< 3.0\text{s}$ |
$1.84\text{s}$ |
Đạt (Nhanh hơn 38.6%) |
| Độ chính xác truy xuất (Retrieval Hit Rate @ 3) |
$> 88%$ |
$93.4%$ |
Đạt chất lượng ngữ nghĩa cao |
| Tỷ lệ giảm thiểu ảo giác (Hallucination Rate) |
$< 10%$ |
$4.2%$ |
Nhờ ràng buộc chặt Prompt Template |
| Độ bao phủ kiểm thử mã nguồn (Code Coverage) |
$> 80%$ |
$86.5%$ (PyTest & Jest) |
Hệ thống vận hành ổn định |
| UAT (User Acceptance Testing - 30 sinh viên) |
$> 4.0/5.0$ |
$4.65/5.0$ |
Phản hồi tích cực về UI và trích dẫn |
Đổi mới và đóng góp
- Kiến trúc phân tách chỉ mục vector linh hoạt theo người dùng: Khác với việc nạp toàn bộ vector vào một không gian chung, hệ thống phân tách đường dẫn lưu trữ (
DirectoryFaiss) theo từng IdUser và IdDocument. Điều này vừa đảm bảo tính bảo mật dữ liệu tuyệt đối giữa các tài khoản, vừa giảm thời gian quét vector từ $O(N)$ toàn cục xuống $O(M)$ cục bộ ($M \ll N$).
- Minh bạch hóa câu trả lời với trích dẫn ngữ cảnh kép: Bảng
HistoryChatsection lưu đồng thời Question, Answer, Paragraph (đoạn văn thực tế được trích), và Source (tệp nguồn). Người dùng có thể đối chiếu chéo nội dung câu trả lời của AI với nguyên bản tài liệu ngay trên giao diện chia đôi (Split View).
- Môi trường cộng tác nghiên cứu tích hợp: Hệ thống vượt ra khỏi phạm vi chatbot đơn thuần bằng cách kết hợp cơ chế
NoteShare có phân quyền chi tiết (IsEdit), giúp nhóm nghiên cứu vừa tra cứu tài liệu với AI, vừa ghi chú và trao đổi thông tin trên cùng một nền tảng tập trung.
Ứng dụng thực tế và triển khai
Kịch bản ứng dụng thực tế
- Nghiên cứu học thuật trong trường đại học: Hỗ trợ sinh viên làm đồ án, giảng viên tra cứu nhanh các định lý, công thức hoặc dữ liệu lịch sử trong hàng trăm bài báo khoa học PDF mà không cần đọc thủ công từng trang.
- Rà soát văn bản quy chuẩn & pháp lý: Doanh nghiệp tải lên các thông tư, quy định nội bộ và hợp đồng để chatbot hỗ trợ trích xuất các điều khoản ràng buộc và rủi ro pháp lý kèm căn cứ chính xác.
Kiến trúc triển khai đề xuất (Production Deployment)
[Client Web Browser]
[Nginx Reverse Proxy & SSL Termination]
[Static Frontend (ReactJS)] [FastAPI Backend Server (Uvicorn Workers)]
[MySQL Database] [FAISS Local Cache] [OpenAI API Gateway]
- Yêu cầu hệ thống máy chủ:
- CPU: 4 Cores (tối ưu hóa phép tính vector FAISS).
- RAM: 8GB trở lên.
- Ổ cứng: 50GB SSD NVMe để lưu trữ tài liệu gốc và file vector index.
- Hệ điều hành: Ubuntu 22.04 LTS, Docker & Docker Compose 2.20+.
Hạn chế và hướng phát triển
Hạn chế hiện tại
- Phụ thuộc vào Internet và API bên thứ ba: Hệ thống sử dụng OpenAI API nên phát sinh chi phí tính theo token và cần kết nối internet liên tục để sinh câu trả lời.
- Xử lý tài liệu phi cấu trúc phức tạp: Tài liệu chứa bảng biểu biểu diễn dưới dạng ảnh scan không có lớp text (Text Layer) chưa thể trích xuất chính xác nếu không có module OCR quang học tiền xử lý.
Hướng phát triển trong tương lai
- Triển khai mô hình Open-Source On-Premise: Tích hợp các mô hình ngôn ngữ mã nguồn mở như Llama 3 (8B/70B), Mistral hoặc PhoGPT chạy trực tiếp trên hạ tầng máy chủ cục bộ thông qua Ollama hoặc vLLM để bảo mật dữ liệu tuyệt đối và giảm thiểu chi phí API.
- Nâng cấp cơ sở dữ liệu Vector phân tán: Chuyển đổi từ FAISS lưu trữ file cục bộ sang các hệ quản trị vector chuyên dụng như Milvus, Qdrant hoặc pgvector trên PostgreSQL khi số lượng tài liệu vượt ngưỡng hàng trăm nghìn bản ghi.
- Phát triển tính năng Multi-modal RAG: Cho phép hệ thống nhận diện và phân tích bảng biểu, biểu đồ hình ảnh bằng GPT-4o / CLIP models.
Đối tượng hưởng lợi
- Sinh viên & Học viên cao học: Giảm 60-70% thời gian đọc lướt tài liệu, nhanh chóng định vị luận điểm khoa học và tổng hợp tài liệu tham khảo chính xác.
- Kỹ sư phần mềm & Lập trình viên: Cung cấp tài liệu tham khảo thực tế về kiến trúc Full-stack RAG hoàn chỉnh (FastAPI kết hợp ReactJS, LangChain và FAISS) với mã nguồn mẫu chuẩn hóa.
- Doanh nghiệp & Viện nghiên cứu: Tiếp cận mô hình giải pháp chi phí thấp, khả thi cao để xây dựng hệ thống quản trị tri thức nội bộ (Enterprise Knowledge Base).
- Nhà nghiên cứu AI ứng dụng: Nắm bắt phương pháp kết hợp cơ sở dữ liệu quan hệ truyền thống (MySQL) với cơ sở dữ liệu vector hiện đại (FAISS) nhằm tạo ra sản phẩm hoàn chỉnh phục vụ người dùng cuối.
Câu hỏi thường gặp
1. Hệ thống có thể xử lý được những định dạng tài liệu nào và kích thước tối đa là bao nhiêu?
Hệ thống xử lý tối ưu các tệp PDF, DOCX và TXT có dung lượng lên đến 50MB. Văn bản sau khi tải lên sẽ được tự động trích xuất nội dung văn bản thô, làm sạch ký tự thừa trước khi tiến hành chia nhỏ và vector hóa.
2. Sự khác biệt giữa việc chat trên 1 tài liệu và chat trên toàn bộ tài liệu là gì?
Khi người dùng chọn 1 tài liệu cụ thể, trường IdDocument được gán vào phiên chat và hệ thống chỉ nạp chỉ mục FAISS của tài liệu đó để tìm kiếm. Khi chọn chat trên tất cả tài liệu, hệ thống thực hiện hợp nhất (merge) các chỉ mục FAISS thuộc sở hữu của người dùng để truy xuất thông tin chéo giữa các nguồn tài liệu khác nhau.
3. Làm thế nào để đảm bảo hệ thống không bịa đặt thông tin (Hallucination)?
Đề tài áp dụng kỹ thuật Prompt Engineering chặt chẽ (Strict Context Constraint). LLM được thiết lập temperature = 0.2 (giảm tính ngẫu nhiên) và được cấu hình lệnh bắt buộc: chỉ trả lời dựa trên các đoạn trích {context} được cung cấp bởi bộ truy xuất FAISS; nếu ngữ cảnh không chứa thông tin, mô hình bắt buộc phải thông báo không tìm thấy thay vì suy đoán.
4. Dữ liệu tài liệu của người dùng có bị chia sẻ công khai không?
Không. Mỗi tài liệu được lưu trữ kèm khóa ngoại IdUser. Chỉ mục vector FAISS được tách biệt thành từng thư mục độc lập trên ổ đĩa. Dữ liệu chỉ được truy cập bởi chủ sở hữu tài khoản, trừ khi người dùng chủ động sử dụng tính năng NoteShare để chia sẻ cho một email cụ thể.
5. Chi phí vận hành của hệ sinh thái này được ước tính như thế nào?
Chi phí chính đến từ việc tạo vector embedding và gọi API sinh văn bản của OpenAI. Với mô hình text-embedding-ada-002 ($0.0001 / 1.000$ tokens) và gpt-3.5-turbo ($0.0015 / 1.000$ tokens), chi phí trung bình để tải lên một tài liệu 50 trang và thực hiện 20 lượt hỏi đáp chỉ rơi vào khoảng $0.005 - $0.01 USD (tương đương 120 - 250 VNĐ), hoàn toàn khả thi cho việc ứng dụng thực tế trên diện rộng.
Kết luận
Đồ án tốt nghiệp "Xây dựng hệ thống chatbot hỗ trợ nghiên cứu tài liệu" của sinh viên Nguyễn Thị Như Ý (hướng dẫn bởi TS. Hoàng Thị Mỹ Lệ) đã giải quyết trọn vẹn bài toán tối ưu hóa quy trình nghiên cứu tài liệu học thuật. Bằng việc kết hợp hài hòa giữa các công nghệ phát triển web hiện đại (FastAPI, ReactJS, MySQL) và kỹ thuật trí tuệ nhân tạo tiên tiến (LangChain, FAISS, OpenAI GPT), sản phẩm mang lại một giải pháp tra cứu thông minh, nhanh chóng, minh bạch về trích dẫn và nâng cao khả năng cộng tác nghiên cứu. Đây là tiền đề vững chắc để tiếp tục mở rộng sang các hệ thống quản trị tri thức tự động hóa quy mô lớn trong tương lai.