| # Hướng Dẫn Sử Dụng PDF với ChatbotRAG |
|
|
| ## Tổng Quan |
|
|
| Hệ thống ChatbotRAG hiện đã hỗ trợ **tải lên và index PDF** để chatbot có thể trả lời câu hỏi dựa trên nội dung trong PDF. Điều này rất hữu ích cho: |
| - Hướng dẫn sử dụng sản phẩm |
| - Tài liệu FAQ |
| - Chính sách, quy định |
| - Tài liệu kỹ thuật |
|
|
| ## Cách Thức Hoạt Động |
|
|
| 1. **Upload PDF** → Hệ thống parse PDF thành text |
| 2. **Chunking** → Text được chia thành các chunks (mặc định: 500 words/chunk, overlap 50 words) |
| 3. **Embedding** → Mỗi chunk được convert thành vector embedding |
| 4. **Indexing** → Lưu vào Qdrant + MongoDB |
| 5. **Chat** → Chatbot tìm kiếm chunks liên quan và trả lời câu hỏi |
|
|
| ## Cách 1: Upload PDF Qua API |
|
|
| ### Endpoint: `POST /upload-pdf` |
|
|
| **Request:** |
| ```bash |
| curl -X POST "http://localhost:8000/upload-pdf" \ |
| -F "file=@huong_dan_su_dung.pdf" \ |
| -F "title=Hướng dẫn sử dụng ChatbotRAG" \ |
| -F "description=Tài liệu hướng dẫn đầy đủ về ChatbotRAG" \ |
| -F "category=user_guide" |
| ``` |
|
|
| **Python:** |
| ```python |
| import requests |
| |
| with open('huong_dan_su_dung.pdf', 'rb') as f: |
| files = {'file': f} |
| data = { |
| 'title': 'Hướng dẫn sử dụng ChatbotRAG', |
| 'description': 'Tài liệu hướng dẫn đầy đủ', |
| 'category': 'user_guide' |
| } |
| |
| response = requests.post( |
| 'http://localhost:8000/upload-pdf', |
| files=files, |
| data=data |
| ) |
| |
| print(response.json()) |
| ``` |
|
|
| **Response:** |
| ```json |
| { |
| "success": true, |
| "document_id": "pdf_20251029_143022", |
| "filename": "huong_dan_su_dung.pdf", |
| "chunks_indexed": 45, |
| "message": "PDF 'huong_dan_su_dung.pdf' đã được index thành công với 45 chunks" |
| } |
| ``` |
|
|
| ### Tham Số: |
| - `file` (required): File PDF |
| - `document_id` (optional): ID tùy chỉnh, mặc định auto-generate |
| - `title` (optional): Tiêu đề tài liệu |
| - `description` (optional): Mô tả |
| - `category` (optional): Danh mục (user_guide, faq, policy, etc.) |
| |
| ## Cách 2: Batch Index Nhiều PDFs |
| |
| Nếu bạn có nhiều PDF files, sử dụng script batch: |
| |
| ```bash |
| # Index tất cả PDFs trong thư mục |
| python batch_index_pdfs.py ./docs/user_guides |
|
|
| # Với category tùy chỉnh |
| python batch_index_pdfs.py ./docs/policies --category=policy |
|
|
| # Force reindex (ghi đè nếu đã có) |
| python batch_index_pdfs.py ./docs/faq --category=faq --force |
| ``` |
| |
| Script sẽ tự động: |
| - Scan tất cả file .pdf trong thư mục |
| - Index từng file với metadata phù hợp |
| - Skip những file đã index (trừ khi dùng --force) |
| - Hiển thị progress và summary |
| |
| ## Quản Lý PDF Documents |
| |
| ### Xem Danh Sách PDFs |
| |
| ```bash |
| curl http://localhost:8000/documents/pdf |
| ``` |
| |
| **Response:** |
| ```json |
| { |
| "documents": [ |
| { |
| "document_id": "pdf_user_guide", |
| "type": "pdf", |
| "filename": "huong_dan_su_dung.pdf", |
| "num_chunks": 45, |
| "metadata": { |
| "title": "Hướng dẫn sử dụng", |
| "category": "user_guide" |
| } |
| } |
| ], |
| "total": 1 |
| } |
| ``` |
| |
| ### Xóa PDF Document |
|
|
| ```bash |
| # Xóa document và tất cả chunks của nó |
| curl -X DELETE http://localhost:8000/documents/pdf/pdf_user_guide |
| ``` |
|
|
| ## Chat Với PDF Content |
|
|
| Sau khi index PDF, bạn có thể chat như bình thường: |
|
|
| ```python |
| import requests |
| |
| response = requests.post('http://localhost:8000/chat', json={ |
| 'message': 'Làm sao để upload PDF vào ChatbotRAG?', |
| 'use_rag': True, |
| 'use_advanced_rag': True, |
| 'top_k': 5, |
| 'hf_token': 'your_hf_token' |
| }) |
| |
| result = response.json() |
| print("Answer:", result['response']) |
| |
| # Xem sources |
| for ctx in result['context_used']: |
| print(f"- Page {ctx['metadata']['page']}: {ctx['metadata']['text'][:100]}...") |
| ``` |
|
|
| Chatbot sẽ tự động tìm kiếm trong PDF và trả lời dựa trên nội dung đã index. |
|
|
| ## Tạo PDF Hướng Dẫn Sử Dụng |
|
|
| ### Template Nội Dung |
|
|
| Dưới đây là cấu trúc đề xuất cho PDF hướng dẫn ChatbotRAG: |
|
|
| ``` |
| HƯỚNG DẪN SỬ DỤNG CHATBOTRAG |
| |
| 1. GIỚI THIỆU |
| - ChatbotRAG là gì? |
| - Tính năng chính |
| - Use cases |
| |
| 2. BẮT ĐẦU NHANH |
| 2.1. Cài đặt |
| 2.2. Khởi động server |
| 2.3. Truy cập API |
| |
| 3. INDEX DỮ LIỆU |
| 3.1. Index text đơn giản |
| 3.2. Index với images |
| 3.3. Index nhiều texts và images cùng lúc |
| 3.4. Upload PDF |
| |
| 4. TÌM KIẾM |
| 4.1. Search bằng text |
| 4.2. Search bằng image |
| 4.3. Hybrid search |
| |
| 5. CHAT VỚI CHATBOT |
| 5.1. Chat cơ bản |
| 5.2. Chat với RAG |
| 5.3. Advanced RAG options |
| 5.4. Tùy chỉnh LLM parameters |
| |
| 6. QUẢN LÝ DOCUMENTS |
| 6.1. Xem danh sách documents |
| 6.2. Xóa documents |
| 6.3. Quản lý PDF files |
| |
| 7. CÂU HỎI THƯỜNG GẶP (FAQ) |
| - Làm sao để upload PDF? |
| - Chatbot không tìm thấy thông tin? |
| - Làm sao để cải thiện độ chính xác? |
| - Token limit là bao nhiêu? |
| |
| 8. API REFERENCE |
| - POST /index |
| - POST /search |
| - POST /chat |
| - POST /upload-pdf |
| - GET /documents/pdf |
| ``` |
|
|
| ### Tạo PDF Từ Markdown |
|
|
| Bạn có thể tạo PDF từ Markdown bằng nhiều tools: |
|
|
| **1. Pandoc (Recommended):** |
| ```bash |
| pandoc guide.md -o guide.pdf --pdf-engine=xelatex |
| ``` |
|
|
| **2. Online Tools:** |
| - https://www.markdowntopdf.com/ |
| - https://md2pdf.netlify.app/ |
|
|
| **3. VS Code Extension:** |
| - Install "Markdown PDF" extension |
| - Right-click file .md → "Markdown PDF: Export (pdf)" |
|
|
| ### Ví Dụ Markdown Content |
|
|
| Tạo file `chatbot_guide.md`: |
|
|
| ```markdown |
| # Hướng Dẫn Sử Dụng ChatbotRAG |
| |
| ## 1. Upload PDF |
| |
| Để upload PDF vào hệ thống: |
| |
| ### Bước 1: Chuẩn bị file PDF |
| - File phải có định dạng .pdf |
| - Nội dung nên rõ ràng, có cấu trúc |
| |
| ### Bước 2: Upload qua API |
| |
| \`\`\`bash |
| curl -X POST "http://localhost:8000/upload-pdf" \ |
| -F "file=@your_file.pdf" \ |
| -F "title=Tên tài liệu" |
| \`\`\` |
| |
| ### Bước 3: Kiểm tra |
| Sau khi upload, hệ thống sẽ trả về số chunks đã được index. |
| |
| ## 2. Chat Với Chatbot |
| |
| Sau khi upload PDF, bạn có thể hỏi chatbot: |
| |
| **Ví dụ:** |
| - "Làm sao để upload PDF?" |
| - "Các bước tạo event là gì?" |
| - "Tính năng nào trong hệ thống?" |
| |
| Chatbot sẽ tìm kiếm trong PDF và trả lời dựa trên nội dung đã index. |
| |
| ## 3. FAQ |
| |
| ### Câu hỏi 1: Upload PDF tối đa bao nhiêu trang? |
| Không giới hạn, nhưng PDF càng lớn thì thời gian index càng lâu. |
| |
| ### Câu hỏi 2: Có thể upload nhiều PDFs không? |
| Có, bạn có thể upload nhiều PDFs. Mỗi PDF sẽ có document_id riêng. |
| |
| ### Câu hỏi 3: Làm sao để xóa PDF đã upload? |
| Sử dụng endpoint DELETE /documents/pdf/{document_id} |
| ``` |
|
|
| Sau đó convert sang PDF: |
| ```bash |
| pandoc chatbot_guide.md -o chatbot_guide.pdf |
| ``` |
|
|
| ## Best Practices |
|
|
| ### 1. Cấu Trúc PDF |
| - ✓ Có tiêu đề rõ ràng |
| - ✓ Chia sections/chapters |
| - ✓ Sử dụng bullet points |
| - ✓ Tránh quá nhiều hình ảnh phức tạp (text extraction khó) |
|
|
| ### 2. Nội Dung |
| - ✓ Viết câu ngắn gọn, dễ hiểu |
| - ✓ Mỗi section tập trung 1 chủ đề |
| - ✓ Có ví dụ cụ thể |
| - ✗ Tránh văn xuôi dài, khó tách câu |
|
|
| ### 3. Metadata |
| - Luôn đặt `title` rõ ràng |
| - Sử dụng `category` để phân loại |
| - Thêm `description` cho dễ quản lý |
|
|
| ### 4. Chunking |
| Mặc định: |
| - Chunk size: 500 words |
| - Overlap: 50 words |
|
|
| Có thể tùy chỉnh trong `pdf_parser.py`: |
| ```python |
| parser = PDFParser( |
| chunk_size=500, # Tăng nếu muốn context dài hơn |
| chunk_overlap=50, # Tăng để giữ context tốt hơn |
| min_chunk_size=50 # Min words cho 1 chunk |
| ) |
| ``` |
|
|
| ## Troubleshooting |
|
|
| ### Lỗi: "Error reading PDF" |
| - Kiểm tra file PDF có bị corrupt không |
| - Thử mở bằng PDF reader để verify |
| - Convert lại PDF nếu cần |
|
|
| ### Lỗi: "No text extracted" |
| - PDF có thể là scanned images (không có text layer) |
| - Cần OCR trước khi index (dùng tools như Tesseract) |
|
|
| ### Chatbot không tìm thấy thông tin |
| - Kiểm tra `score_threshold` - thử giảm xuống (e.g., 0.3) |
| - Tăng `top_k` để retrieve nhiều documents hơn |
| - Rephrase câu hỏi |
|
|
| ### Chunks quá ngắn/dài |
| - Điều chỉnh `chunk_size` trong `pdf_parser.py` |
| - Reindex PDF với settings mới |
|
|
| ## Complete Example |
|
|
| ```python |
| # 1. Upload PDF |
| import requests |
| |
| with open('user_guide.pdf', 'rb') as f: |
| response = requests.post( |
| 'http://localhost:8000/upload-pdf', |
| files={'file': f}, |
| data={ |
| 'title': 'Hướng dẫn sử dụng', |
| 'category': 'user_guide' |
| } |
| ) |
| |
| doc_id = response.json()['document_id'] |
| print(f"Uploaded: {doc_id}") |
| |
| # 2. List PDFs |
| response = requests.get('http://localhost:8000/documents/pdf') |
| print(response.json()) |
| |
| # 3. Chat |
| response = requests.post('http://localhost:8000/chat', json={ |
| 'message': 'Làm sao để tạo event mới?', |
| 'use_rag': True, |
| 'use_advanced_rag': True, |
| 'hf_token': 'your_token' |
| }) |
| |
| print("Answer:", response.json()['response']) |
| |
| # 4. Delete PDF (if needed) |
| response = requests.delete(f'http://localhost:8000/documents/pdf/{doc_id}') |
| print(response.json()) |
| ``` |
|
|
| ## Next Steps |
|
|
| 1. **Tạo PDF hướng dẫn của bạn** với nội dung về hệ thống của bạn |
| 2. **Upload PDF** vào hệ thống |
| 3. **Test chatbot** - hỏi các câu hỏi về nội dung trong PDF |
| 4. **Fine-tune** - điều chỉnh parameters nếu cần |
| 5. **Add more PDFs** - thêm FAQs, policies, etc. |
|
|
| ## Support |
|
|
| Nếu có vấn đề, check: |
| - Server logs để xem errors |
| - MongoDB để xem documents đã được lưu chưa |
| - Qdrant collection để verify chunks đã được index |
|
|
| ## Conclusion |
|
|
| Hệ thống PDF RAG giúp chatbot của bạn trả lời câu hỏi dựa trên tài liệu có sẵn, không cần train lại model. Bạn chỉ cần: |
| 1. Upload PDF |
| 2. Chat như bình thường |
| 3. Chatbot sẽ tìm kiếm và trả lời dựa trên PDF content |
|
|
| Đơn giản và hiệu quả! |
|
|