This prompt is designed for RAG pipeline engineers and search architects who need to score retrieved passages by combining their semantic relevance to a query with their temporal freshness. Use it when a standard vector similarity score is insufficient because the information value of a passage decays over time. This is critical in domains like financial intelligence, news summarization, and competitive analysis where outdated evidence produces factually wrong answers. The prompt instructs an LLM to act as a calibrated scoring function, outputting a single score between 0 and 1 for each passage along with a structured justification.
Prompt
Temporal Relevance Scoring Prompt Template

When to Use This Prompt
Learn when to deploy temporal relevance scoring in your RAG pipeline and when a simpler approach will suffice.
You should reach for this prompt when your retrieval system returns passages with associated publication dates and your application's answer quality depends on recency. For example, a financial analyst querying 'What is the current consensus on interest rate cuts?' needs evidence from the last few weeks, not a relevant but outdated article from six months ago. The prompt works best when you have already performed an initial retrieval pass and need a secondary scoring layer that penalizes staleness. It expects each passage to include a text field and a publication_date field in ISO 8601 format. The output is a structured JSON object containing a temporal_relevance_score between 0.0 and 1.0, a justification string explaining the score, and a breakdown of the semantic relevance and temporal freshness components.
Do not use this prompt for real-time streaming data validation or for ranking passages that lack publication dates. It is not a substitute for a time-series database query or a streaming freshness monitor. If your passages have no timestamps, use a standard relevance scoring prompt instead. This prompt also assumes you have already defined a domain-specific decay function or half-life parameter; if you haven't, you'll need to calibrate that separately using a held-out dataset of known-answer queries. For high-stakes domains like healthcare or legal, always include a human review step after scoring to verify that the temporal weighting hasn't excluded critical evidence that ages differently than the model assumes.
Use Case Fit
Where the Temporal Relevance Scoring Prompt works, where it fails, and what you must provide before wiring it into a RAG pipeline.
Good Fit: Time-Sensitive RAG Pipelines
Use when: your retrieval corpus mixes breaking news, financial filings, or maintenance logs with evergreen reference material. The prompt separates temporally relevant passages from stale background context. Guardrail: always pair this prompt with a publication-date extraction step so the model has explicit timestamps to reason over.
Bad Fit: Fully Evergreen Knowledge Bases
Avoid when: every document in your corpus is equally timeless (e.g., mathematical proofs, historical facts, or static policy manuals). The temporal scoring adds latency and token cost without improving retrieval quality. Guardrail: run a corpus freshness audit first; if 95%+ of documents have no meaningful expiration, skip temporal scoring.
Required Input: Publication Dates with Confidence
Risk: the prompt produces arbitrary scores when documents lack extracted publication or last-updated timestamps. Guardrail: run a Publication Date Extraction Prompt upstream and pass normalized ISO 8601 dates with confidence scores. Reject passages where date confidence falls below 0.7 before temporal scoring.
Required Input: Domain-Specific Decay Function
Risk: a single time-decay curve (e.g., exponential with 30-day half-life) mis-scores earnings reports, security advisories, and product docs differently. Guardrail: configure decay parameters per document category or query type. Financial data may decay in hours; API documentation may decay in months. Pass the decay function as a [DECAY_CONFIG] variable.
Operational Risk: Score Drift Over Time
Risk: temporal relevance scores silently degrade as the gap between document publication and query time widens. A passage scored 0.9 today may be 0.3 next week with no code change. Guardrail: log per-passage scores with timestamps and monitor score distributions over time. Set alerts when the median score drops below a calibrated threshold for time-sensitive query categories.
Operational Risk: Query Temporal Sensitivity Mismatch
Risk: applying temporal scoring to a time-agnostic query (e.g., 'explain how TLS handshakes work') penalizes authoritative older sources. Guardrail: run a Time-Sensitive Query Classification Prompt upstream. Only apply temporal scoring when the query is classified as real-time, recent, or historical. Route time-agnostic queries directly to standard relevance scoring.
Copy-Ready Prompt Template
Paste this template into your prompt layer to produce calibrated temporal relevance scores for each retrieved passage.
This template is designed to be dropped directly into your RAG pipeline's scoring or reranking stage. It instructs the model to evaluate each passage against both semantic relevance and temporal freshness, producing a single calibrated score between 0 and 1. The prompt enforces structured output, requires explicit reasoning for each score, and includes a time-decay justification so that scoring decisions are auditable. Replace every square-bracket placeholder with your actual data before sending the request.
textYou are a temporal relevance scoring engine. Your task is to evaluate a set of retrieved passages against a user query, producing a calibrated relevance score (0.0 to 1.0) that combines semantic relevance with temporal freshness. ## INPUT Query: [QUERY] Query Date: [QUERY_DATE] Domain: [DOMAIN] Temporal Sensitivity: [TEMPORAL_SENSITIVITY] Options: real-time | recent | historical | time-agnostic Passages to score: [PASSAGES] Format: One passage per line, starting with "PASSAGE_ID: <id> | DATE: <publication_date> | TEXT: <text>" ## SCORING RULES 1. Semantic Relevance (0.0-1.0): How well does the passage content answer or inform the query? 2. Temporal Freshness (0.0-1.0): How current is the passage relative to the query date and temporal sensitivity? - real-time: Decay sharply after [REAL_TIME_WINDOW_HOURS] hours. Score 0.0 if older. - recent: Apply exponential decay with half-life of [RECENT_HALF_LIFE_DAYS] days. - historical: Minimal decay. Prefer primary sources from the correct period. - time-agnostic: Ignore publication date. Score 1.0 for freshness. 3. Combined Score = (semantic_relevance * [SEMANTIC_WEIGHT]) + (temporal_freshness * [FRESHNESS_WEIGHT]) Default weights: semantic=0.6, freshness=0.4 unless overridden. 4. If a passage contains no usable date, set temporal_freshness to 0.0 and flag it. 5. If the combined score is below [MIN_SCORE_THRESHOLD], mark the passage as EXCLUDED. ## OUTPUT SCHEMA Return a JSON object with this exact structure: { "query_id": "[QUERY_ID]", "scored_passages": [ { "passage_id": "string", "semantic_relevance": 0.0, "temporal_freshness": 0.0, "combined_score": 0.0, "excluded": false, "reasoning": "Brief explanation of both scores.", "decay_function_applied": "none | real-time-cutoff | exponential | historical-preference", "date_used": "ISO8601 or null", "flags": ["no_date"] } ], "scoring_summary": { "total_passages": 0, "excluded_count": 0, "top_passage_id": "string", "score_distribution": { "high": 0, "medium": 0, "low": 0 } } } ## CONSTRAINTS - Do not invent dates. If a passage has no date, set temporal_freshness to 0.0 and add the "no_date" flag. - Do not exceed 1.0 or go below 0.0 for any score. - Return ONLY the JSON object. No markdown fences, no commentary. - Score every passage in the input list. Do not skip any.
After pasting this template, replace the placeholders with your runtime values. The [PASSAGES] placeholder should be populated with your retrieval results, one per line in the specified format. The temporal sensitivity classification and decay parameters should come from an upstream query classifier or be set as constants for your domain. Wire the output JSON into your reranking logic, filtering out passages marked as EXCLUDED before they reach answer generation. For high-stakes domains like financial intelligence or clinical decision support, route excluded passages and low-confidence scores to a human review queue before final answer synthesis.
Prompt Variables
Required inputs for the Temporal Relevance Scoring Prompt. Each placeholder must be populated before the prompt is sent to the model. Validation notes describe how to check input quality before execution.
| Placeholder | Purpose | Example | Validation Notes |
|---|---|---|---|
[QUERY] | The user question or search query being evaluated for temporal sensitivity | What were Tesla's Q3 2024 earnings? | Must be non-empty string. Check for embedded date references that could override [TARGET_DATE] |
[PASSAGES] | Array of retrieved passages to score, each with text content and publication metadata | [{"id":"p1","text":"Tesla reported...","published_date":"2024-10-23"}] | Each passage object must include id, text, and published_date fields. Reject if published_date is missing or unparseable |
[TARGET_DATE] | The reference date against which passage freshness is measured, typically the current date or query time | 2025-01-15 | Must be valid ISO 8601 date string. If null, system should default to current UTC date with explicit logging |
[DOMAIN] | The knowledge domain for selecting appropriate freshness decay parameters | financial_earnings | Must match one of the configured domain keys: financial_earnings, news_breaking, legal_regulatory, scientific_research, technology_product, general_knowledge. Reject unknown domains |
[DECAY_FUNCTION] | The time-decay function to apply when computing freshness scores | exponential | Must be one of: exponential, linear, step_function, none. Validate against allowed enum before prompt assembly |
[HALF_LIFE_DAYS] | Number of days after which a passage's freshness contribution is halved under exponential decay | 90 | Must be positive integer. Required when [DECAY_FUNCTION] is exponential. Range check: 1-3650. Warn if >365 for news domains |
[OUTPUT_SCHEMA] | Expected JSON structure for the scored passage output | {"passage_id":"string","relevance_score":0.0-1.0,"freshness_score":0.0-1.0,"combined_score":0.0-1.0,"temporal_justification":"string"} | Validate schema completeness before prompt execution. Reject if required fields missing: passage_id, relevance_score, freshness_score, combined_score, temporal_justification |
Implementation Harness Notes
How to wire the Temporal Relevance Scoring Prompt into a production RAG pipeline with validation, retries, and calibration checks.
The Temporal Relevance Scoring Prompt is not a standalone utility—it is a scoring module that sits between retrieval and answer generation in a RAG pipeline. After your retriever returns candidate passages, each passage is sent through this prompt to produce a calibrated 0–1 score that combines semantic relevance with temporal freshness. The output is a structured JSON object per passage, which your application must validate, aggregate, and use to rerank or filter passages before they reach the answer-generation step. The harness described here assumes you are running this prompt at scale, potentially scoring dozens of passages per query, and need reliable, auditable scores rather than one-off manual evaluations.
Integration pattern. Wrap the prompt in a scoring function that accepts a query string, a passage object (with text, publication_date, and optional source_authority), and a temporal_sensitivity classification from an upstream query classifier. The function should construct the prompt by injecting these values into the [QUERY], [PASSAGE_TEXT], [PUBLICATION_DATE], [QUERY_TIMESTAMP], and [TEMPORAL_SENSITIVITY] placeholders. For production, batch passage scoring into concurrent API calls with a configurable concurrency limit (start with 5–10 parallel requests) and a timeout of 5 seconds per call. On timeout or HTTP 5xx, retry once with exponential backoff (1s initial delay). On a second failure, log the passage ID and assign a default score of 0.0 with a scoring_error flag so downstream reranking can degrade gracefully rather than blocking the entire pipeline.
Output validation. The prompt returns a JSON object with fields: relevance_score (float, 0–1), freshness_score (float, 0–1), combined_score (float, 0–1), time_decay_factor (float, 0–1), rationale (string), and stale_flag (boolean). Before trusting these scores, validate every response: check that all numeric fields are present, within [0,1], and that combined_score is not greater than max(relevance_score, freshness_score) plus a small epsilon (0.05) to catch calculation errors. If validation fails, discard the score and log the raw response for debugging. For high-stakes domains like financial intelligence or clinical evidence, route any passage where stale_flag is true and combined_score exceeds 0.5 to a human review queue—this catches cases where the model may have scored stale content too highly due to strong semantic match.
Calibration and evals. Before deploying, run this prompt against a golden dataset of 100–500 query-passage pairs with human-annotated relevance and freshness scores. Measure Mean Absolute Error (MAE) between model combined_score and human scores; target MAE < 0.15. Also measure calibration: bucket predictions into deciles and check that the proportion of truly relevant passages in each bucket matches the predicted score. If the model is overconfident (high scores for irrelevant passages), adjust the prompt's scoring rubric or add few-shot examples of borderline cases. Run this calibration check weekly if your document corpus or query distribution changes. Log every scored passage with its query, passage ID, scores, and the model version to enable drift detection over time.
Model choice and latency. This prompt works well with fast instruction-following models (GPT-4o-mini, Claude 3.5 Haiku, or equivalent open-weight models like Llama 3.1 8B). Avoid using largest models for per-passage scoring unless latency and cost are not constraints—scoring 20 passages with a large model can add 10–20 seconds to your pipeline. If scoring latency exceeds your p95 target, consider batching multiple passages into a single prompt with an array output schema, but validate that batch scoring does not degrade score calibration compared to single-passage scoring. For air-gapped or local deployments, quantized 7B–13B models can perform this task reliably if you include 3–5 few-shot examples in the prompt to anchor the scoring scale.
What to avoid. Do not use this prompt as the sole gatekeeper for answer generation without a downstream grounding verification step—a high combined score does not guarantee the passage actually supports the final answer. Do not skip output validation; malformed JSON or out-of-range scores will silently corrupt your reranking logic. Do not hardcode the time-decay function in application code and expect the prompt to match it; instead, describe the decay behavior in the prompt's [TEMPORAL_SENSITIVITY] context and let the model apply it, then validate the resulting time_decay_factor against your expected decay curve during eval. Finally, do not treat this prompt as static—recalibrate when your retrieval system, document corpus freshness profile, or user query patterns change meaningfully.
Expected Output Contract
The required JSON structure, field types, and validation rules for the temporal relevance scoring prompt output. Use this contract to validate model responses before they enter downstream ranking or filtering logic.
| Field or Element | Type or Format | Required | Validation Rule |
|---|---|---|---|
passage_id | string | Must match an input passage_id exactly; no fabricated identifiers allowed | |
semantic_relevance_score | number (float 0-1) | Must be a float between 0.0 and 1.0 inclusive; parse check with numeric bounds validation | |
temporal_freshness_score | number (float 0-1) | Must be a float between 0.0 and 1.0 inclusive; parse check with numeric bounds validation | |
combined_score | number (float 0-1) | Must equal weighted combination of semantic and temporal scores per [DECAY_FUNCTION] parameters; recompute and compare within 0.01 tolerance | |
publication_date | ISO 8601 date string or null | Must be valid ISO 8601 date (YYYY-MM-DD) or null if extraction failed; schema check with date parsing | |
date_extraction_confidence | number (float 0-1) | Must be between 0.0 and 1.0; if publication_date is null, this field must be 0.0 or below [CONFIDENCE_THRESHOLD] | |
temporal_relevance_justification | string | Must be non-empty; must reference the passage publication date and the query's temporal requirements from [TEMPORAL_WINDOW]; citation check against input fields | |
stale_flag | boolean | Must be true if temporal_freshness_score is below [STALENESS_THRESHOLD], false otherwise; consistency check against threshold parameter |
Common Failure Modes
Temporal relevance scoring combines semantic fit with time decay. These are the most common production failures and how to prevent them before they corrupt downstream answers.
Score Collapse at Zero
What to watch: When a time-decay function is too aggressive, all passages older than a threshold receive a score of zero, effectively removing them from the candidate set even when they contain the only available evidence. Guardrail: Use a floor value (e.g., 0.1) for the temporal multiplier and log a warning when more than 80% of passages hit the floor in a single request.
Missing or Malformed Publication Dates
What to watch: Retrieved passages often lack clean published_date metadata. The scoring prompt may hallucinate a date, default to 1970-01-01, or skip the passage entirely. Guardrail: Pre-process retrieval results to extract and normalize dates before scoring. If extraction confidence is below 0.7, flag the passage and apply a neutral temporal weight rather than guessing.
Decay Function Mismatch with Domain
What to watch: A single exponential decay function applied across all query types will mis-score evidence. Financial data decays in hours; legal precedents decay in years. Guardrail: Route queries through a temporal sensitivity classifier first, then select a domain-specific decay function and half-life parameter. Validate with a labeled dataset of known-fresh and known-stale pairs per domain.
Semantic Relevance Overrides Temporal Signals
What to watch: A highly relevant but outdated passage can outscore a moderately relevant current passage when the semantic score dominates the combined formula. Users receive factually wrong answers from old data. Guardrail: Apply a hard cutoff for time-critical query types—passages outside the required window are excluded before scoring, not just downweighted. Log every exclusion with the reason.
Uncalibrated Score Thresholds
What to watch: A combined relevance-freshness score of 0.6 may mean different things across models, domains, and query types. Hard thresholds break silently when the score distribution shifts. Guardrail: Calibrate thresholds against a golden dataset with known-correct answers. Monitor score distribution drift in production and alert when the median score shifts by more than 0.15 in a 24-hour window.
Temporal Context Window Leakage
What to watch: The scoring prompt may use the model's training cutoff date or the current system time incorrectly, applying the wrong reference point for recency calculations. Guardrail: Explicitly pass the reference timestamp as a prompt variable ([REFERENCE_TIMESTAMP]) and never rely on the model's internal date awareness. Validate that the prompt output references the correct timestamp in spot checks.
Evaluation Rubric
Use this rubric to test the Temporal Relevance Scoring Prompt before production deployment. Each criterion validates a specific failure mode observed in RAG pipelines that combine semantic and temporal scoring. Run these checks against a golden dataset of 50-100 query-passage pairs with known relevance and freshness labels.
| Criterion | Pass Standard | Failure Signal | Test Method |
|---|---|---|---|
Score Range Calibration | All output scores fall within [0.0, 1.0] inclusive with no null, NaN, or out-of-bounds values | Score is negative, exceeds 1.0, returns null, or produces non-numeric string | Parse 1000 outputs; assert min >= 0.0 and max <= 1.0; count invalid values as failures |
Temporal Decay Behavior | Score decreases monotonically as passage age increases for time-sensitive queries; older passages receive lower scores than identical-content newer passages | Newer passage scores lower than older passage with same semantic relevance; score increases with age | Construct 10 query pairs with identical semantics but different publication dates; assert score(newer) > score(older) for each pair |
Semantic Relevance Preservation | Score correlates with semantic relevance (r >= 0.7) when temporal freshness is held constant across passages | Score is dominated entirely by recency with no semantic signal; correlation with relevance labels below 0.5 | Use 50 same-date passages with varying relevance labels; compute Pearson correlation between scores and relevance ground truth |
Combined Score Ordering | Combined score correctly ranks passages where one is semantically stronger but older versus semantically weaker but newer, matching human preference labels in >= 80% of cases | Ranking disagrees with human annotators in more than 20% of trade-off cases; pure recency or pure relevance dominates | Create 30 trade-off pairs with human preference annotations; measure pairwise ranking accuracy |
Edge Case: Missing Date | Passage with missing or unparseable publication date receives a default temporal score (e.g., 0.5) rather than 0.0 or 1.0, and output includes a warning flag | Missing-date passage scores 0.0 (treated as irrelevant) or 1.0 (treated as perfectly fresh); no warning emitted | Feed 20 passages with [MISSING_DATE] placeholder; assert score == 0.5 ± 0.05 and warning field is true |
Edge Case: Future Date | Passage with publication date in the future is flagged and scored at 1.0 for freshness but with a future-date warning in output metadata | Future-dated passage scores 0.0 or causes parsing error; no warning generated | Feed 10 passages dated 1-30 days in the future; assert score >= 0.95, warning field is true, and no exceptions thrown |
Time-Agnostic Query Handling | For queries classified as time-agnostic, temporal weight approaches 0 and score is dominated by semantic relevance (r >= 0.85 with relevance-only baseline) | Time-agnostic query still shows strong temporal decay effect; correlation with relevance-only baseline below 0.7 | Use 30 time-agnostic queries with known relevance labels; compare output scores to relevance-only scores; assert correlation >= 0.85 |
Score Stability Across Runs | Identical input produces identical score within ±0.01 across 5 repeated runs with temperature=0 | Score varies by more than 0.05 across runs; non-deterministic behavior undermines ranking consistency | Select 20 diverse query-passage pairs; run each 5 times at temperature=0; compute max deviation per pair; assert all deviations <= 0.01 |
Enabling Efficiency, Speed & Accuracy
Intelligent Analysis, Decision & Execution
We build AI systems for teams that need search across company data, workflow automation across tools, or AI features inside products and internal software.
Talk to Us
Search across company data
Give teams answers from docs, tickets, runbooks, and product data with sources and permissions.
Useful when people spend too long searching or get different answers from different systems.

Automate internal workflows
Use AI to route work, draft outputs, trigger actions, and keep approvals and logs in place.
Useful when repetitive work moves across multiple tools and teams.

Add AI to products and internal tools
Build assistants, guided actions, or decision support into the software your team or customers already use.
Useful when AI needs to be part of the product, not a separate tool.
Adapt This Prompt
How to adapt
Start with the base prompt and a small hand-labeled dataset of 20–30 passage-query pairs. Use a frontier model (GPT-4o or Claude 3.5 Sonnet) with temperature 0. Remove the strict OUTPUT_SCHEMA enforcement and accept natural-language scores with explanations. Focus on whether the model's reasoning about temporal decay matches your intuition before locking down the format.
codeScore each passage from 0 to 1 based on how well it answers [QUERY] given that the query requires information from [TIME_WINDOW]. Explain your reasoning, then give the score.
Watch for
- Scores that ignore the time window entirely and only reflect semantic similarity
- Overconfident 1.0 scores on passages that are close but not exact matches
- Model treating publication date as the only signal, ignoring content staleness indicators within the text

About the author
Prasad Kumkar
CEO & MD, Inference Systems
Prasad Kumkar is the CEO & MD of Inference Systems and writes about AI systems architecture, LLM infrastructure, model serving, evaluation, and production deployment. Over 5+ years, he has worked across computer vision models, L5 autonomous vehicle systems, and LLM research, with a focus on taking complex AI ideas into real-world engineering systems.
His work and writing cover AI systems, large language models, AI agents, multimodal systems, autonomous systems, inference optimization, RAG, evaluation, and production AI engineering.
Partnered with leading AI, data, and software stack.
How We Work
Custom AI workflows for your Business
One-fit-all AI don't work for modern businesses. At Inferensys, we aim to understand your business & custom requirements; which we use to define most efficient agentic workflows, the data, and the tools for your business.
01
Review the use case
We understand the task, the users, and where AI can actually help.
Read more02
Pick the right approach
We define what needs search, automation, or product integration.
Read more03
Build the first useful version
We implement the part that proves the value first.
Read more04
Improve from there
We add the checks and visibility needed to keep it useful.
Read moreThe first call is a practical review of your use case and the right next step.
Talk to Us