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의 신비를 풀고 실제로 어떻게 작동하는지 더 쉽게 이해할 수 있도록 돕습니다.

업데이트: 📢

  • (2025년 5월 12일) 대용량 데이터를 지식 그래프로 처리하는 방법에 대한 새로운 노트북 추가.
  • (2025년 4월 27일) 주어진 쿼리에 대한 최적의 RAG 기법을 찾는 새로운 노트북 추가 (Simple RAG + Reranker + Query Rewrite).
  • (2025년 3월 20일) 강화 학습을 활용한 RAG에 대한 새로운 노트북 추가.
  • (2025년 3월 7일) 저장소에 20가지 RAG 기법 추가.

🚀 주요 내용

이 저장소에는 각각 특정 RAG 기법에 초점을 맞춘 Jupyter Notebook 컬렉션이 포함되어 있습니다. 각 노트북은 다음을 제공합니다:

  • 해당 기법에 대한 간결한 설명.
  • 처음부터 단계별로 구현하는 방법.
  • 인라인 주석이 포함된 명확한 코드 예제.
  • 기법의 효과를 입증하는 평가 및 비교.
  • 결과를 시각화하는 그래프.

다음은 다루는 기법들의 일부입니다:

노트북설명
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 PromptingSub-query Decomposition 포함.
8. RerankerLLM을 사용하여 초기 검색 결과를 재정렬하여 관련성 향상.
9. RSERelevant Segment Extraction: 텍스트의 연속적인 세그먼트를 식별하고 재구성하여 컨텍스트 보존.
10. Contextual Compression검색된 청크를 필터링하고 압축하여 관련 정보를 최대화.
11. Feedback Loop RAG사용자 피드백을 통합하여 RAG 시스템을 지속적으로 개선.
12. Adaptive RAG쿼리 유형에 따라 최적의 검색 전략을 동적으로 선택.
13. Self RAGSelf-RAG 구현: 검색 시기와 방법을 동적으로 결정, 관련성 평가, 지원 및 유용성 평가.
14. Proposition Chunking문서를 원자적이고 사실적인 진술로 분해하여 정밀한 검색 가능.
15. Multimodel RAG텍스트와 이미지를 결합한 검색, LLaVA를 사용하여 이미지 캡션 생성.
16. Fusion RAG벡터 검색과 키워드 기반(BM25) 검색을 결합하여 결과 개선.
17. Graph RAG지식을 그래프로 구성하여 관련 개념 탐색 가능.
18. Hierarchy RAG계층적 인덱스(요약 + 상세 청크) 구축으로 효율적인 검색 가능.
19. HyDE RAGHypothetical Document Embeddings를 사용하여 의미적 매칭 개선.
20. CRAGCorrective RAG: 검색 품질을 동적으로 평가하고 웹 검색을 대체 수단으로 사용.
21. Rag with RL강화 학습을 사용하여 RAG 모델의 보상 최대화.
Best RAG FinderSimple RAG + Reranker + Query Rewrite를 사용하여 주어진 쿼리에 대한 최적의 RAG 기법 찾기.
22. Big Data with 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. OpenAI API 키 설정:

    • Nebius AI에서 API 키 획득.

    • 환경 변수로 API 키 설정:

      export OPENAI_API_KEY='YOUR_NEBIUS_AI_API_KEY'
      

      또는

      setx OPENAI_API_KEY "YOUR_NEBIUS_AI_API_KEY"  # Windows에서
      

      또는 Python 스크립트/노트북 내에서:

      import os
      os.environ["OPENAI_API_KEY"] = "YOUR_NEBIUS_AI_API_KEY"
      
  4. 노트북 실행:

    Jupyter Notebook 또는 JupyterLab을 사용하여 Jupyter Notebook (.ipynb 파일) 열기. 각 노트북은 독립적으로 실행 가능하도록 설계되었습니다. 노트북은 각 파일 내에서 순차적으로 실행되도록 구성되었습니다.

    참고: data/AI_Information.pdf 파일은 테스트용 샘플 문서를 제공합니다. 자신의 PDF로 교체할 수 있습니다. data/val.json 파일은 평가를 위한 샘플 쿼리와 이상적인 답변을 포함합니다. 'attention_is_all_you_need.pdf'는 Multi-Modal RAG 노트북 테스트용입니다.

💡 핵심 개념

  • 임베딩: 텍스트의 의미를 포착하는 수치적 표현. Nebius AI의 임베딩 API와 많은 노트북에서 BAAI/bge-en-icl 임베딩 모델 사용.

  • 벡터 저장소: 임베딩을 저장하고 검색하기 위한 간단한 데이터베이스. NumPy를 사용하여 효율적인 유사도 계산을 위한 SimpleVectorStore 클래스 생성.

  • 코사인 유사도: 두 벡터 간의 유사도 측정. 값이 높을수록 유사도가 높음.

  • 청킹: 텍스트를 더 작고 관리하기 쉬운 조각으로 분할. 다양한 청킹 전략 탐구.

  • 검색: 주어진 쿼리에 대한 가장 관련성 높은 텍스트 청크를 찾는 과정.

  • 생성: 대형 언어 모델(LLM)을 사용하여 검색된 컨텍스트와 사용자 쿼리를 기반으로 응답 생성. Nebius AI의 API를 통해 meta-llama/Llama-3.2-3B-Instruct 모델 사용.

  • 평가: RAG 시스템의 응답 품질 평가, 종종 참조 답변과 비교하거나 LLM을 사용하여 관련성 점수화.

🤝 기여하기

기여를 환영합니다!