This prompt is designed for evaluation infrastructure teams who operate multiple LLM judges against the same set of outputs and need to combine their scores into a single, normalized distribution. The core job-to-be-done is post-hoc score aggregation when your judges operate on heterogeneous numeric scales (e.g., one judge uses 1–5, another uses 1–10) or exhibit different severity tendencies (one judge is consistently harsher than another). Use this prompt when you already have a raw score matrix—rows are evaluated items, columns are judges—and per-judge metadata describing their scale, observed mean, and variance. The ideal user is an MLOps engineer or evaluation lead who needs to produce apples-to-apples comparisons before feeding scores into downstream ranking, thresholding, or reporting systems.
Prompt
Score Normalization Prompt Across Multiple LLM Judges

When to Use This Prompt
Determines the right conditions for deploying the multi-judge score normalization prompt in evaluation pipelines.
The prompt assumes you have completed your evaluation runs and collected raw scores. It requires three inputs: a [RAW_SCORE_MATRIX] mapping items to judge scores, a [JUDGE_METADATA] block specifying each judge's scale range and calibration statistics, and an [OUTPUT_SCHEMA] defining the desired normalized range (typically 0–1 or 1–5). The prompt produces normalized scores with per-judge mapping functions, a rank-order preservation check, and an agreement matrix showing pairwise judge alignment after normalization. Do not use this prompt when all judges share an identical scale and calibration, or when you need real-time scoring rather than batch normalization. It is also inappropriate when you lack per-judge statistics—the normalization math requires observed distributions, not just scale declarations.
Before invoking this prompt, verify that your raw scores are complete and that each judge has scored every item. Missing scores will produce misleading normalization artifacts. If your judge fleet includes models with known failure modes on certain input types, consider running the Judge Bias Detection Prompt first to flag systematic scoring patterns that normalization alone cannot fix. After normalization, always validate that rank ordering is preserved within acceptable tolerance—a normalized score that inverts the original ranking indicates a broken mapping function and requires human review of the judge metadata or raw scores.
Use Case Fit
Where this prompt works, where it fails, and what you must provide before running it.
Good Fit: Multi-Judge Fleets
Use when: you run 3+ LLM judges with different base models or prompt variants and need a single normalized score per item. Why: the prompt handles per-judge severity mapping and produces a common scale, making downstream aggregation safe.
Bad Fit: Single-Judge Pipelines
Avoid when: you only have one judge. Normalization across a single judge is identity mapping with extra steps. Risk: the prompt adds latency and token cost without improving score quality. Use calibration against human ratings instead.
Required Input: Judge Score History
Requirement: you must provide per-judge score distributions from a shared calibration set before normalization is meaningful. Guardrail: if you lack a calibration set with at least 30 scored items per judge, the mapping functions will be unreliable. Build the calibration set first.
Operational Risk: Rank Reversal
What to watch: normalization can flip the relative ordering of items if judges disagree strongly on specific examples. Guardrail: run a rank-preservation check post-normalization and flag any item whose normalized rank differs from its raw majority-vote rank by more than 2 positions for human review.
Operational Risk: Calibration Drift
What to watch: judge severity profiles shift over time as models, prompts, or data distributions change. Guardrail: recalculate mapping functions on a rolling window and trigger an alert if any judge's severity parameter shifts beyond 0.5 standard deviations from baseline.
Variant: Weighted Judges
Use when: some judges are more trusted than others. Guardrail: extend the normalization prompt to accept per-judge trust weights and produce a weighted normalized score. Document the weighting rationale and test that removing any single judge does not flip pass/fail decisions on boundary cases.
Copy-Ready Prompt Template
A copy-ready prompt that normalizes raw scores from multiple LLM judges into a common scale with per-judge mapping functions and rank-preservation validation.
This prompt template accepts raw scores from multiple LLM judges—each potentially using different scales, severity tendencies, or internal calibration—and produces a normalized score distribution with per-judge mapping functions. The output enables apples-to-apples comparison across judges and detects when normalization would distort the underlying rank ordering. Replace every square-bracket placeholder with your actual data before sending the prompt to the model. The template is designed to work as a standalone evaluation step in a pipeline: feed it judge outputs, receive normalized scores and validation checks.
textYou are a score normalization engine for an LLM evaluation pipeline. Your job is to take raw scores from multiple judges—each potentially using different numeric scales, scoring philosophies, or severity profiles—and produce a normalized score distribution that enables fair comparison across judges. ## INPUT [JUDGE_SCORES] ## CONSTRAINTS - Preserve rank ordering within each judge's scores. If Judge A ranked item X above item Y in raw scores, the normalized scores must maintain that ordering. - Map all scores to the target scale: [TARGET_SCALE_MIN] to [TARGET_SCALE_MAX]. - If a judge's raw scores are on a categorical or ordinal scale, first convert them to numeric values using this mapping: [CATEGORICAL_MAPPING]. - Do not assume any judge is the "reference" or "ground truth" judge unless explicitly specified. - If fewer than [MIN_SAMPLES_PER_JUDGE] scores are available for a judge, flag that judge as having insufficient data and exclude them from normalization. ## OUTPUT_SCHEMA Return a JSON object with this structure: { "normalized_scores": [ { "item_id": "string", "judge_id": "string", "raw_score": number, "normalized_score": number, "normalization_method": "string" } ], "per_judge_mapping": [ { "judge_id": "string", "raw_scale_min": number, "raw_scale_max": number, "mapping_function": "string", "mapping_parameters": {}, "samples_used": number } ], "rank_preservation_checks": [ { "judge_id": "string", "rank_violations": number, "violation_details": ["string"], "rank_correlation": number } ], "warnings": ["string"], "excluded_judges": ["string"] } ## NORMALIZATION METHODS Use the most appropriate method per judge based on score distribution characteristics: - "min_max": Linear scaling to target range. Use when scores are roughly uniform. - "z_score": Standardization to target mean and standard deviation. Use when scores are approximately normal. - "quantile": Rank-based mapping. Use when score distributions are skewed or have outliers. - "categorical_map": Direct mapping from categorical labels. Use only when raw scores are categorical. ## VALIDATION RULES - After normalization, compute Spearman rank correlation between raw and normalized scores per judge. Flag any judge with correlation below [RANK_CORRELATION_THRESHOLD]. - If any judge has rank violations, include the specific item pairs where ordering flipped in violation_details. - Add a warning if the normalized score range for any judge is compressed to less than [MIN_EFFECTIVE_RANGE] percent of the target scale, indicating potential information loss. - Add a warning if any judge's mapping function is extrapolating beyond their observed raw score range. ## EXAMPLES [FEW_SHOT_EXAMPLES] Return only the JSON object. Do not include explanations outside the JSON.
Adaptation guidance: Replace [JUDGE_SCORES] with a JSON array of objects containing item_id, judge_id, and raw_score fields. Set [TARGET_SCALE_MIN] and [TARGET_SCALE_MAX] to your desired normalized range (commonly 1–5 or 0–100). If any judges use categorical labels like "Poor/Fair/Good/Excellent", provide the numeric mapping in [CATEGORICAL_MAPPING] as a JSON object. Set [MIN_SAMPLES_PER_JUDGE] to at least 10 for reliable normalization; lower values produce unstable mappings. Set [RANK_CORRELATION_THRESHOLD] to 0.99 for strict rank preservation or 0.95 if minor reordering is acceptable. Set [MIN_EFFECTIVE_RANGE] to 50 (percent) to catch judges whose normalized scores collapse into a narrow band. Include [FEW_SHOT_EXAMPLES] with 2–3 worked examples showing input scores and expected normalized output for your specific score ranges and judge count. Run this prompt after every evaluation batch, not once per judge, because normalization parameters should update as score distributions shift. Validate the output JSON against the schema before ingesting normalized scores into downstream dashboards or decision systems.
Prompt Variables
Every placeholder the Score Normalization Prompt expects, with concrete examples and validation rules to catch misconfiguration before runtime.
| Placeholder | Purpose | Example | Validation Notes |
|---|---|---|---|
[JUDGE_SCORES] | Raw score objects from each LLM judge, including judge ID, score, and optional justification | [{"judge_id": "judge-alpha", "score": 8.2, "dimension": "accuracy", "justification": "..."}, {"judge_id": "judge-beta", "score": 6.5, "dimension": "accuracy", "justification": "..."}] | Must be a JSON array. Each object requires judge_id (string), score (number), and dimension (string). Reject if any score is missing or non-numeric. Null scores not allowed. |
[JUDGE_CALIBRATION_PROFILES] | Per-judge calibration parameters including mean, standard deviation, and severity offset from prior alignment runs | [{"judge_id": "judge-alpha", "mean": 7.1, "std_dev": 1.4, "severity_offset": 0.3}, {"judge_id": "judge-beta", "mean": 5.8, "std_dev": 2.1, "severity_offset": -0.7}] | Must be a JSON array. Each object requires judge_id matching a judge in JUDGE_SCORES, plus mean (number) and std_dev (number). severity_offset is optional but recommended. Reject if std_dev is zero or negative. |
[TARGET_SCALE] | Desired output scale range for normalized scores | {"min": 0, "max": 10, "precision": 1} | Must be a JSON object with min (number), max (number), and precision (integer). min must be less than max. precision controls decimal places. Reject if min >= max or precision is negative. |
[NORMALIZATION_METHOD] | Algorithm choice for score normalization | "z_score" | Must be one of: "z_score", "min_max", "quantile", or "severity_linear". Reject unrecognized values. Default to "z_score" if null, but log a warning. |
[PRESERVE_RANK_ORDER] | Flag indicating whether normalized scores must maintain the original rank ordering within each judge | Must be boolean true or false. If true, the prompt includes explicit rank-preservation constraints. If null, default to true with a warning. | |
[OUTPUT_SCHEMA] | Expected JSON structure for normalized output | {"normalized_scores": [{"judge_id": "string", "original_score": "number", "normalized_score": "number", "dimension": "string"}], "mapping_function": {"method": "string", "parameters": "object"}, "rank_preserved": "boolean"} | Must be a valid JSON Schema object. Validate parseability before prompt assembly. Reject if schema is not valid JSON. Include field-level type constraints in the schema. |
[DRIFT_THRESHOLD] | Maximum allowed deviation between a judge's current calibration and baseline before flagging | 0.5 | Must be a positive number. Used to detect judges whose severity shifted since last calibration. If null, skip drift checks but log a warning. Recommend 0.3-0.7 for 0-10 scales. |
Implementation Harness Notes
How to wire the score normalization prompt into an evaluation pipeline with validation, retry, and logging.
Score normalization across multiple LLM judges is not a one-off prompt execution. It belongs inside an evaluation harness that treats the normalization step as a pipeline component with defined inputs, validation gates, retry logic, and audit logging. The harness receives raw scores from N judges across M evaluation items, invokes the normalization prompt, validates the output schema, and writes the normalized scores and per-judge mapping functions to a downstream evaluation store. Without this harness, normalization results are unreproducible and untrustworthy for production score aggregation.
The harness should enforce several concrete checks before accepting the prompt output. First, validate that the output contains a normalized_scores array with the same dimensions as the input matrix (N judges × M items). Second, verify that each per-judge mapping function preserves rank ordering—if judge A scored item X higher than item Y in the raw scores, the normalized scores must maintain that ordering. Third, check that normalized scores fall within the target range (e.g., 0.0–1.0 or 1–5) and that no judge's mapping introduces score collapse (all items receiving the same normalized value). Fourth, compute the inter-judge agreement on normalized scores and flag cases where normalization increased disagreement rather than reduced it. If any validation fails, retry with the error details injected into the prompt's [CONSTRAINTS] or [ERROR_CONTEXT] placeholder, up to a configured maximum of 3 attempts before escalating for human review.
Logging and traceability are critical because normalization decisions affect every downstream score comparison. The harness should log the raw input scores, the full prompt sent to the model, the model response, validation results, retry count, and the final normalized output. Store these artifacts keyed by evaluation_batch_id and normalization_run_id so that score disputes can be traced back to the exact normalization step. For model choice, prefer a model with strong numeric reasoning and instruction-following (GPT-4o or Claude 3.5 Sonnet are reasonable defaults). Set temperature to 0 or near-zero to maximize reproducibility. If the normalization prompt uses few-shot examples, pin them to a versioned example store rather than embedding them inline, so calibration examples can be updated without changing the prompt template. Avoid running normalization on batches larger than 50 items per judge without splitting—large matrices increase the risk of the model dropping rows or producing truncated JSON. For high-stakes evaluation pipelines where normalized scores gate model releases or product decisions, add a human review step that spot-checks a stratified sample of normalized scores against the raw inputs before the normalized data enters the reporting layer.
Expected Output Contract
Normalized JSON response schema for the Score Normalization Prompt. Validate every field before downstream consumption.
| Field or Element | Type or Format | Required | Validation Rule |
|---|---|---|---|
normalized_scores | array of objects | Array length must equal number of input items. Each object must contain item_id, normalized_score, and judge_contributions. | |
normalized_scores[].item_id | string | Must match an item_id from the [INPUT_ITEMS] array exactly. No missing or extra IDs allowed. | |
normalized_scores[].normalized_score | number | Must be a float between 0.0 and 1.0 inclusive. Precision limited to 3 decimal places. Null not allowed. | |
normalized_scores[].judge_contributions | object | Keys must match every judge_id from [JUDGE_SCORES]. Values must be the original raw score from that judge for this item. | |
judge_mappings | array of objects | Array length must equal number of judges in [JUDGE_SCORES]. Each object describes one judge's normalization function. | |
judge_mappings[].judge_id | string | Must match a judge_id from [JUDGE_SCORES] exactly. No duplicate judge_ids allowed. | |
judge_mappings[].scale_type | string | Must be one of: linear, percentile, z_score, min_max. Enum check required. | |
judge_mappings[].parameters | object | Schema depends on scale_type. Linear requires slope and intercept. Min_max requires min_raw and max_raw. Z_score requires mean and std_dev. Percentile requires percentile_ranks array matching input item count. | |
rank_order_preserved | boolean | Must be true. If false, normalization failed and the entire output should be rejected or sent to human review. | |
normalization_notes | string | If present, must not exceed 500 characters. Should describe any edge cases, ties, or boundary decisions made during normalization. | |
confidence | number | If present, must be a float between 0.0 and 1.0. Represents the system's confidence in the normalization quality. Values below 0.7 should trigger a retry or human review. |
Common Failure Modes
Score normalization across multiple LLM judges breaks in predictable ways. These are the most common failure modes when aggregating scores from judges with different scales or severity profiles, and how to guard against them before they corrupt your evaluation pipeline.
Rank Reversal After Normalization
What to watch: Normalization transforms that compress or stretch score distributions can flip the relative ordering of items. An item scored higher by Judge A than Judge B in raw scores may end up lower after z-score or min-max normalization if the judges have different variance profiles. Guardrail: Validate rank correlation (Spearman's ρ) between raw and normalized scores per judge before accepting the transform. If rank order changes, the normalization method is too aggressive for your use case—consider quantile normalization or judge-specific thresholds instead.
Sparse Score Region Collapse
What to watch: When a judge rarely uses certain score values (e.g., never gives a 1 or a 5 on a 1-5 scale), normalization maps can create artificial density in those regions, making fine distinctions impossible. This is common with lenient judges who cluster scores in the upper range. Guardrail: Plot per-judge score histograms before normalization. Flag judges with fewer than 5% of scores in any bucket. For sparse regions, use ordinal mapping rather than continuous scaling, and document which score ranges lack statistical support for comparison.
Normalization Drift Over Time
What to watch: Judge severity profiles shift as models improve, evaluation batches change, or judge prompts are updated. A normalization mapping computed on last month's calibration set may silently distort this month's scores. Guardrail: Recompute normalization parameters on a rolling calibration window. Set a drift threshold—if any judge's mean or variance shifts beyond 0.5 standard deviations from baseline, trigger recalibration. Log normalization version alongside every normalized score for auditability.
Outlier Judge Distortion of Aggregate Scores
What to watch: A single judge with extreme severity or leniency can pull the normalized mean away from the true consensus, especially with small judge pools (3-5 judges). The aggregate becomes a measure of outlier influence rather than true quality. Guardrail: Compute each judge's deviation from the pool median before aggregation. Flag judges whose mean normalized score differs by more than 1.5 IQR from the pool. Consider weighted aggregation that down-weights outlier judges, or run agreement diagnostics before trusting the aggregate.
Scale Boundary Artifacts
What to watch: Min-max normalization forces all judges to use the full [0,1] range, but judges who genuinely never see extreme-quality items get stretched artificially. A judge who only sees mediocre outputs will have their "best" score mapped to 1.0, inflating scores relative to judges who saw truly excellent outputs. Guardrail: Use anchor-based normalization with fixed reference points (e.g., calibration examples at known quality levels) rather than data-driven min-max. If using distribution-based methods, cap the mapping range at the observed score range and flag items that fall outside it as extrapolations.
Silent Judge Instruction Divergence
What to watch: Normalization assumes judges are measuring the same construct on different scales. If judges have subtly different rubrics, instructions, or evaluation criteria, normalization creates the illusion of comparability while masking fundamental disagreement about what "good" means. Guardrail: Before normalizing, run inter-rater reliability on a shared calibration set using raw scores. If Cohen's κ or Krippendorff's α is below 0.6, normalization is papering over a rubric alignment problem. Fix judge instructions first, then normalize the aligned scores.
Evaluation Rubric
Criteria for testing whether the score normalization prompt produces valid, trustworthy, and production-ready outputs before shipping.
| Criterion | Pass Standard | Failure Signal | Test Method |
|---|---|---|---|
Normalized score range | All normalized scores fall within [TARGET_MIN] to [TARGET_MAX] inclusive | Output contains scores outside the target range or null values where a score is expected | Parse all normalized_score fields and assert min >= [TARGET_MIN] and max <= [TARGET_MAX] |
Rank order preservation | For any two inputs where judge A's raw score > judge B's raw score, the normalized score for A >= normalized score for B | Normalized scores invert the original rank ordering between any pair of inputs | Compute Spearman rank correlation between raw scores and normalized scores per judge; assert rho >= 0.99 |
Per-judge mapping function validity | Each judge in [JUDGE_IDS] has a mapping_function field that is a valid, executable description | Mapping function is missing, returns 'null', or describes an operation that cannot be applied to the raw scores | Extract mapping_function per judge; verify non-null string; apply function to sample raw scores and check output is numeric |
Distribution shift detection | Output includes a distribution_shift_flag set to true when any judge's normalized distribution deviates from the aggregate by more than [SHIFT_THRESHOLD] | distribution_shift_flag is false when a judge's mean normalized score differs from aggregate mean by > [SHIFT_THRESHOLD] | Compute per-judge mean normalized score; compare to aggregate mean; assert flag matches threshold condition |
Outlier judge identification | Judges with severity z-score > [OUTLIER_Z_THRESHOLD] appear in outlier_judges array with severity_z_score field | A judge with z-score of 3.5 is missing from outlier_judges when threshold is 2.0 | Calculate z-score of each judge's mean raw score against judge pool; verify outlier_judges contains all judges exceeding threshold |
Input count consistency | Number of scores in normalized_score_distribution equals number of input scores in [RAW_SCORES] | Output contains fewer or more normalized scores than input raw scores | Count items in raw_scores array; count items in normalized_score_distribution; assert equality |
Judge coverage completeness | Every judge_id from [RAW_SCORES] appears in the per_judge_calibration map | A judge present in the input is absent from the calibration output | Extract unique judge_id values from raw_scores; extract keys from per_judge_calibration; assert set equality |
Confidence interval presence | Each normalized score includes a confidence_interval_95 field with lower and upper bounds where lower <= normalized_score <= upper | Confidence interval is missing, bounds are inverted, or interval width exceeds [MAX_CI_WIDTH] | Parse confidence_interval_95 per score; assert lower <= score <= upper; assert (upper - lower) <= [MAX_CI_WIDTH] |
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 normalization prompt and a small set of 2-3 judges. Use raw score outputs without strict schema enforcement. Focus on getting a working mapping function per judge before adding validation layers.
Simplify the prompt by removing the rank-order preservation check and the agreement matrix. Replace with a single instruction: "Map each judge's scores to a 0-1 scale using min-max normalization and report the mapping function."
Use a flat list of [JUDGE_OUTPUTS] with judge ID, raw score, and score range metadata. Skip confidence intervals and statistical tests.
Watch for
- Judges with different scale directions (e.g., 1=best vs 10=best) producing inverted mappings
- Sparse score ranges where min-max normalization amplifies noise
- Missing edge cases when a judge only uses a narrow band of their scale
- No validation that normalized scores are comparable across judges

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