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.

Todas as Técnicas de RAG: Uma Abordagem Mais Simples e Prática ✨

Leia isto no seu idioma preferido:
Deutsch | Español | Français | 日本語 | 한국어 | Português | Русский | 中文

Python 3.7+ Nebius AI OpenAI Medium

Este repositório adota uma abordagem clara e prática para Geração Aumentada por Recuperação (RAG), decompondo técnicas avançadas em implementações diretas e compreensíveis. Em vez de depender de frameworks como LangChain ou FAISS, tudo aqui é construído usando bibliotecas Python familiares como openai, numpy, matplotlib e algumas outras.

O objetivo é simples: fornecer código que seja legível, modificável e educativo. Ao focar nos fundamentos, este projeto ajuda a desmistificar o RAG e facilita o entendimento de como ele realmente funciona.

Atualização: 📢

  • (12-Maio-2025) Adicionado um novo notebook sobre como lidar com grandes volumes de dados usando Grafos de Conhecimento.
  • (27-Abril-2025) Adicionado um novo notebook que encontra a melhor técnica RAG para uma consulta específica (RAG Simples + Reordenador + Reescrever Consulta).
  • (20-Mar-2025) Adicionado um novo notebook sobre RAG com Aprendizado por Reforço.
  • (07-Mar-2025) Adicionadas 20 técnicas RAG ao repositório.

🚀 O Que Há Dentro?

Este repositório contém uma coleção de Jupyter Notebooks, cada um focando em uma técnica específica de RAG. Cada notebook fornece:

  • Uma explicação concisa da técnica.
  • Uma implementação passo a passo do zero.
  • Exemplos de código claros com comentários inline.
  • Avaliações e comparações para demonstrar a eficácia da técnica.
  • Visualização para ilustrar os resultados.

Aqui está uma visão geral das técnicas abordadas:

NotebookDescrição
1. RAG SimplesUma implementação básica de RAG. Um ótimo ponto de partida!
2. Segmentação SemânticaDivide o texto com base em similaridade semântica para obter segmentos mais significativos.
3. Seletor de Tamanho de SegmentoExplora o impacto de diferentes tamanhos de segmentos no desempenho da recuperação.
4. RAG com Contexto EnriquecidoRecupera segmentos vizinhos para fornecer mais contexto.
5. Cabeçalhos de Segmento ContextuaisAdiciona cabeçalhos descritivos a cada segmento antes da incorporação.
6. RAG com Aumento de DocumentoGera perguntas a partir de segmentos de texto para aumentar o processo de recuperação.
7. Transformação de ConsultaReescreve, expande ou decompõe consultas para melhorar a recuperação. Inclui Step-back Prompting e Sub-query Decomposition.
8. ReordenadorReordena os resultados inicialmente recuperados usando um LLM para melhor relevância.
9. RSEExtração de Segmento Relevante: Identifica e reconstrói segmentos contínuos de texto, preservando o contexto.
10. Compressão ContextualImplementa compressão contextual para filtrar e comprimir segmentos recuperados, maximizando informações relevantes.
11. RAG com Loop de FeedbackIncorpora feedback do usuário para aprender e melhorar o sistema RAG ao longo do tempo.
12. RAG AdaptativoSeleciona dinamicamente a melhor estratégia de recuperação com base no tipo de consulta.
13. Self RAGImplementa Self-RAG, decide dinamicamente quando e como recuperar, avalia a relevância e verifica suporte e utilidade.
14. Segmentação por ProposiçãoDivide documentos em afirmações factuais atômicas para recuperação precisa.
15. RAG MultimodeloCombina texto e imagens para recuperação, gerando legendas para imagens usando LLaVA.
16. RAG de FusãoCombina busca vetorial com recuperação baseada em palavras-chave (BM25) para resultados aprimorados.
17. RAG com GrafoOrganiza o conhecimento como um grafo, permitindo a travessia de conceitos relacionados.
18. RAG HierárquicoConstrói índices hierárquicos (resumos + segmentos detalhados) para recuperação eficiente.
19. RAG HyDEUsa Hypothetical Document Embeddings para melhorar a correspondência semântica.
20. CRAGRAG Corretivo: Avalia dinamicamente a qualidade da recuperação e usa busca na web como fallback.
21. RAG com RLMaximiza a recompensa do modelo RAG usando Aprendizado por Reforço.
Encontrador de Melhor RAGEncontra a melhor técnica RAG para uma consulta específica usando RAG Simples + Reordenador + Reescrever Consulta.
22. Grandes Dados com Grafos de ConhecimentoLida com grandes conjuntos de dados usando Grafos de Conhecimento.

🗂️ Estrutura do Repositório

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).

🛠️ Começando

  1. Clone o repositório:

    git clone https://github.com/FareedKhan-dev/all-rag-techniques.git
    cd all-rag-techniques
    
  2. Instale as dependências:

    pip install -r requirements.txt
    
  3. Configure sua chave de API da OpenAI:

    • Obtenha uma chave de API em Nebius AI.

    • Defina a chave de API como uma variável de ambiente:

      export OPENAI_API_KEY='SUA_CHAVE_DE_API_NEBIUS_AI'
      

      ou

      setx OPENAI_API_KEY "SUA_CHAVE_DE_API_NEBIUS_AI"  # No Windows
      

      ou, dentro do seu script Python/notebook:

      import os
      os.environ["OPENAI_API_KEY"] = "SUA_CHAVE_DE_API_NEBIUS_AI"
      
  4. Execute os notebooks:

    Abra qualquer um dos Jupyter Notebooks (arquivos .ipynb) usando Jupyter Notebook ou JupyterLab. Cada notebook é autossuficiente e pode ser executado independentemente. Os notebooks são projetados para serem executados sequencialmente dentro de cada arquivo.

    Observação: O arquivo data/AI_Information.pdf fornece um documento de exemplo para teste. Você pode substituí-lo pelo seu próprio PDF. O arquivo data/val.json contém consultas de exemplo e respostas ideais para avaliação. O 'attention_is_all_you_need.pdf' é para testar o Notebook de RAG Multimodelo.

💡 Conceitos Principais

  • Embeddings: Representações numéricas de texto que capturam significado semântico. Usamos a API de embedding da Nebius AI e, em muitos notebooks, também o modelo de embedding BAAI/bge-en-icl.

  • Armazenamento Vetorial: Um banco de dados simples para armazenar e pesquisar embeddings. Criamos nossa própria classe SimpleVectorStore usando NumPy para cálculos de similaridade eficientes.

  • Similaridade de Cosseno: Uma medida de similaridade entre dois vetores. Valores mais altos indicam maior similaridade.

  • Segmentação: Divisão do texto em partes menores e gerenciáveis. Exploramos várias estratégias de segmentação.

  • Recuperação: O processo de encontrar os segmentos de texto mais relevantes para uma determinada consulta.

  • Geração: Usar um Modelo de Linguagem Grande (LLM) para criar uma resposta com base no contexto recuperado e na consulta do usuário. Usamos o modelo meta-llama/Llama-3.2-3B-Instruct via API da Nebius AI.

  • Avaliação: Avaliar a qualidade das respostas do sistema RAG, geralmente comparando-as com uma resposta de referência ou usando um LLM para pontuar a relevância.

🤝 Contribuindo

Contribuições são bem-vindas!