Quinta Etapa: Exploração de Cenários de Aplicação de IA
Uma coleção abrangente de técnicas avançadas para sistemas de Geração Aumentada por Recuperação (RAG), cobrindo mais de 30 implementações de técnicas RAG, desde o básico até o de ponta, incluindo exemplos de código completos e documentação detalhada.
Materiais de Estudo de Técnicas RAG: Uma Introdução Detalhada
Visão Geral do Projeto
RAG Techniques é um projeto de código aberto no GitHub criado por Nir Diamant, focado em demonstrar várias técnicas avançadas de sistemas de Geração Aumentada por Recuperação (Retrieval-Augmented Generation, RAG). O projeto visa fornecer um repositório abrangente de recursos para pesquisadores e desenvolvedores, ajudando-os a construir sistemas RAG mais precisos e contextualmente relevantes.
Características do Projeto
🌟 Principais Características
- Tecnologias de Ponta: Abrange as mais recentes técnicas de aprimoramento de sistemas RAG
- Documentação Completa: Cada técnica possui documentação detalhada
- Guia Prático: Oferece orientação prática para implementação
- Atualizações Contínuas: Atualizações regulares com os mais recentes avanços tecnológicos
- Comunidade Ativa: Possui uma comunidade ativa no Discord (mais de 20.000 entusiastas de IA)
🎯 Público-Alvo
- Pesquisadores de IA
- Engenheiros de Machine Learning
- Desenvolvedores e Profissionais
- Estudantes interessados em tecnologia RAG
Classificação e Introdução Detalhada das Técnicas
1. Técnicas Fundamentais (Foundational 🌱)
Simple RAG
- Descrição: Apresenta as técnicas básicas de RAG, adequadas para iniciantes
- Implementação: Suporta LangChain e LlamaIndex
- Funcionalidade: Consulta de recuperação básica e mecanismo de aprendizado incremental
Simple RAG using CSV
- Descrição: Implementação básica de RAG usando arquivos CSV
- Funcionalidade: Utiliza arquivos CSV para criar recuperação básica e integração com OpenAI
Corrective RAG
- Descrição: Aprimora o RAG simples, adicionando mecanismos de validação e melhoria
- Funcionalidade: Verifica a relevância dos documentos recuperados e destaca os trechos de documentos usados para a resposta
2. Técnicas de Fragmentação (Chunking Techniques)
Choose Chunk Size
- Descrição: Selecionar o tamanho apropriado do bloco de texto para equilibrar a retenção de contexto e a eficiência da recuperação
- Implementação:
# Exemplo: Experimentos com diferentes tamanhos de fragmentos
chunk_sizes = [200, 500, 1000, 2000]
for size in chunk_sizes:
# Testar o desempenho da recuperação com diferentes tamanhos
evaluate_chunk_performance(size)
Proposition Chunking
- Descrição: Decompor o texto em frases concisas, completas e significativas
- Características:
- 💪 Geração de Proposições: Usa LLM para gerar declarações factuais de blocos de documentos
- ✅ Verificação de Qualidade: Avalia a precisão, clareza, completude e concisão
Semantic Chunking
- Descrição: Dividir documentos com base na coerência semântica, em vez de um tamanho fixo
- Vantagens: Usa técnicas de PNL para identificar limites temáticos, criando unidades de recuperação mais significativas
3. Técnicas de Processamento de Consulta (Query Processing)
Query Transformations
- Descrição: Modificar e expandir consultas para melhorar a eficácia da recuperação
- As técnicas incluem:
- ✍️ Reescrita de Consulta: Reformular consultas para melhorar a recuperação
- 🔙 Prompt de Fallback: Gerar consultas mais amplas para obter melhor contexto
- 🧩 Decomposição de Subconsultas: Dividir consultas complexas em subconsultas simples
Hypothetical Questions (HyDE)
- Descrição: Gerar perguntas hipotéticas para melhorar a correspondência entre a consulta e os dados
- Funcionalidade: Cria perguntas hipotéticas que apontam para locais relevantes nos dados
Hypothetical Prompt Embeddings (HyPE)
- Descrição: Versão aprimorada do HyDE, pré-calcula prompts hipotéticos na fase de indexação
- Vantagens:
- 📖 Perguntas Pré-calculadas: Gera múltiplas consultas hipotéticas no momento da indexação
- 🔍 Correspondência Pergunta-Pergunta: A consulta do usuário corresponde às perguntas hipotéticas armazenadas
- ⚡ Sem Sobrecarga em Tempo de Execução: Não requer a chamada de um LLM no momento da consulta
4. Técnicas de Processamento de Contexto (Context Processing)
Context Enrichment Techniques
- Descrição: Aumentar a precisão da recuperação incorporando frases individuais e expandindo para frases adjacentes
- Implementação:
# Exemplo: Expansão da janela de contexto
def get_context_window(sentence_index, window_size=2):
start = max(0, sentence_index - window_size)
end = min(len(sentences), sentence_index + window_size + 1)
return sentences[start:end]
Contextual Compression
- Descrição: Comprimir as informações recuperadas, mantendo o conteúdo relevante para a consulta
- Método: Usar um LLM para comprimir ou resumir os blocos recuperados
Contextual Chunk Headers (CCH)
- Descrição: Criar contexto em nível de documento e capítulo e adicioná-lo aos cabeçalhos dos blocos
- Funcionalidade: Melhora a precisão da recuperação
5. Técnicas de Aprimoramento de Recuperação (Retrieval Enhancement)
Fusion Retrieval
- Descrição: Otimizar os resultados da pesquisa combinando diferentes métodos de recuperação
- Implementação: Combina pesquisa baseada em palavras-chave e pesquisa baseada em vetores
Intelligent Reranking
- Descrição: Aplicar mecanismos avançados de pontuação para melhorar a classificação de relevância dos resultados da recuperação
- Técnicas:
- 🧠 Pontuação Baseada em LLM
- 🔀 Modelos de Cross-Encoder
- 🏆 Classificação Aprimorada por Metadados
Multi-faceted Filtering
- Descrição: Aplicar várias técnicas de filtragem para melhorar a qualidade dos resultados da recuperação
- Inclui:
- 🏷️ Filtragem por Metadados
- 📊 Limiar de Similaridade
- 📄 Filtragem de Conteúdo
- 🌈 Filtragem de Diversidade
6. Técnicas de Arquitetura Avançada (Advanced Architecture)
Hierarchical Indices
- Descrição: Criar um sistema multicamadas para navegação e recuperação eficiente de informações
- Implementação: Sistema de duas camadas com resumos de documentos e blocos detalhados
Ensemble Retrieval
- Descrição: Combinar múltiplos modelos ou técnicas de recuperação para obter resultados mais robustos e precisos
- Método: Usar mecanismos de votação ou ponderação para determinar o conjunto final de documentos recuperados
RAPTOR
- Descrição: Recuperação organizada em árvore com processamento abstrato recursivo
- Características: Processa recursivamente documentos recuperados usando resumos abstratos, organizando as informações em uma estrutura de árvore
7. Técnicas Adaptativas (Adaptive Techniques)
Adaptive Retrieval
- Descrição: Ajustar dinamicamente as estratégias de recuperação com base no tipo de consulta e no contexto do usuário
- Funcionalidade: Utiliza estratégias de recuperação personalizadas para diferentes categorias de consultas
Self RAG
- Descrição: Uma abordagem dinâmica que combina métodos de recuperação e geração
- Fluxo: Decisão de Recuperação → Recuperação de Documentos → Avaliação de Relevância → Geração de Resposta
Corrective RAG (CRAG)
- Descrição: Um método RAG complexo que avalia e corrige dinamicamente o processo de recuperação
- Componentes: Avaliador de Recuperação, Refinamento de Conhecimento, Reescritor de Consulta de Pesquisa na Web
8. Técnicas Multimodais (Multi-modal)
Multi-modal Retrieval
- Descrição: Estender as capacidades do RAG para lidar com múltiplos tipos de dados
- Métodos:
- Títulos Multimídia: Gerar títulos para todos os dados multimídia
- Colpali: Converter todos os dados em imagens e usar LLM visual
9. Integração de Grafo de Conhecimento
Knowledge Graph Integration (Graph RAG)
- Descrição: Integrar dados estruturados de grafos de conhecimento para enriquecer o contexto
- Funcionalidade: Recuperar entidades e relações relevantes para a consulta
GraphRAG (Microsoft)
- Descrição: O sistema GraphRAG de código aberto da Microsoft
- Características: Extrai entidades, relações de unidades de texto e gera resumos de comunidade
10. Técnicas de Avaliação (Evaluation)
DeepEval Evaluation
- Descrição: Avaliação abrangente de sistemas RAG
- Métricas: Correção, Fidelidade, Relevância Contextual
GroUSE Evaluation
- Descrição: Avaliação de LLM baseada em contexto
- Funcionalidade: Avalia usando 6 métricas do framework GroUSE
Guia de Implementação
Início Rápido
# Clonar o repositório
git clone https://github.com/NirDiamant/RAG_Techniques.git
# Navegar para o diretório da técnica específica
cd all_rag_techniques/technique-name
# Seguir o guia de implementação detalhado em cada diretório de técnica
Suporte à Pilha de Tecnologia
- LangChain: Suporte principal do framework
- LlamaIndex: Suporte para algumas técnicas
- OpenAI API: Integração de modelos generativos
- Vários Modelos de Embedding: Suporta múltiplos métodos de vetorização
Caminho de Aprendizagem Sugerido
Caminho para Iniciantes
- Simple RAG → Entender os conceitos básicos
- Choose Chunk Size → Aprender fragmentação de texto
- Query Transformations → Compreender a otimização de consultas
- Context Enrichment → Dominar o processamento de contexto
Caminho Avançado
- Semantic Chunking → Técnicas avançadas de fragmentação
- Fusion Retrieval → Combinação de múltiplos métodos
- Intelligent Reranking → Otimização de resultados
- Hierarchical Indices → Arquiteturas complexas
Caminho para Especialistas
- Self RAG → Sistemas adaptativos
- Graph RAG → Integração de grafo de conhecimento
- RAPTOR → Processamento recursivo
- Multi-modal Retrieval → Processamento multimodal
Este material de estudo oferece um caminho de aprendizagem completo para técnicas RAG, do básico ao avançado, adequado para estudantes de diferentes níveis, sendo um dos recursos mais abrangentes de técnicas RAG disponíveis atualmente.