Last translated: 13 Jun 2025

Translation Not Available Yet

This repository's README hasn't been translated yet. Once translated, it will be easier to read and understand in your native language (中文).

Once translated, you'll be able to submit a PR to the repository.

Once translated, you'll be able to submit a PR to the repository.

Все техники RAG: Простой и практический подход ✨

Читайте на предпочитаемом языке:
Deutsch | Español | Français | 日本語 | 한국어 | Português | Русский | 中文

Python 3.7+ Nebius AI OpenAI Medium

Этот репозиторий предлагает понятный, практический подход к Retrieval-Augmented Generation (RAG), разбивая сложные техники на простые для понимания реализации. Вместо использования фреймворков вроде LangChain или FAISS, здесь всё построено на знакомых Python-библиотеках: openai, numpy, matplotlib и некоторых других.

Цель проста: предоставить читаемый, модифицируемый и обучающий код. Сосредоточившись на основах, этот проект помогает разобраться в RAG и понять, как он действительно работает.

Обновления: 📢

  • (12-мая-2025) Добавлен новый блокнот по работе с большими данными с использованием Knowledge Graphs.
  • (27-апреля-2025) Добавлен новый блокнот для поиска лучшей техники RAG под конкретный запрос (Simple RAG + Reranker + Query Rewrite).
  • (20-марта-2025) Добавлен новый блокнот по RAG с подкреплённым обучением (Reinforcement Learning).
  • (07-марта-2025) В репозиторий добавлено 20 техник RAG.

🚀 Что внутри?

Этот репозиторий содержит коллекцию Jupyter Notebooks, каждый из которых посвящён определённой технике RAG. Каждый блокнот включает:

  • Краткое объяснение техники.
  • Пошаговую реализацию с нуля.
  • Чёткие примеры кода с комментариями.
  • Оценки и сравнения для демонстрации эффективности техники.
  • Визуализацию результатов.

Вот обзор охваченных техник:

БлокнотОписание
1. Simple RAGБазовая реализация RAG. Отличная отправная точка!
2. Semantic ChunkingРазделяет текст по семантическому сходству для получения осмысленных фрагментов.
3. Chunk Size SelectorИсследует влияние размера фрагментов на эффективность поиска.
4. Context Enriched RAGИзвлекает соседние фрагменты для предоставления большего контекста.
5. Contextual Chunk HeadersДобавляет описательные заголовки к каждому фрагменту перед векторизацией.
6. Document Augmentation RAGГенерирует вопросы из фрагментов текста для улучшения процесса поиска.
7. Query TransformПереписывает, расширяет или декомпозирует запросы для улучшения поиска. Включает Step-back Prompting и Sub-query Decomposition.
8. RerankerПереранжирует первоначально найденные результаты с использованием LLM для повышения релевантности.
9. RSERelevant Segment Extraction: идентифицирует и восстанавливает непрерывные сегменты текста, сохраняя контекст.
10. Contextual CompressionРеализует контекстное сжатие для фильтрации и сжатия найденных фрагментов, максимизируя релевантную информацию.
11. Feedback Loop RAGВключает обратную связь от пользователя для обучения и улучшения системы RAG со временем.
12. Adaptive RAGДинамически выбирает лучшую стратегию поиска в зависимости от типа запроса.
13. Self RAGРеализует Self-RAG, динамически решает, когда и как выполнять поиск, оценивает релевантность, а также поддержку и полезность.
14. Proposition ChunkingРазбивает документы на атомарные фактические утверждения для точного поиска.
15. Multimodel RAGКомбинирует текст и изображения для поиска, генерируя подписи к изображениям с помощью LLaVA.
16. Fusion RAGОбъединяет векторный поиск с ключевым (BM25) для улучшения результатов.
17. Graph RAGОрганизует знания в виде графа, позволяя перемещаться по связанным концепциям.
18. Hierarchy RAGСтроит иерархические индексы (резюме + детальные фрагменты) для эффективного поиска.
19. HyDE RAGИспользует Hypothetical Document Embeddings для улучшения семантического соответствия.
20. CRAGCorrective RAG: динамически оценивает качество поиска и использует веб-поиск как запасной вариант.
21. Rag with RLМаксимизирует вознаграждение модели RAG с использованием подкреплённого обучения.
Best RAG FinderНаходит лучшую технику RAG для заданного запроса, используя Simple RAG + Reranker + Query Rewrite.
22. Big Data with Knowledge GraphsРаботает с большими наборами данных, используя Knowledge Graphs.

🗂️ Структура репозитория

fareedkhan-dev-all-rag-techniques/
├── README.md                          <- You are here!
├── 01_simple_rag.ipynb
├── 02_semantic_chunking.ipynb
├── 03_chunk_size_selector.ipynb
├── 04_context_enriched_rag.ipynb
├── 05_contextual_chunk_headers_rag.ipynb
├── 06_doc_augmentation_rag.ipynb
├── 07_query_transform.ipynb
├── 08_reranker.ipynb
├── 09_rse.ipynb
├── 10_contextual_compression.ipynb
├── 11_feedback_loop_rag.ipynb
├── 12_adaptive_rag.ipynb
├── 13_self_rag.ipynb
├── 14_proposition_chunking.ipynb
├── 15_multimodel_rag.ipynb
├── 16_fusion_rag.ipynb
├── 17_graph_rag.ipynb
├── 18_hierarchy_rag.ipynb
├── 19_HyDE_rag.ipynb
├── 20_crag.ipynb
├── 21_rag_with_rl.ipynb
├── 22_big_data_with_KG.ipynb
├── best_rag_finder.ipynb
├── requirements.txt                   <- Python dependencies
└── data/
    └── val.json                       <- Sample validation data (queries and answers)
    └── AI_Information.pdf             <- A sample PDF document for testing.
    └── attention_is_all_you_need.pdf  <- A sample PDF document for testing (for Multi-Modal RAG).

🛠️ Начало работы

  1. Клонируйте репозиторий:

    git clone https://github.com/FareedKhan-dev/all-rag-techniques.git
    cd all-rag-techniques
    
  2. Установите зависимости:

    pip install -r requirements.txt
    
  3. Настройте ваш API-ключ OpenAI:

    • Получите API-ключ на Nebius AI.

    • Установите API-ключ как переменную окружения:

      export OPENAI_API_KEY='ВАШ_NEBIUS_AI_API_КЛЮЧ'
      

      или

      setx OPENAI_API_KEY "ВАШ_NEBIUS_AI_API_КЛЮЧ"  # В Windows
      

      или в вашем Python-скрипте/блокноте:

      import os
      os.environ["OPENAI_API_KEY"] = "ВАШ_NEBIUS_AI_API_КЛЮЧ"
      
  4. Запустите блокноты:

    Откройте любой из Jupyter Notebooks (файлы .ipynb) с помощью Jupyter Notebook или JupyterLab. Каждый блокнот самодостаточен и может быть запущен независимо. Блокноты предназначены для последовательного выполнения внутри каждого файла.

    Примечание: Файл data/AI_Information.pdf содержит пример документа для тестирования. Вы можете заменить его на свой PDF. Файл data/val.json содержит примеры запросов и идеальных ответов для оценки. Файл 'attention_is_all_you_need.pdf' используется для тестирования Multi-Modal RAG Notebook.

💡 Основные концепции

  • Эмбеддинги: Числовые представления текста, отражающие его семантическое значение. Мы используем API эмбеддингов Nebius AI, а во многих блокнотах также модель BAAI/bge-en-icl.

  • Векторное хранилище: Простая база данных для хранения и поиска эмбеддингов. Мы создаём собственный класс SimpleVectorStore с использованием NumPy для эффективных вычислений сходства.

  • Косинусное сходство: Мера сходства между двумя векторами. Более высокие значения указывают на большее сходство.

  • Чанкинг: Разделение текста на меньшие, управляемые части. Мы исследуем различные стратегии чанкинга.

  • Поиск: Процесс нахождения наиболее релевантных фрагментов текста для заданного запроса.

  • Генерация: Использование Large Language Model (LLM) для создания ответа на основе найденного контекста и запроса пользователя. Мы используем модель meta-llama/Llama-3.2-3B-Instruct через API Nebius AI.

  • Оценка: Анализ качества ответов системы RAG, часто путём сравнения с эталонным ответом или использования LLM для оценки релевантности.

🤝 Участие

Вклад приветствуется!