Leia isto no seu idioma preferido:
Deutsch | Español | Français | 日本語 | 한국어 | Português | Русский | 中文
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.
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:
Aqui está uma visão geral das técnicas abordadas:
Notebook | Descrição |
---|---|
1. RAG Simples | Uma implementação básica de RAG. Um ótimo ponto de partida! |
2. Segmentação Semântica | Divide o texto com base em similaridade semântica para obter segmentos mais significativos. |
3. Seletor de Tamanho de Segmento | Explora o impacto de diferentes tamanhos de segmentos no desempenho da recuperação. |
4. RAG com Contexto Enriquecido | Recupera segmentos vizinhos para fornecer mais contexto. |
5. Cabeçalhos de Segmento Contextuais | Adiciona cabeçalhos descritivos a cada segmento antes da incorporação. |
6. RAG com Aumento de Documento | Gera perguntas a partir de segmentos de texto para aumentar o processo de recuperação. |
7. Transformação de Consulta | Reescreve, expande ou decompõe consultas para melhorar a recuperação. Inclui Step-back Prompting e Sub-query Decomposition. |
8. Reordenador | Reordena os resultados inicialmente recuperados usando um LLM para melhor relevância. |
9. RSE | Extração de Segmento Relevante: Identifica e reconstrói segmentos contínuos de texto, preservando o contexto. |
10. Compressão Contextual | Implementa compressão contextual para filtrar e comprimir segmentos recuperados, maximizando informações relevantes. |
11. RAG com Loop de Feedback | Incorpora feedback do usuário para aprender e melhorar o sistema RAG ao longo do tempo. |
12. RAG Adaptativo | Seleciona dinamicamente a melhor estratégia de recuperação com base no tipo de consulta. |
13. Self RAG | Implementa Self-RAG, decide dinamicamente quando e como recuperar, avalia a relevância e verifica suporte e utilidade. |
14. Segmentação por Proposição | Divide documentos em afirmações factuais atômicas para recuperação precisa. |
15. RAG Multimodelo | Combina texto e imagens para recuperação, gerando legendas para imagens usando LLaVA. |
16. RAG de Fusão | Combina busca vetorial com recuperação baseada em palavras-chave (BM25) para resultados aprimorados. |
17. RAG com Grafo | Organiza o conhecimento como um grafo, permitindo a travessia de conceitos relacionados. |
18. RAG Hierárquico | Constrói índices hierárquicos (resumos + segmentos detalhados) para recuperação eficiente. |
19. RAG HyDE | Usa Hypothetical Document Embeddings para melhorar a correspondência semântica. |
20. CRAG | RAG Corretivo: Avalia dinamicamente a qualidade da recuperação e usa busca na web como fallback. |
21. RAG com RL | Maximiza a recompensa do modelo RAG usando Aprendizado por Reforço. |
Encontrador de Melhor RAG | Encontra a melhor técnica RAG para uma consulta específica usando RAG Simples + Reordenador + Reescrever Consulta. |
22. Grandes Dados com Grafos de Conhecimento | Lida com grandes conjuntos de dados usando Grafos de Conhecimento. |
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).
Clone o repositório:
git clone https://github.com/FareedKhan-dev/all-rag-techniques.git
cd all-rag-techniques
Instale as dependências:
pip install -r requirements.txt
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"
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.
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.
Contribuições são bem-vindas!