Neural Mastery
← Practice
Corrective RAG: Grade Retrieved Document Relevancemedium

Corrective RAG: Grade Retrieved Document Relevance

medium RAG & Retrieval 15 min

NumPy allowed · plain Python earns 10 bonus points

RAG step 1/4

A query retrieves context

Embedding similarity ranks the documents before generation.
Open lesson →
01query
02embed
03retrieve
04context
What is RAG?→ embed →top context
retrieval.md44%
rag-systems.md33%
agents.md24%

Cosine-like similarity scores ranked before context assembly

Implement Corrective RAG's real three-way relevance grading, deciding whether to proceed with retrieved documents, fall back to a web search, or blend both.

Task

Implement grade_relevance_action(relevance_scores, relevant_threshold, irrelevant_threshold). Take best = max(relevance_scores). If best >= relevant_threshold, return 'use_retrieved'. If best < irrelevant_threshold, return 'web_search'. Otherwise return 'blend'.

Function Signature

grade_relevance_action(relevance_scores: list[float], relevant_threshold: float, irrelevant_threshold: float) -> str

Examples

Example 1: high relevance uses retrieved
Input: relevance_scores = [0.9, 0.5] relevant_threshold = 0.7 irrelevant_threshold = 0.3
Output: 'use_retrieved'
Example 2: low relevance falls back to web search
Input: relevance_scores = [0.1, 0.2] relevant_threshold = 0.7 irrelevant_threshold = 0.3
Output: 'web_search'
Example 3: ambiguous relevance blends
Input: relevance_scores = [0.5] relevant_threshold = 0.7 irrelevant_threshold = 0.3
Output: 'blend'

Constraints

  • relevant_threshold > irrelevant_threshold
  • relevance_scores non-empty
Python3Saved ✓
def grade_relevance_action(relevance_scores, relevant_threshold, irrelevant_threshold):
# Your implementation here
pass

Case 1: high relevance uses retrieved
Input: relevance_scores = [0.9, 0.5] relevant_threshold = 0.7 irrelevant_threshold = 0.3
Expected: 'use_retrieved'
Case 2: low relevance falls back to web search
Input: relevance_scores = [0.1, 0.2] relevant_threshold = 0.7 irrelevant_threshold = 0.3
Expected: 'web_search'
Case 3: ambiguous relevance blends
Input: relevance_scores = [0.5] relevant_threshold = 0.7 irrelevant_threshold = 0.3
Expected: 'blend'