# YouTube RAG Scraper

### 🎯 Tổng quan dự án

**youtube-rag-scraper** là một pipeline CLI mã nguồn mở giúp biến toàn bộ kênh YouTube thành dataset sẵn sàng cho hệ thống RAG (Retrieval-Augmented Generation). Đây là giải pháp end-to-end từ video YouTube → vector index để semantic search.

***

### 🏗️ Kiến trúc Pipeline

Từ sơ đồ bạn cung cấp, pipeline hoạt động như sau:plain Copy

```
┌─────────────────┐
│  🎬 YouTube     │ ← Channel / Playlist / Video URL
│     Input       │
└────────┬────────┘
         ▼
┌─────────────────┐
│   main.py       │ ← CLI Orchestrator (điều phối chính)
│  CLI Orchestrator│
└────────┬────────┘
         ├──────────────────┐
         ▼                  ▼
┌─────────────────┐  ┌─────────────────┐
│  metadata.py    │  │  transcripts.py │
│ YouTube Data API│  │   yt-dlp Engine │
│     v3          │  │                 │
└────────┬────────┘  └────────┬────────┘
         │                      │
         ▼                      ▼
    Video IDs +            VTT → Plain Text
    Metadata                    │
         └──────────┬──────────┘
                    ▼
            ┌─────────────────┐
            │    utils.py     │
            │  Data Pipeline  │
            │  (Làm sạch &    │
            │   Chunking)     │
            └────────┬────────┘
                     ├──────────────────┐
                     ▼                  ▼
            ┌─────────────────┐  ┌─────────────────┐
            │  JSON/JSONL/CSV │  │   RAG Chunks    │
            │    /Parquet     │  │                 │
            └────────┬────────┘  └────────┬────────┘
                     ▼                  ▼
            ┌─────────────────┐  ┌─────────────────┐
            │  📁 Dataset     │  │ knowledge_base.py│
            │     Files       │  │Embedding Generator│
            └─────────────────┘  └────────┬────────┘
                                          ▼
                              ┌─────────────────┐
                              │ sentence-       │
                              │ transformers    │
                              │  all-MiniLM-L6-v2│
                              └────────┬────────┘
                                       ▼
                              ┌─────────────────┐
                              │  384-dim vectors │
                              └────────┬────────┘
                                       ▼
                              ┌─────────────────┐
                              │   🟨 FAISS      │
                              │     Index       │
                              └────────┬────────┘
                                       ▼
                              ┌─────────────────┐
                              │   search.py     │
                              │ Semantic Search │
                              └────────┬────────┘
                                       ▼
                              ┌─────────────────┐
                              │  🔍 Natural     │
                              │ Language Query  │
                              │   (Top-K Results)│
                              └─────────────────┘
```

***

### 🔧 Các thành phần chính

Table

| Component                 | Công nghệ                                | Chức năng                                      |
| ------------------------- | ---------------------------------------- | ---------------------------------------------- |
| **Metadata Extraction**   | YouTube Data API v3                      | Lấy danh sách video, tiêu đề, mô tả, ngày đăng |
| **Transcript Extraction** | yt-dlp Engine                            | Tải subtitle/caption (VTT → Plain Text)        |
| **Data Processing**       | utils.py                                 | Làm sạch, chunking, xử lý pipeline             |
| **Embedding**             | sentence-transformers (all-MiniLM-L6-v2) | Tạo vector 384 chiều                           |
| **Vector Store**          | FAISS Index                              | Lưu trữ và tìm kiếm vector nhanh               |
| **Search**                | search.py                                | Semantic search, trả về Top-K results          |

***

### 📊 Output cuối cùng

1. **Dataset Files** (JSON/JSONL/CSV/Parquet): Chứa transcript đã chunk
2. **Embedding Matrix**: Ma trận vector 384 chiều
3. **FAISS Index**: Index vector để semantic search cực nhanh

***

### 🚀 Use Cases điển hình

* **"Chat với một kênh YouTube"**: Tạo chatbot trả lời dựa trên toàn bộ nội dung kênh
* **AI Assistant cho khóa học**: Học viên hỏi đáp từ hàng trăm video hướng dẫn
* **Domain-specific RAG**: Xây dựng knowledge base từ podcast, talkshow chuyên ngành
* **Nghiên cứu nội dung**: Phân tích xu hướng, trích xuất thông tin từ video dài

***

### 🤔 Câu hỏi kỹ thuật thú vị

Dự án đặt ra những trade-off quan trọng cho RAG pipeline:Table

| Câu hỏi               | Lựa chọn                                      | Trade-off                                                     |
| --------------------- | --------------------------------------------- | ------------------------------------------------------------- |
| **Chunking strategy** | Timestamp-based vs Semantic chunking          | Timestamp giữ ngữ cảnh thời gian, semantic giữ ý nghĩa chủ đề |
| **Synthetic Q\&A**    | Tạo Q\&A giả lập trước khi embedding?         | Cải thiện retrieval nhưng tăng chi phí tính toán              |
| **Vector DB**         | FAISS local vs Vector DB (Pinecone, Weaviate) | FAISS miễn phí, nhẹ; Vector DB scalable nhưng có phí          |

***

### 💡 Điểm mạnh của pipeline

1. **Modular**: Tách biệt rõ ràng giữa metadata, transcript, processing, embedding
2. **Local-first**: Dùng FAISS + sentence-transformers, không phụ thuộc API ngoài (trừ YouTube API)
3. **Scalable**: Hỗ trợ xử lý hàng trăm video (như log trong ảnh: 340 videos với 4 workers)
4. **Output đa dạng**: Hỗ trợ nhiều format dataset (JSON, Parquet, CSV)

***

### 📈 So sánh với các giải pháp khác

Table

| Đặc điểm      | youtube-rag-scraper | Youtube-comment-RAG | Apify Transcript Extractor |
| ------------- | ------------------- | ------------------- | -------------------------- |
| **Mã nguồn**  | Open source         | Open source         | Commercial (Apify)         |
| **Embedding** | Local (MiniLM)      | Gemini API          | Không tích hợp sẵn         |
| **Vector DB** | FAISS (local)       | Không có sẵn        | Không có sẵn               |
| **Chunking**  | Có                  | Không rõ            | Có (configurable)          |
| **Chi phí**   | Miễn phí            | Gemini API fee      | $0.15/1000 videos          |

***

### 🔗 Tài nguyên liên quan

Nếu bạn quan tâm đến việc mở rộng pipeline này, có thể tham khảo:

* [**Neo4j Knowledge Graph approach**](https://neo4j.com/blog/developer/youtube-transcripts-knowledge-graphs-rag/) : Kết hợp vector search với graph database
* [**CrewAI YoutubeVideoSearchTool**](https://docs.crewai.com/en/tools/search-research/youtubevideosearchtool) : Tích hợp vào agent framework
* [**youtube-transcript-rag**](https://github.com/aliahmad552/youtube-transcript-rag) : FastAPI + HuggingFace cho Q\&A chatbot

Dự án này là một ví dụ điển hình về cách biến nội dung video không cấu trúc thành dữ liệu có cấu trúc sẵn sàng cho AI - rất phù hợp cho các ứng dụng RAG thực tế!
