Читайте на предпочитаемом языке:
Deutsch | Español | Français | 日本語 | 한국어 | Português | Русский | 中文
Этот репозиторий предлагает понятный, практический подход к Retrieval-Augmented Generation (RAG), разбивая сложные техники на простые для понимания реализации. Вместо использования фреймворков вроде LangChain
или FAISS
, здесь всё построено на знакомых Python-библиотеках: openai
, numpy
, matplotlib
и некоторых других.
Цель проста: предоставить читаемый, модифицируемый и обучающий код. Сосредоточившись на основах, этот проект помогает разобраться в 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. RSE | Relevant 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. CRAG | Corrective 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).
Клонируйте репозиторий:
git clone https://github.com/FareedKhan-dev/all-rag-techniques.git
cd all-rag-techniques
Установите зависимости:
pip install -r requirements.txt
Настройте ваш 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_КЛЮЧ"
Запустите блокноты:
Откройте любой из 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 для оценки релевантности.
Вклад приветствуется!