An advanced RAG (Retrieval Augmented Generation) agent that automatically selects the best retrieval strategy based on query characteristics. This agent analyzes incoming queries and chooses from multiple RAG strategies to provide optimal responses.
- Simple Retrieval: Basic semantic search for straightforward factual queries
- Multi-step Retrieval: Multiple rounds of retrieval for complex, multi-faceted queries
- Hybrid Search: Combines semantic similarity with keyword matching
- Query Decomposition: Breaks complex questions into simpler sub-questions
- Contextual Refinement: Iteratively refines search based on initial results
- Multi-document Synthesis: Combines information from multiple relevant sources
- Query Analysis: Automatically classifies queries by complexity, type, and domain
- Dynamic Strategy Selection: Chooses optimal RAG strategy based on query characteristics
- Confidence Scoring: Evaluates retrieval quality and adjusts approach accordingly
- Fallback Mechanisms: Switches strategies if initial approach fails to satisfy quality thresholds
- Context-Aware Processing: Maintains conversation history and adapts responses
- Quality Assessment: Evaluates response completeness and relevance
- Adaptive Learning: Improves strategy selection based on success patterns
- Performance Monitoring: Tracks response quality and retrieval effectiveness
The system uses PocketFlow's workflow orchestration to create a sophisticated agent pipeline:
Query Input → Query Analyzer → Strategy Selector → RAG Strategy Executor → Quality Assessor → Response Output
↓ ↓ ↓ ↓
Query Features → Strategy Choice → Retrieved Context → Quality Score
-
Install dependencies:
pip install -r requirements.txt
-
Set your OpenAI API key:
export OPENAI_API_KEY="your-api-key-here"
-
Run with sample data:
python main.py
-
Try different query types:
python main.py --"What is machine learning?" python main.py --"Compare the economic impact of renewable energy vs fossil fuels on developing countries, considering both short-term costs and long-term sustainability benefits" python main.py --"How do neural networks work and what are the key differences between CNN, RNN, and transformer architectures?"
| Query Type | Example | Selected Strategy |
|---|---|---|
| Simple Factual | "What is Python?" | Simple Retrieval |
| Complex Analysis | "Compare AI ethics frameworks" | Multi-step Retrieval |
| Multi-part Question | "How do transformers work and why are they better than RNNs?" | Query Decomposition |
| Domain-specific | "Explain BERT architecture" | Hybrid Search |
| Contextual Follow-up | "How does that relate to GPT?" | Contextual Refinement |
The agent supports extensive configuration through config.py:
- Strategy selection thresholds
- Retrieval parameters (k, similarity thresholds)
- Quality assessment criteria
- Fallback behavior settings
- Performance monitoring options
🔍 Analyzing query: "How do transformers compare to RNNs in terms of parallel processing and long-range dependencies?"
📊 Query Analysis:
- Type: Comparative Technical
- Complexity: High
- Entities: ['transformers', 'RNNs', 'parallel processing', 'long-range dependencies']
- Confidence: 0.92
🎯 Strategy Selection: Multi-step Retrieval
- Primary: Technical comparison analysis
- Secondary: Performance characteristics
- Fallback: Query decomposition
🔎 Executing Multi-step Retrieval:
Step 1: Retrieving transformer architecture docs...
Step 2: Retrieving RNN architecture docs...
Step 3: Retrieving parallel processing comparisons...
Step 4: Retrieving long-range dependency analysis...
✅ Quality Assessment: Score 0.89/1.0
- Completeness: High
- Relevance: High
- Technical accuracy: High
🤖 Response:
Transformers offer significant advantages over RNNs in both parallel processing and handling long-range dependencies...