RAG Avançado: LongRAG, Self-RAG e GraphRAG Explicados

LongRAG, Self-RAG, GraphRAG – Técnicas de próxima geração

Conteúdo da página

Geração Aumentada por Recuperação (RAG) evoluiu muito além da simples busca de similaridade vetorial. LongRAG, Self-RAG e GraphRAG representam o estado da arte dessas capacidades.

Sistemas RAG modernos precisam lidar com documentos massivos, entender relacionamentos complexos de entidades e muito mais.

um-capitão-pirata Esta bela imagem foi gerada pelo modelo de IA Flux 1 dev.

A Evolução Além do RAG Básico

Os sistemas RAG tradicionais seguem um padrão simples: dividir documentos em blocos (chunks), incorporá-los em vetores, recuperar blocos similares via similaridade de cosseno e alimentá-los em um LLM. Embora eficaz para muitos casos de uso, essa abordagem enfrenta dificuldades em três cenários críticos:

Compreender a distinção entre busca, deepsearch e pesquisa profunda ajuda a esclarecer por que variantes avançadas de RAG são necessárias para tarefas complexas de recuperação de informações. Para uma análise mais aprofundada desses conceitos, consulte Busca vs Deepsearch vs Pesquisa Profunda.

  1. Dependências de longo alcance: O contexto importante pode abranger milhares de tokens em múltiplos blocos
  2. Confiança na recuperação: O sistema não tem como avaliar se o conteúdo recuperado é realmente relevante
  3. Complexidade de relacionamentos: A similaridade vetorial não consegue capturar conexões intricadas entre entidades

Variantes avançadas de RAG abordam essas limitações com arquiteturas especializadas adaptadas a desafios específicos.

LongRAG: Conquistando o Contexto Estendido

Visão Geral da Arquitetura

O LongRAG reimagina fundamentalmente a estratégia de fragmentação (chunking) aproveitando LLMs com janelas de contexto estendidas (32K, 100K ou até 1M tokens). Em vez de dividir documentos em blocos pequenos de 512 tokens, o LongRAG utiliza uma abordagem hierárquica:

Incorporação ao Nível de Documento: O documento inteiro (ou seções muito grandes) é processado como uma única unidade. Uma incorporação de nível de documento captura o significado semântico geral, mantendo o texto completo para processamento subsequente.

Fragmentação Mínima: Quando a fragmentação é necessária, o LongRAG usa blocos muito maiores (4K-8K tokens) com sobreposição significativa (20-30%). Isso preserva o fluxo narrativo e reduz a fragmentação do contexto.

Montagem de Contexto: No momento da recuperação, o LongRAG retorna documentos completos ou seções grandes e coerentes, em vez de fragmentos dispersos. O LLM recebe um contexto contínuo que preserva os relacionamentos estruturais e semânticos.

Estratégia de Implementação

Aqui está uma implementação conceitual usando Python e modelos de incorporação modernos:

from typing import List, Dict
import numpy as np

class LongRAGRetriever:
    def __init__(self, model, chunk_size=8000, overlap=1600):
        self.model = model
        self.chunk_size = chunk_size
        self.overlap = overlap
        self.doc_embeddings = []
        self.documents = []
    
    def create_long_chunks(self, text: str) -> List[str]:
        """Cria blocos grandes sobrepostos"""
        chunks = []
        start = 0
        while start < len(text):
            end = start + self.chunk_size
            chunk = text[start:end]
            chunks.append(chunk)
            start += (self.chunk_size - self.overlap)
        return chunks
    
    def index_document(self, doc: str, metadata: Dict):
        """Indexa documento com incorporação hierárquica"""
        # Incorpora documento inteiro
        doc_embedding = self.model.embed(doc)
        
        # Cria blocos grandes com sobreposição
        chunks = self.create_long_chunks(doc)
        chunk_embeddings = [self.model.embed(c) for c in chunks]
        
        self.doc_embeddings.append({
            'doc_id': len(self.documents),
            'doc_embedding': doc_embedding,
            'chunk_embeddings': chunk_embeddings,
            'chunks': chunks,
            'full_text': doc,
            'metadata': metadata
        })
        self.documents.append(doc)
    
    def retrieve(self, query: str, top_k: int = 3) -> List[Dict]:
        """Recupera conteúdo relevante de formato longo"""
        query_embedding = self.model.embed(query)
        
        # Pontua primeiro no nível de documento
        doc_scores = [
            np.dot(query_embedding, doc['doc_embedding'])
            for doc in self.doc_embeddings
        ]
        
        # Obtém os melhores documentos
        top_doc_indices = np.argsort(doc_scores)[-top_k:][::-1]
        
        results = []
        for idx in top_doc_indices:
            doc_data = self.doc_embeddings[idx]
            
            # Para cada documento, encontra os melhores blocos
            chunk_scores = [
                np.dot(query_embedding, emb)
                for emb in doc_data['chunk_embeddings']
            ]
            best_chunk_idx = np.argmax(chunk_scores)
            
            # Retorna contexto estendido ao redor do melhor bloco
            context_chunks = self._get_extended_context(
                doc_data['chunks'], 
                best_chunk_idx
            )
            
            results.append({
                'text': ''.join(context_chunks),
                'score': doc_scores[idx],
                'metadata': doc_data['metadata']
            })
        
        return results
    
    def _get_extended_context(self, chunks: List[str], 
                             center_idx: int) -> List[str]:
        """Obtém contexto estendido ao redor do bloco relevante"""
        start = max(0, center_idx - 1)
        end = min(len(chunks), center_idx + 2)
        return chunks[start:end]

Casos de Uso e Desempenho

O LongRAG destaca-se em cenários onde o contexto importa:

  • Análise de documentos legais: Contratos e memorandos legais frequentemente têm dependências que se estendem por dezenas de páginas
  • Recuperação de artigos de pesquisa: Compreender a metodologia requer seções coerentes, não parágrafos isolados
  • Repositórios de código: Funções e classes devem ser compreendidas dentro do contexto de seu módulo

Características de desempenho:

  • Latência: Maior devido ao processamento de blocos grandes (2-5x mais lento que o RAG padrão)
  • Precisão: Melhoria de 15-25% em benchmarks de QA de formato longo
  • Memória: Requer 3-4x mais memória para janelas de contexto

Self-RAG: Recuperação Reflexiva

Princípios Centrais

O Self-RAG introduz uma camada metacognitiva aos sistemas RAG. Em vez de recuperar e gerar cegamente, o sistema reflete ativamente sobre seus próprios processos através de tokens de reflexão especiais:

Token Retrieve: Decide se a recuperação é necessária para uma consulta dada Token Relevance: Avalia se os documentos recuperados são realmente relevantes Token Support: Verifica se a resposta gerada é sustentada pelo conteúdo recuperado Token Critique: Avalia a qualidade geral da resposta gerada

Componentes da Arquitetura

A arquitetura Self-RAG consiste em três fases intercaladas:

class SelfRAGSystem:
    def __init__(self, retriever, generator, critic):
        self.retriever = retriever
        self.generator = generator
        self.critic = critic
    
    def generate_with_reflection(self, query: str, 
                                 max_iterations: int = 3):
        """Gera resposta com autorreflexão"""
        
        # Fase 1: Decide se a recuperação é necessária
        retrieve_decision = self.critic.should_retrieve(query)
        
        if not retrieve_decision:
            # Geração direta sem recuperação
            return self.generator.generate(query)
        
        # Fase 2: Recupera e avalia relevância
        retrieved_docs = self.retriever.retrieve(query)
        relevant_docs = []
        
        for doc in retrieved_docs:
            relevance_score = self.critic.assess_relevance(
                query, doc
            )
            if relevance_score > 0.7:  # Limiar
                relevant_docs.append(doc)
        
        if not relevant_docs:
            # Fallback para geração sem recuperação
            return self.generator.generate(query)
        
        # Fase 3: Gera e verifica suporte
        best_answer = None
        best_score = -1
        
        for _ in range(max_iterations):
            # Gera resposta candidata
            answer = self.generator.generate(
                query, context=relevant_docs
            )
            
            # Avalia suporte e qualidade
            support_score = self.critic.check_support(
                answer, relevant_docs
            )
            quality_score = self.critic.assess_quality(answer)
            
            total_score = 0.6 * support_score + 0.4 * quality_score
            
            if total_score > best_score:
                best_score = total_score
                best_answer = answer
            
            # Parada antecipada se alta qualidade for atingida
            if total_score > 0.9:
                break
        
        return {
            'answer': best_answer,
            'confidence': best_score,
            'sources': relevant_docs,
            'reflections': {
                'retrieved': retrieve_decision,
                'relevance': len(relevant_docs),
                'support': support_score
            }
        }

Treinamento dos Mecanismos de Reflexão

O Self-RAG requer o treinamento do componente crítico para realizar avaliações confiáveis. Isso tipicamente envolve:

  1. Ajuste supervisionado (fine-tuning) em conjuntos de dados anotados com julgamentos de relevância
  2. Aprendizado por reforço com recompensas por previsões precisas
  3. Aprendizado contrastivo para distinguir afirmações suportadas de não suportadas

Os tokens de reflexão podem ser implementados como:

  • Tokens especiais no vocabulário (como [RETRIEVE], [RELEVANT])
  • Cabeças de classificador separadas no modelo
  • Modelos críticos externos (abordagem de ensemble)

Considerações de Produção

Ao implantar Self-RAG em sistemas de produção:

Compensações de Latência: Cada passo de reflexão adiciona 20-40% de sobrecarga de inferência. Equilibre a profundidade com os requisitos de tempo de resposta.

Limiares de Confiança: Ajuste os limiares de reflexão com base no seu caso de uso. Aplicações legais ou médicas precisam de maior confiança do que chatbots gerais.

Monitoramento: Acompanhe as decisões de reflexão para identificar padrões. Se a recuperação raramente for necessária, você pode se beneficiar de uma arquitetura mais simples.

GraphRAG: Recuperação Aprimorada por Grafo de Conhecimento

Fundamentação Conceitual

O GraphRAG transforma o problema de recuperação de similaridade vetorial para travessia de grafo. Em vez de encontrar blocos de texto semanticamente similares, o GraphRAG identifica subgrafos relevantes de entidades e relacionamentos conectados.

Extração de Entidades: Identifica entidades nomeadas, conceitos e seus tipos Mapeamento de Relacionamentos: Extrai relacionamentos entre entidades (temporal, causal, hierárquico) Construção de Grafo: Constrói um grafo de conhecimento com entidades como nós e relacionamentos como arestas Recuperação de Subgrafo: Dada uma consulta, encontra subgrafos conectados relevantes

Pipeline de Construção de Grafo

Construir um grafo de conhecimento a partir de texto não estruturado envolve vários estágios:

class GraphRAGBuilder:
    def __init__(self, entity_extractor, relation_extractor):
        self.entity_extractor = entity_extractor
        self.relation_extractor = relation_extractor
        self.graph = NetworkGraph()
    
    def build_graph(self, documents: List[str]):
        """Constrói grafo de conhecimento a partir de documentos"""
        for doc in documents:
            # Extrai entidades
            entities = self.entity_extractor.extract(doc)
            
            # Adiciona entidades como nós
            for entity in entities:
                self.graph.add_node(
                    entity['text'],
                    entity_type=entity['type'],
                    context=entity['surrounding_text']
                )
            
            # Extrai relacionamentos
            relations = self.relation_extractor.extract(
                doc, entities
            )
            
            # Adiciona relacionamentos como arestas
            for rel in relations:
                self.graph.add_edge(
                    rel['source'],
                    rel['target'],
                    relation_type=rel['type'],
                    confidence=rel['score'],
                    evidence=rel['text_span']
                )
    
    def enrich_graph(self):
        """Adiciona relacionamentos derivados e metadados"""
        # Computa importância dos nós (PageRank, etc.)
        self.graph.compute_centrality()
        
        # Identifica comunidades/cluster
        self.graph.detect_communities()
        
        # Adiciona ordenamento temporal se carimbos de data/hora estiverem disponíveis
        self.graph.add_temporal_edges()

Processamento de Consulta com Grafos

As consultas GraphRAG envolvem raciocínio multi-hop através do grafo de conhecimento:

class GraphRAGRetriever:
    def __init__(self, graph, embedder):
        self.graph = graph
        self.embedder = embedder
    
    def retrieve_subgraph(self, query: str, 
                         max_hops: int = 2,
                         max_nodes: int = 50):
        """Recupera subgrafo relevante para a consulta"""
        
        # Identifica entidades semente na consulta
        query_entities = self.entity_extractor.extract(query)
        
        # Encontra nós correspondentes no grafo
        seed_nodes = []
        for entity in query_entities:
            matches = self.graph.find_similar_nodes(
                entity['text'],
                similarity_threshold=0.85
            )
            seed_nodes.extend(matches)
        
        # Expande subgrafo via travessia
        subgraph = self.graph.create_subgraph()
        visited = set()
        
        for seed in seed_nodes:
            self._expand_from_node(
                seed, 
                subgraph, 
                visited,
                current_hop=0,
                max_hops=max_hops
            )
        
        # Classifica nós por relevância
        ranked_nodes = self._rank_subgraph_nodes(
            subgraph, query
        )
        
        # Extrai e formata contexto
        context = self._format_graph_context(
            ranked_nodes[:max_nodes],
            subgraph
        )
        
        return context
    
    def _expand_from_node(self, node, subgraph, visited,
                         current_hop, max_hops):
        """Expande subgrafo recursivamente"""
        if current_hop >= max_hops or node in visited:
            return
        
        visited.add(node)
        subgraph.add_node(node)
        
        # Obtém vizinhos
        neighbors = self.graph.get_neighbors(node)
        
        for neighbor, edge_data in neighbors:
            # Adiciona aresta ao subgrafo
            subgraph.add_edge(node, neighbor, edge_data)
            
            # Expande recursivamente
            self._expand_from_node(
                neighbor,
                subgraph,
                visited,
                current_hop + 1,
                max_hops
            )
    
    def _format_graph_context(self, nodes, subgraph):
        """Converte subgrafo em contexto textual"""
        context_parts = []
        
        for node in nodes:
            # Adiciona contexto do nó
            context_parts.append(f"Entidade: {node.text}")
            context_parts.append(f"Tipo: {node.entity_type}")
            
            # Adiciona informações de relacionamento
            edges = subgraph.get_edges(node)
            for edge in edges:
                context_parts.append(
                    f"- {edge.relation_type} -> {edge.target.text}"
                )
        
        return "\n".join(context_parts)

Implementação do GraphRAG da Microsoft

O GraphRAG da Microsoft adota uma abordagem única ao gerar resumos de comunidades:

  1. Constrói grafo inicial a partir de documentos usando extração de entidades/relacionamentos baseada em LLM
  2. Detecta comunidades usando o algoritmo Leiden ou similar
  3. Gera resumos para cada comunidade usando LLMs
  4. Estrutura hierárquica: Constrói múltiplos níveis de abstrações de comunidade
  5. Tempo de consulta: Recupera comunidades relevantes e atravessa para entidades específicas

Essa abordagem é particularmente eficaz para:

  • Consultas exploratórias (“Quais são os principais temas neste corpus?”)
  • Raciocínio multi-hop (“Como A está conectado a C através de B?”)
  • Análise temporal (“Como os relacionamentos desta entidade evoluíram?”)

Análise Comparativa

Quando Usar Cada Variante

Use LongRAG quando:

  • Documentos têm coerência interna forte
  • Janelas de contexto do seu LLM suportam entradas grandes (32K+)
  • Respostas a consultas requerem compreensão de dependências de longo alcance
  • Você está trabalhando com documentos estruturados (relatórios, artigos, livros)

Use Self-RAG quando:

  • Precisão e confiabilidade são críticas
  • Você precisa de decisões de recuperação explicáveis
  • Falsos positivos de recuperação irrelevante são custosos
  • A complexidade da consulta varia amplamente (algumas precisam de recuperação, outras não)

Use GraphRAG quando:

  • Seu domínio tem relacionamentos ricos de entidades
  • Consultas envolvem raciocínio multi-hop
  • Relacionamentos temporais ou hierárquicos importam
  • Você precisa entender conexões entre entidades

Comparação de Métricas de Desempenho

Métrica RAG Padrão LongRAG Self-RAG GraphRAG
Tempo de Indexação 1x 0.8x 1.1x 3-5x
Latência de Consulta 1x 2-3x 1.4x 1.5-2x
Uso de Memória 1x 3-4x 1.2x 2-3x
Precisão (QA) baseline +15-25% +20-30% +25-40%*
Interpretabilidade Baixa Média Alta Alta

*Melhorias do GraphRAG altamente dependentes do domínio

Abordagens Híbridas

Os sistemas de produção mais poderosos frequentemente combinam múltiplas técnicas:

LongRAG + GraphRAG: Use estrutura de grafo para identificar clusters de documentos relevantes, depois recupere documentos completos em vez de fragmentos

Self-RAG + GraphRAG: Aplique mecanismos de reflexão a decisões de travessia de grafo (quais caminhos seguir, quando parar a expansão)

Pipeline de três estágios: Use GraphRAG para recuperação inicial baseada em entidades → Self-RAG para filtragem de relevância → LongRAG para montagem de contexto

Considerações de Implementação

Modelos de Incorporação

Diferentes variantes de RAG têm requisitos de incorporação distintos:

LongRAG: Precisa de incorporações que funcionem bem tanto no nível de documento quanto no nível de bloco. Considere modelos treinados com aprendizado contrastivo em sequências longas.

Self-RAG: Beneficia-se de incorporações que capturam nuances semânticas para avaliação de relevância de grão fino.

GraphRAG: Requer incorporações conscientes de entidades. Modelos ajustados em tarefas de vinculação de entidades performam melhor.

A escolha do modelo de incorporação impacta significativamente o desempenho. Ao trabalhar com modelos locais, ferramentas como Ollama fornecem uma maneira direta de experimentar com diferentes modelos de incorporação antes de comprometer-se com uma implantação de produção.

Estratégias de Fragmentação Revisitadas

A fragmentação de tamanho fixo tradicional é insuficiente para RAG avançado:

Fragmentação semântica: Quebre em limites naturais (parágrafos, seções, mudanças de tópico) Fragmentação recursiva: Crie blocos hierárquicos com relacionamentos pai-filho Janela deslizante: Use blocos sobrepostos para preservar contexto nos limites Consciente de estrutura: Respeite a estrutura do documento (cabeçalhos markdown, tags XML, blocos de código)

Para implementações baseadas em Python, bibliotecas como LangChain e LlamaIndex fornecem suporte nativo para essas estratégias de fragmentação.

Integração de Reranking

O reranking melhora drasticamente a qualidade de recuperação em todas as variantes de RAG. Após a recuperação inicial, um modelo de reranking especializado reclassifica os resultados com base em características de interação consulta-documento. Isso proporciona um aumento significativo de precisão (10-20%) com impacto mínimo de latência quando integrado de forma inteligente.

Escalonamento para Produção

Pipeline de indexação:

  • Use processamento distribuído (Ray, Dask) para grandes corpora de documentos
  • Implemente indexação incremental para atualizações em tempo real
  • Armazene incorporações em bancos de dados vetoriais otimizados (Pinecone, Weaviate, Qdrant)

Otimização de consulta:

  • Cacheie consultas frequentes e seus resultados
  • Implemente roteamento de consulta (diferentes variantes de RAG para diferentes tipos de consulta)
  • Use busca de vizinho mais próximo aproximado para escalonamento sublinear

Monitoramento:

  • Acompanhe pontuações de relevância de recuperação
  • Monitore decisões de reflexão no Self-RAG
  • Meça caminhos e profundidades de travessia de grafo
  • Registre pontuações de confiança e feedback do usuário

Aplicações do Mundo Real

Pesquisa em Documentação Técnica

Um grande provedor de nuvem implementou GraphRAG para sua documentação:

  • Entidades: Endpoints de API, parâmetros, códigos de erro, nomes de serviço
  • Relacionamentos: Dependências, compatibilidades de versão, caminhos de migração
  • Resultado: Redução de 35% em tickets de suporte, tempo de resolução 45% mais rápido

Uma empresa de tecnologia jurídica combinou Self-RAG com LongRAG:

  • Self-RAG filtra documentos irrelevantes precocemente
  • LongRAG preserva contexto nos documentos retidos
  • Advogados revisam 60% menos falsos positivos
  • Preservação de contexto crítico melhorou de 71% para 94%

Revisão de Literatura Acadêmica

Mecanismo de busca acadêmico usando abordagem híbrida:

  • GraphRAG identifica redes de citação e comunidades de pesquisa
  • LongRAG recupera seções completas mantendo o contexto metodológico
  • Melhoria de 40% na descoberta de artigos relevantes
  • Redução do tempo de revisão de literatura de semanas para dias

Tópicos Avançados

RAG Multimodal

Estendendo essas variantes para lidar com imagens, tabelas e código:

  • Ancoragem visual: Vincular entidades de texto a imagens em documentos
  • Compreensão de tabelas: Analisar dados estruturados em formato de grafo
  • Análise de código: Construir grafos de dependência a partir de bases de código

RAG Adaptativo

Seleção dinâmica de estratégia de RAG baseada em características da consulta:

  • Classificador de complexidade de consulta
  • Detetor de tipo de documento
  • Otimizador de custo-benefício para seleção de estratégia

RAG com Preservação de Privacidade

Implementando essas variantes com restrições de privacidade:

  • Recuperação federada através de silos de dados
  • Privacidade diferencial em incorporações
  • Busca de similaridade criptografada

Começando

Início Rápido com Python

Para aqueles que desejam implementar essas técnicas, começar com uma base sólida em Python é essencial. O rico ecossistema de Python para aprendizado de máquina o torna a escolha natural para desenvolvimento de RAG.

Aqui está um ponto de partida simples para experimentação:

# Instale dependências
# pip install sentence-transformers faiss-cpu langchain

from sentence_transformers import SentenceTransformer
import faiss
import numpy as np

# Configuração básica para experimentação com blocos longos
model = SentenceTransformer('all-MiniLM-L6-v2')

documents = [
    # Seus documentos de formato longo aqui
]

# Cria incorporações
embeddings = model.encode(documents)

# Constrói índice FAISS
dimension = embeddings.shape[1]
index = faiss.IndexFlatL2(dimension)
index.add(embeddings.astype('float32'))

# Consulta
query = "Sua pergunta aqui"
query_embedding = model.encode([query])
distances, indices = index.search(
    query_embedding.astype('float32'), k=3
)

Seleção de Framework

LangChain: Melhor para prototipagem rápida, integrações extensas LlamaIndex: Otimizado para indexação e recuperação de documentos Haystack: Pronto para produção, abstrações de pipeline robustas Personalizado: Quando você precisa de controle total e otimização

Framework de Avaliação

Implemente avaliação rigorosa antes da implantação em produção:

Métricas de recuperação:

  • Precisão@K, Recall@K, MRR (Rank Recíproco Médio)
  • NDCG (Ganho Acumulado Descontado Normalizado)

Métricas de geração:

  • ROUGE, BLEU para similaridade de texto
  • BERTScore para similaridade semântica
  • Avaliação humana para qualidade

Métricas de ponta a ponta:

  • Taxa de sucesso da tarefa
  • Pontuações de satisfação do usuário
  • Percentis de latência (p50, p95, p99)

Conclusão

O cenário de sistemas RAG amadureceu significativamente além da busca básica de similaridade vetorial. LongRAG, Self-RAG e GraphRAG abordam limitações específicas de abordagens tradicionais:

LongRAG resolve o problema de fragmentação de contexto ao abraçar janelas de contexto estendidas e fragmentação mínima. É a escolha ideal quando a coerência do documento importa e você tem recursos computacionais para lidar com contextos grandes.

Self-RAG adiciona autoconsciência crítica aos sistemas de recuperação. Ao refletir sobre suas próprias decisões, reduz falsos positivos e melhora a confiabilidade—essencial para aplicações de alto risco onde a precisão importa mais que a velocidade.

GraphRAG desbloqueia o poder da representação de conhecimento estruturado. Quando seu domínio envolve relacionamentos complexos entre entidades, a recuperação baseada em grafo pode revelar conexões que a similaridade vetorial perde completamente.

O futuro do RAG provavelmente envolve abordagens híbridas que combinam as forças dessas variantes. Um sistema de produção pode usar GraphRAG para identificar clusters de entidades relevantes, Self-RAG para filtrar e validar recuperações e LongRAG para montar contexto coerente para o LLM.

À medida que os LLMs continuam a melhorar e as janelas de contexto se expandem, veremos ainda mais variantes sofisticadas de RAG emergirem. A chave é entender seus requisitos específicos de caso de uso—estrutura de documento, padrões de consulta, demandas de precisão e restrições computacionais—e selecionar a técnica apropriada ou combinação delas.

O ecossistema de ferramentas está amadurecendo rapidamente, com frameworks como LangChain, LlamaIndex e Haystack fornecendo suporte cada vez mais sofisticado para esses padrões avançados. Combinados com runtimes poderosos de LLM locais e modelos de incorporação, nunca foi tão fácil experimentar e implantar sistemas de RAG de nível de produção.

Comece com o básico, meça o desempenho rigorosamente e evolua sua arquitetura conforme os requisitos ditarem. As variantes avançadas de RAG cobertas aqui fornecem um roteiro para essa evolução.

Referências Externas