| # ChatbotRAG - Complete Summary |
|
|
| ## Tổng Quan Hệ Thống |
|
|
| Hệ thống ChatbotRAG hiện đã được nâng cấp toàn diện với các tính năng advanced: |
|
|
| ### ✨ Tính Năng Chính |
|
|
| 1. **Multiple Inputs Support** (/index) |
| - Index tối đa 10 texts + 10 images cùng lúc |
| - Average embeddings tự động |
|
|
| 2. **Advanced RAG Pipeline** (/chat) |
| - Query Expansion |
| - Multi-Query Retrieval |
| - Reranking with semantic similarity |
| - Contextual Compression |
| - Better Prompt Engineering |
|
|
| 3. **PDF Support** (/upload-pdf) |
| - Parse PDF thành chunks |
| - Auto chunking với overlap |
| - Index vào RAG system |
|
|
| 4. **Multimodal PDF** (/upload-pdf-multimodal) ⭐ NEW |
| - Extract text + image URLs từ PDF |
| - Link images với text chunks |
| - Return images cùng text trong chat |
| - Perfect cho user guides với screenshots |
|
|
| --- |
|
|
| ## Kiến Trúc Hệ Thống |
|
|
| ``` |
| ┌─────────────────────────────────────────────────────────────┐ |
| │ FastAPI Application │ |
| ├─────────────────────────────────────────────────────────────┤ |
| │ │ |
| │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ |
| │ │ Indexing │ │ Search │ │ Chat │ │ |
| │ │ Endpoints │ │ Endpoints │ │ Endpoint │ │ |
| │ └──────────────┘ └──────────────┘ └──────────────┘ │ |
| │ │ |
| ├─────────────────────────────────────────────────────────────┤ |
| │ │ |
| │ ┌──────────────────────────────────────────────────────┐ │ |
| │ │ Advanced RAG Pipeline │ │ |
| │ │ • Query Expansion │ │ |
| │ │ • Multi-Query Retrieval │ │ |
| │ │ • Reranking │ │ |
| │ │ • Contextual Compression │ │ |
| │ └──────────────────────────────────────────────────────┘ │ |
| │ │ |
| ├─────────────────────────────────────────────────────────────┤ |
| │ │ |
| │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ |
| │ │ Jina CLIP │ │ Qdrant │ │ MongoDB │ │ |
| │ │ v2 │ │ Vector DB │ │ Documents │ │ |
| │ └──────────────┘ └──────────────┘ └──────────────┘ │ |
| │ │ |
| │ ┌──────────────┐ ┌──────────────┐ │ |
| │ │ PDF │ │ Multimodal │ │ |
| │ │ Parser │ │ PDF Parser │ │ |
| │ └──────────────┘ └──────────────┘ │ |
| │ │ |
| └─────────────────────────────────────────────────────────────┘ |
| ``` |
|
|
| --- |
|
|
| ## Files Quan Trọng |
|
|
| ### Core System |
| - **main.py** - FastAPI application với tất cả endpoints |
| - **embedding_service.py** - Jina CLIP v2 embedding |
| - **qdrant_service.py** - Qdrant vector DB operations |
| - **advanced_rag.py** - Advanced RAG pipeline |
| |
| ### PDF Processing |
| - **pdf_parser.py** - Basic PDF parser (text only) |
| - **multimodal_pdf_parser.py** - Multimodal PDF parser (text + images) |
| - **batch_index_pdfs.py** - Batch indexing script |
|
|
| ### Documentation |
| - **ADVANCED_RAG_GUIDE.md** - Advanced RAG features guide |
| - **PDF_RAG_GUIDE.md** - PDF usage guide |
| - **MULTIMODAL_PDF_GUIDE.md** - Multimodal PDF guide ⭐ |
| - **QUICK_START_PDF.md** - Quick start for PDF |
| - **chatbot_guide_template.md** - Template for user guide PDF |
|
|
| ### Testing |
| - **test_advanced_features.py** - Test advanced features |
| - **test_pdf_chatbot.py** - Test PDF chatbot (example in docs) |
|
|
| --- |
|
|
| ## API Endpoints |
|
|
| ### 1. Indexing |
|
|
| | Endpoint | Method | Description | |
| |----------|--------|-------------| |
| | `/index` | POST | Index texts + images (max 10 each) | |
| | `/documents` | POST | Add text document | |
| | `/upload-pdf` | POST | Upload PDF (text only) | |
| | `/upload-pdf-multimodal` | POST | Upload PDF with images ⭐ | |
|
|
| ### 2. Search |
|
|
| | Endpoint | Method | Description | |
| |----------|--------|-------------| |
| | `/search` | POST | Hybrid search (text + image) | |
| | `/search/text` | POST | Text-only search | |
| | `/search/image` | POST | Image-only search | |
| | `/rag/search` | POST | RAG knowledge base search | |
|
|
| ### 3. Chat |
|
|
| | Endpoint | Method | Description | |
| |----------|--------|-------------| |
| | `/chat` | POST | Chat with Advanced RAG | |
|
|
| ### 4. Management |
|
|
| | Endpoint | Method | Description | |
| |----------|--------|-------------| |
| | `/documents/pdf` | GET | List all PDFs | |
| | `/documents/pdf/{id}` | DELETE | Delete PDF document | |
| | `/delete/{doc_id}` | DELETE | Delete document | |
| | `/document/{doc_id}` | GET | Get document by ID | |
| | `/history` | GET | Get chat history | |
| | `/stats` | GET | Collection statistics | |
| | `/` | GET | Health check + API docs | |
|
|
| --- |
|
|
| ## Use Cases & Recommendations |
|
|
| ### Case 1: PDF Hướng Dẫn Chỉ Có Text |
|
|
| **Scenario:** FAQ, policy document, text guide |
|
|
| **Solution:** `/upload-pdf` |
|
|
| ```bash |
| curl -X POST "http://localhost:8000/upload-pdf" \ |
| -F "file=@faq.pdf" \ |
| -F "title=FAQ" |
| ``` |
|
|
| ### Case 2: PDF Hướng Dẫn Có Hình Ảnh ⭐ (Your Case) |
|
|
| **Scenario:** User guide với screenshots, tutorial với diagrams |
|
|
| **Solution:** `/upload-pdf-multimodal` |
|
|
| ```bash |
| curl -X POST "http://localhost:8000/upload-pdf-multimodal" \ |
| -F "file=@user_guide_with_images.pdf" \ |
| -F "title=User Guide" \ |
| -F "category=guide" |
| ``` |
|
|
| **Benefits:** |
| - ✓ Extract text + image URLs |
| - ✓ Link images với text chunks |
| - ✓ Chatbot return images in response |
| - ✓ Visual context for users |
|
|
| ### Case 3: Multiple Social Media Posts |
|
|
| **Scenario:** Index nhiều posts với texts và images |
|
|
| **Solution:** `/index` with multiple inputs |
|
|
| ```python |
| data = { |
| 'id': 'post123', |
| 'texts': ['Post text 1', 'Post text 2', ...], # Max 10 |
| } |
| files = [ |
| ('images', open('img1.jpg', 'rb')), |
| ('images', open('img2.jpg', 'rb')), # Max 10 |
| ] |
| requests.post('http://localhost:8000/index', data=data, files=files) |
| ``` |
|
|
| ### Case 4: Complex Queries |
|
|
| **Scenario:** Câu hỏi phức tạp, cần độ chính xác cao |
|
|
| **Solution:** Advanced RAG with full options |
|
|
| ```python |
| { |
| 'message': 'Complex question', |
| 'use_rag': True, |
| 'use_advanced_rag': True, |
| 'use_reranking': True, |
| 'use_compression': True, |
| 'score_threshold': 0.5, |
| 'top_k': 5 |
| } |
| ``` |
|
|
| --- |
|
|
| ## Workflow Đề Xuất Cho Bạn |
|
|
| ### Setup Ban Đầu |
|
|
| 1. **Tạo PDF hướng dẫn sử dụng** |
| - Dùng template: `chatbot_guide_template.md` |
| - Customize nội dung cho hệ thống của bạn |
| - Thêm image URLs (screenshots, diagrams) |
| - Convert to PDF: `pandoc template.md -o guide.pdf` |
|
|
| 2. **Upload PDF** |
| ```bash |
| curl -X POST "http://localhost:8000/upload-pdf-multimodal" \ |
| -F "file=@chatbot_user_guide.pdf" \ |
| -F "title=Hướng dẫn sử dụng ChatbotRAG" \ |
| -F "category=user_guide" |
| ``` |
|
|
| 3. **Verify** |
| ```bash |
| curl http://localhost:8000/documents/pdf |
| # Check "type": "multimodal_pdf" và "total_images" |
| ``` |
|
|
| ### Sử Dụng Hàng Ngày |
|
|
| 1. **Chat với user** |
| ```python |
| response = requests.post('http://localhost:8000/chat', json={ |
| 'message': user_question, |
| 'use_rag': True, |
| 'use_advanced_rag': True, |
| 'hf_token': 'your_token' |
| }) |
| ``` |
|
|
| 2. **Display response + images** |
| ```python |
| # Text answer |
| print(response.json()['response']) |
| |
| # Images (if any) |
| for ctx in response.json()['context_used']: |
| if ctx['metadata'].get('has_images'): |
| for url in ctx['metadata']['image_urls']: |
| # Display image in your UI |
| print(f"Image: {url}") |
| ``` |
|
|
| ### Cập Nhật Content |
|
|
| 1. **Update PDF** - Edit và re-export |
| 2. **Xóa PDF cũ** |
| ```bash |
| curl -X DELETE http://localhost:8000/documents/pdf/old_doc_id |
| ``` |
| 3. **Upload PDF mới** |
| ```bash |
| curl -X POST http://localhost:8000/upload-pdf-multimodal -F "file=@new_guide.pdf" |
| ``` |
|
|
| --- |
|
|
| ## Performance Tips |
|
|
| ### 1. Chunking |
|
|
| **Default:** |
| - chunk_size: 500 words |
| - chunk_overlap: 50 words |
|
|
| **Tối ưu:** |
| ```python |
| # In multimodal_pdf_parser.py |
| parser = MultimodalPDFParser( |
| chunk_size=400, # Shorter for faster retrieval |
| chunk_overlap=40, |
| min_chunk_size=50 |
| ) |
| ``` |
|
|
| ### 2. Retrieval |
|
|
| **Settings tốt:** |
| ```python |
| { |
| 'top_k': 5, # 3-7 is optimal |
| 'score_threshold': 0.5, # 0.4-0.6 is good |
| 'use_reranking': True, # Always enable |
| 'use_compression': True # Keeps context relevant |
| } |
| ``` |
|
|
| ### 3. LLM |
|
|
| **For factual answers:** |
| ```python |
| { |
| 'temperature': 0.3, # Low for accuracy |
| 'max_tokens': 512, # Concise answers |
| 'top_p': 0.9 |
| } |
| ``` |
|
|
| --- |
|
|
| ## Troubleshooting |
|
|
| ### Issue 1: Images không được detect |
|
|
| **Solution:** |
| - Verify PDF có image URLs (http://, https://) |
| - Check format: markdown `` hoặc HTML `<img src>` |
| - Test regex: |
| ```python |
| from multimodal_pdf_parser import MultimodalPDFParser |
| parser = MultimodalPDFParser() |
| urls = parser.extract_image_urls("") |
| print(urls) # Should return ['https://example.com/img.png'] |
| ``` |
|
|
| ### Issue 2: Chatbot không tìm thấy thông tin |
|
|
| **Solution:** |
| - Lower score_threshold: `0.3-0.5` |
| - Increase top_k: `5-10` |
| - Enable Advanced RAG |
| - Rephrase question |
|
|
| ### Issue 3: Response quá chậm |
|
|
| **Solution:** |
| - Giảm top_k |
| - Disable compression nếu không cần |
| - Use basic RAG thay vì advanced for simple queries |
| |
| --- |
| |
| ## Next Steps |
| |
| ### Immediate (Bây Giờ) |
| |
| 1. ✓ System đã ready! |
| 2. Tạo PDF hướng dẫn của bạn |
| 3. Upload qua `/upload-pdf-multimodal` |
| 4. Test với câu hỏi thực tế |
| |
| ### Short Term (1-2 tuần) |
| |
| 1. Collect user feedback |
| 2. Fine-tune parameters (top_k, threshold) |
| 3. Add more PDFs (FAQ, tutorials, etc.) |
| 4. Monitor chat history để improve content |
|
|
| ### Long Term (Sau này) |
|
|
| 1. **Hybrid Search với BM25** |
| - Combine dense + sparse retrieval |
| - Better for keyword queries |
|
|
| 2. **Cross-Encoder Reranking** |
| - Replace embedding similarity |
| - More accurate ranking |
|
|
| 3. **Image Processing** |
| - Download và process actual images |
| - Use Jina CLIP for image embeddings |
| - True multimodal embeddings (text + image vectors) |
|
|
| 4. **RAG-Anything Integration** (Nếu cần) |
| - For complex PDFs with tables, charts |
| - Vision encoder for embedded images |
| - Advanced document understanding |
|
|
| --- |
|
|
| ## Comparison Matrix |
|
|
| | Approach | Text | Images | URLs | Complexity | Your Case | |
| |----------|------|--------|------|------------|-----------| |
| | Basic RAG | ✓ | ✗ | ✗ | Low | ✗ | |
| | PDF Parser | ✓ | ✗ | ✗ | Low | ✗ | |
| | **Multimodal PDF** | ✓ | ✗ | ✓ | **Medium** | **✓** | |
| | RAG-Anything | ✓ | ✓ | ✓ | High | Overkill | |
|
|
| **Recommendation:** **Multimodal PDF** là perfect cho case của bạn! |
|
|
| --- |
|
|
| ## Kết Luận |
|
|
| ### Bạn Có Gì? |
|
|
| ✅ **Multiple Inputs**: Index 10 texts + 10 images |
| ✅ **Advanced RAG**: Query expansion, reranking, compression |
| ✅ **PDF Support**: Parse và index PDFs |
| ✅ **Multimodal PDF**: Extract text + image URLs, link together |
| ✅ **Complete Documentation**: Guides, examples, troubleshooting |
|
|
| ### Làm Gì Tiếp? |
|
|
| 1. **Tạo PDF** hướng dẫn với nội dung của bạn (có image URLs) |
| 2. **Upload** qua `/upload-pdf-multimodal` |
| 3. **Test** với câu hỏi thực tế |
| 4. **Iterate** - fine-tune based on feedback |
|
|
| ### Files Cần Đọc |
|
|
| **Cho PDF với hình ảnh (Your case):** |
| - [MULTIMODAL_PDF_GUIDE.md](MULTIMODAL_PDF_GUIDE.md) ⭐⭐⭐ |
| - [PDF_RAG_GUIDE.md](PDF_RAG_GUIDE.md) |
|
|
| **Cho Advanced RAG:** |
| - [ADVANCED_RAG_GUIDE.md](ADVANCED_RAG_GUIDE.md) |
|
|
| **Quick Start:** |
| - [QUICK_START_PDF.md](QUICK_START_PDF.md) |
|
|
| --- |
|
|
| **Hệ thống của bạn bây giờ rất mạnh! Chỉ cần upload PDF và chat thôi! 🚀📄🤖** |
|
|