Inferensys

Prompt

Score Normalization Prompt Across Multiple LLM Judges

A practical prompt playbook for normalizing scores from multiple LLM judges with different scales and severity profiles into a unified distribution for apples-to-apples comparison.
SRE reviewing LLM observability dashboard on multiple screens, tracing and metrics visible, dark mode monitoring setup.
PROMPT PLAYBOOK

When to Use This Prompt

Determines the right conditions for deploying the multi-judge score normalization prompt in evaluation pipelines.

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.

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.

PRACTICAL GUARDRAILS

Use Case Fit

Where this prompt works, where it fails, and what you must provide before running it.

01

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.

02

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.

03

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.

04

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.

05

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.

06

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.

PROMPT PLAYBOOK

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.

text
You 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.

IMPLEMENTATION TABLE

Prompt Variables

Every placeholder the Score Normalization Prompt expects, with concrete examples and validation rules to catch misconfiguration before runtime.

PlaceholderPurposeExampleValidation 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.

PROMPT PLAYBOOK

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.

IMPLEMENTATION TABLE

Expected Output Contract

Normalized JSON response schema for the Score Normalization Prompt. Validate every field before downstream consumption.

Field or ElementType or FormatRequiredValidation 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.

PRACTICAL GUARDRAILS

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.

01

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.

02

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.

03

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.

04

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.

05

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.

06

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.

IMPLEMENTATION TABLE

Evaluation Rubric

Criteria for testing whether the score normalization prompt produces valid, trustworthy, and production-ready outputs before shipping.

CriterionPass StandardFailure SignalTest 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]

ADAPTATION OPTIONS

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
Prasad Kumkar

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.