Skip to content

Latest commit

Β 

History

History
279 lines (224 loc) Β· 8.25 KB

File metadata and controls

279 lines (224 loc) Β· 8.25 KB

Dual RAG Architecture: Standard vs Adaptive RAG

The AutoRAG pipeline now implements two complementary RAG approaches that are evaluated head-to-head to determine the optimal strategy for different use cases.

Architecture Overview

graph TD
    A[Q&A Matrix Generation] --> B[Q&A Pair Selection]
    B --> C[Dual Vector Store Builder]
    
    C --> D1[Standard RAG<br/>Answer Embeddings Only]
    C --> D2[Adaptive RAG<br/>Q+A Combined Embeddings]
    
    D1 --> E1[Standard CPU Index]
    D1 --> E2[Standard GPU Index]
    D2 --> E3[Adaptive CPU Index] 
    D2 --> E4[Adaptive GPU Index]
    
    E1 --> F1[Standard RAG Evaluation]
    E2 --> F1
    E3 --> F2[Adaptive RAG Evaluation]
    E4 --> F2
    
    F1 --> G[RAG Comparison Analysis]
    F2 --> G
    
    G --> H[Winner Selection for Training]
    G --> I[Deployment Recommendations]
Loading

Two RAG Approaches Explained

πŸ”Ή Standard RAG (Traditional Approach)

Embedding Strategy: Answer embeddings only

# Standard approach embeds only the answer text
embedding = model.encode([answer_text])

Characteristics:

  • Speed: Faster retrieval with single embedding lookup
  • Simplicity: Proven approach, minimal complexity
  • Memory: Lower memory usage
  • Use Case: Direct factual questions, high-throughput scenarios

Best For:

  • Simple Q&A lookup scenarios
  • Resource-constrained environments
  • High-volume, low-complexity queries
  • When speed > quality trade-offs are acceptable

πŸ”Έ Adaptive RAG (Enhanced Approach)

Embedding Strategy: Combined Question+Answer embeddings

# Adaptive approach combines Q&A for richer context
combined_text = f"Q: {question} A: {answer}"
embedding = model.encode([combined_text])

Characteristics:

  • Quality: Better semantic understanding of Q&A relationships
  • Context: Captures question-answer context linkage
  • Intelligence: Query-aware retrieval strategies
  • Complexity: More sophisticated, higher computational cost

Best For:

  • Complex conceptual questions
  • Domain-specific queries requiring context understanding
  • Quality-critical applications
  • When accuracy > speed is the priority

Four FAISS Indices Generated

The pipeline now generates 4 FAISS indices for comprehensive evaluation:

Standard RAG Indices

  1. qa_faiss_index_standard_cpu.bin - CPU-optimized standard embeddings
  2. qa_faiss_index_standard_gpu.bin - GPU-optimized standard embeddings

Adaptive RAG Indices

  1. qa_faiss_index_adaptive_cpu.bin - CPU-optimized adaptive embeddings
  2. qa_faiss_index_adaptive_gpu.bin - GPU-optimized adaptive embeddings

Legacy Compatibility

  • qa_faiss_index_cpu.bin β†’ symlink to standard_cpu (backward compatibility)
  • qa_faiss_index_gpu.bin β†’ symlink to standard_gpu (backward compatibility)

Evaluation Pipeline

1. Parallel RAG Evaluation

Both approaches are evaluated simultaneously:

  • Standard RAG: Uses answer-only embeddings for retrieval
  • Adaptive RAG: Uses Q+A combined embeddings for retrieval

2. Performance Comparison

The rag_comparison_analyzer.py compares approaches across:

Quality Metrics:

  • BERT F1 scores (semantic similarity)
  • Context relevance scores
  • Quality retention rates
  • Answer accuracy

Performance Metrics:

  • Retrieval speed (ms)
  • Generation time (ms)
  • Memory usage
  • Computational overhead

Domain-Specific Metrics:

  • Domain term coverage
  • Uncertainty handling
  • Out-of-domain detection

3. Winner Selection

The pipeline automatically:

  1. Compares Performance: Evaluates both approaches on the same data
  2. Determines Winner: Selects best approach based on quality/speed trade-offs
  3. Generates Training Data: Uses winning approach's results for dataset generation
  4. Provides Recommendations: Suggests deployment strategy

Comparison Analysis Output

The comparison generates a comprehensive report including:

Performance Summary

{
  "summary": {
    "winner": "adaptive|standard|tie",
    "key_finding": "Adaptive RAG shows significant improvements in...",
    "recommendation_summary": "Recommend Adaptive RAG for quality-focused applications"
  }
}

Detailed Metrics Comparison

{
  "metrics_comparison": {
    "differences": {
      "avg_bert_score": {
        "standard": 0.742,
        "adaptive": 0.798, 
        "improvement_percent": +7.5,
        "better_approach": "adaptive"
      }
    }
  }
}

Deployment Recommendations

{
  "recommendations": {
    "use_adaptive_when": [
      "Quality is more important than speed",
      "Handling complex domain-specific questions"
    ],
    "use_standard_when": [
      "Speed is critical and quality is acceptable", 
      "Processing high volumes of simple queries"
    ],
    "hybrid_approach": "Use query complexity analysis to route..."
  }
}

Implementation Details

Vector Store Builder (qa_faiss_builder.py)

# Build both standard and adaptive indices
python qa_faiss_builder.py \
  --qa-pairs-file selected_qa_pairs.json \
  --output-dir rag_store \
  --embedding-model all-MiniLM-L6-v2
  # Automatically builds all 4 indices

RAG Evaluation (Parallel)

# Standard RAG evaluation
python qa_autorag_evaluator.py \
  --qa-faiss-index rag_store/qa_faiss_index_standard_gpu.bin \
  --output-dir autorag_results/standard_rag

# Adaptive RAG evaluation  
python qa_autorag_evaluator.py \
  --qa-faiss-index rag_store/qa_faiss_index_adaptive_gpu.bin \
  --output-dir autorag_results/adaptive_rag

Performance Comparison

# Compare both approaches
python rag_comparison_analyzer.py \
  --standard-results autorag_results/standard_rag \
  --adaptive-results autorag_results/adaptive_rag \
  --output-file rag_comparison_report.json

Benefits of Dual RAG Architecture

πŸ”¬ Scientific Rigor

  • A/B Testing: Direct comparison on identical data
  • Objective Metrics: Quantitative performance evaluation
  • Evidence-Based: Data-driven approach selection

⚑ Optimization

  • Use Case Matching: Right approach for right scenario
  • Performance Tuning: Optimize for speed vs quality trade-offs
  • Resource Allocation: Efficient compute resource usage

πŸš€ Production Readiness

  • Deployment Flexibility: Choose approach per use case
  • Scalability: Scale standard for volume, adaptive for quality
  • Monitoring: Compare approaches in production

πŸ“Š Analytics & Insights

  • Performance Tracking: Monitor both approaches over time
  • Quality Degradation: Detect when to switch approaches
  • Cost Analysis: Compute cost vs quality benefits

Real-World Usage Patterns

High-Volume Customer Support (Standard RAG)

# Use standard RAG for speed
if query_volume > 1000_per_hour and complexity_score < 0.3:
    use_standard_rag()

Technical Documentation (Adaptive RAG)

# Use adaptive RAG for complex technical queries
if domain_specificity > 0.7 and accuracy_requirement > 0.9:
    use_adaptive_rag()

Hybrid Deployment

# Route based on query analysis
if query_complexity < 0.4:
    return standard_rag_response(query)
else:
    return adaptive_rag_response(query)

Future Enhancements

Dynamic Routing

  • Query Complexity Analysis: Automatic approach selection
  • Performance Monitoring: Real-time switching based on metrics
  • Machine Learning: Learn optimal routing patterns

Multi-Model Comparison

  • Different Embeddings: Compare embedding model performance
  • Hybrid Indices: Combine best of both approaches
  • Ensemble Methods: Use both approaches for consensus

Cost Optimization

  • Resource-Aware Routing: Choose based on available resources
  • Quality Budgets: Dynamically adjust quality vs cost trade-offs
  • Caching Strategies: Optimize for repeated queries

Conclusion

The Dual RAG Architecture provides:

  1. Scientific Evaluation of different RAG approaches
  2. Optimal Performance for different use cases
  3. Production Flexibility with evidence-based recommendations
  4. Continuous Improvement through comparative analysis

This architecture ensures that the AutoRAG pipeline delivers both the speed of Standard RAG and the quality of Adaptive RAG, automatically determining the best approach for each specific application context.