0d3cb498a3
CI / Shell Format Check (push) Has been cancelled
CI / Check Ruby (3.4) (push) Has been cancelled
CI / CI Config (push) Has been cancelled
CI / Test on Node ${{ matrix.node }} and ${{ matrix.os }}${{ matrix.shard && format(' (shard {0}/3)', matrix.shard) || '' }} (push) Has been cancelled
CI / Build on Node ${{ matrix.node }} (push) Has been cancelled
CI / Style Check (push) Has been cancelled
CI / Generate Assets (push) Has been cancelled
CI / Check Python (3.14) (push) Has been cancelled
CI / Check Python (3.9) (push) Has been cancelled
CI / Build Docs (push) Has been cancelled
CI / Code Scan Action (push) Has been cancelled
CI / Site tests (push) Has been cancelled
CI / webui tests (push) Has been cancelled
CI / Run Integration Tests (push) Has been cancelled
CI / Run Smoke Tests (push) Has been cancelled
CI / Go Tests (push) Has been cancelled
CI / Share Test (push) Has been cancelled
CI / Redteam (Production API) (push) Has been cancelled
CI / Redteam (Staging API) (push) Has been cancelled
CI / GitHub Actions Lint (push) Has been cancelled
CI / Check Ruby (3.0) (push) Has been cancelled
release-please / release-please (push) Has been cancelled
release-please / build (push) Has been cancelled
release-please / publish-npm (push) Has been cancelled
release-please / publish-npm-backfill (push) Has been cancelled
release-please / docker (push) Has been cancelled
release-please / publish-code-scan-action (push) Has been cancelled
release-please / attest-code-scan-action (push) Has been cancelled
Deploy local.promptfoo.app / Deploy to Cloudflare Pages (push) Has been cancelled
Test and Publish Multi-arch Docker Image / test (push) Has been cancelled
Test and Publish Multi-arch Docker Image / build-docker-and-push-digests (map[digest-suffix:linux-amd64 platform:linux/amd64 runner:ubuntu-latest]) (push) Has been cancelled
Test and Publish Multi-arch Docker Image / build-docker-and-push-digests (map[digest-suffix:linux-arm64 platform:linux/arm64 runner:ubuntu-24.04-arm]) (push) Has been cancelled
Test and Publish Multi-arch Docker Image / merge-docker-digests (push) Has been cancelled
Test and Publish Multi-arch Docker Image / Attest Multi-arch Image (push) Has been cancelled
Validate Renovate Config / Validate Renovate Configuration (push) Has been cancelled
3.6 KiB
3.6 KiB
sidebar_position, description
| sidebar_position | description |
|---|---|
| 50 | Assess RAG retrieval quality by evaluating context relevance, precision, and usefulness for answering queries. |
Context relevance
Measures what fraction of retrieved context is minimally needed to answer the query.
Use when: You want to check if your retrieval is returning too much irrelevant content.
How it works: Extracts only the sentences absolutely required to answer the query. Score = required sentences / total sentences.
:::warning This metric finds the MINIMUM needed, not all relevant content. A low score might mean good retrieval (found answer plus supporting context) or bad retrieval (lots of irrelevant content). :::
Example:
Query: "What is the capital of France?"
Context: "Paris is the capital. France has great wine. The Eiffel Tower is in Paris."
Score: 0.33 (only first sentence required)
Configuration
assert:
- type: context-relevance
threshold: 0.3 # At least 30% should be essential
Required fields
query- User's question (in test vars)context- Retrieved text (in vars or viacontextTransform)threshold- Minimum score 0-1 (default: 0)
Full example
tests:
- vars:
query: 'What is the capital of France?'
context: 'Paris is the capital of France.'
assert:
- type: context-relevance
threshold: 0.8 # Most content should be essential
Array context
Context can be provided as an array of chunks:
tests:
- vars:
query: 'What are the benefits of RAG systems?'
context:
- 'RAG systems improve factual accuracy by incorporating external knowledge sources.'
- 'They reduce hallucinations in large language models through grounded responses.'
- 'RAG enables up-to-date information retrieval beyond training data cutoffs.'
- 'The weather forecast shows rain this weekend.' # irrelevant chunk
assert:
- type: context-relevance
threshold: 0.5 # Score: 3/4 = 0.75
Dynamic context extraction
For RAG systems that return context with their response:
# Provider returns { answer: "...", context: "..." }
assert:
- type: context-relevance
contextTransform: 'output.context' # Extract context field
threshold: 0.3
contextTransform can also return an array:
assert:
- type: context-relevance
contextTransform: 'output.chunks' # Extract chunks array
threshold: 0.5
Score interpretation
- 0.8-1.0: Almost all content is essential (very focused or minimal retrieval)
- 0.3-0.7: Mixed essential and supporting content (often ideal)
- 0.0-0.3: Mostly non-essential content (may indicate poor retrieval)
Limitations
- Only identifies minimum sufficient content
- A single-paragraph (prose) context string is split into sentences on
./!/?boundaries; a context with two or more non-empty lines, or an array of chunks, is treated as already segmented and split by line/chunk. Sentence splitting is a lightweight heuristic that does not handle every abbreviation or decimal edge case — provide an array of chunks for the most precise denominator. - Score interpretation varies by use case
Related metrics
context-faithfulness- Does output stay faithful to context?context-recall- Does context support expected answer?