TL;DR
Ask an LLM to rate a revised text while mentioning the score the previous version got, and the new rating gets pulled toward that old number, even if it's random and has nothing to do with the text's actual quality. The model doesn't judge objectively; it latches onto a hint from the context like an anchor.
The researchers proved this the hard way: they deliberately slipped models a random low score as the "previous rating" (while the text itself stayed exactly the same). The result: 7 out of 8 models systematically lowered the new rating, even though nobody asked them to. GPT-4.1, for example, rated the same text 5.0 out of 5 with no context and 4.36 when it saw that "the previous attempt received a low score." At the level of "accept/reject" decisions, this translated into a 22 percentage point drop in the share of accepted texts for one of the models. And it's not just about numbers: on real business data with human labels, this bias blocked error corrections in 48% of cases and flipped a correct verdict into an incorrect one in 10% of cases.
Worse, the standard cures don't work. Asking it to "think step by step" (Chain-of-Thought) doesn't remove the effect. A direct warning to "ignore the previous score" doesn't rescue numerical scores either; it helps a little only for categorical decisions (like "correct/incorrect"). The only reliable fix is to not give the model any context about the past score if you need an independent review.
What's Going On
BAD: The prompt contains "This is attempt #3. Previous score: 2.5"
→ the LLM sees the hint → pulls the new rating toward the old number
→ even if the text got noticeably better
GOOD: The prompt contains no scoring history
→ the LLM rates the text "from scratch"
→ the rating reflects the actual current quality
An important detail: the effect is threshold-based, not proportional. It doesn't matter whether the "past score" was 1.0 or 3.9; what matters is that metadata about a past score is present. Its mere presence sharply shifts the probabilities toward a lower score, while the specific anchor value barely affects the size of the shift.
Example in Action
Task: A copywriter rewrites ad copy for Reels/Shorts and asks ChatGPT to rate its quality on a 1–10 scale after the edits.
A prompt that creates the problem:
Here is the new version of the ad copy. This is the third attempt.
The previous version scored 4 out of 10.
Text: {text}
Rate it on these criteria: is the headline catchy, is there a call to action,
is the offer clear. Give a score from 1 to 10.
A prompt without the bias:
Rate the ad copy on these criteria: is the headline catchy, is there a call
to action, is the offer clear. Give a score from 1 to 10.
Text: {text}
Result: In the first case, even if the new text is objectively stronger, the model will most likely give a score closer to the old "4", because it sees the label "this is a rework, the last one was bad." In the second case, the rating will reflect the text's actual quality, untied from its history.
Why It Works
LLMs were trained on texts where people write exactly this way: they treat a past score as a meaningful signal and don't move far enough away from it, even when it's irrelevant. That's the classic human anchoring effect, which the model reproduces functionally without actually "understanding" that the anchor is random.
Token analysis on GPT-4.1 pinned down the mechanics more precisely: without metadata about a past score, the model chose the digit "5" with 93% probability and "4" with 7%. As soon as a "past score" field appeared in the prompt, the probabilities flipped: 100% on "4" and 0% on "5". That's not fine-tuning to a specific number, it's a mode switch: "aha, this is a retry, so I'd better be on guard."
Control knobs: - Remove any fields like "attempt #", "previous score" or "this is a revision" from the prompt → you get an independent rating. - If you need to track progress between versions, ask the model to compare the versions directly ("what changed between version 1 and version 2") rather than give a new score with one eye on the old one. - Don't count on "think step by step" as a cure; the effect lives not in the reasoning logic but in how the context itself is perceived. - An explicit "disregard the previous score" isn't useless, but it works only for "right/wrong" decisions, not for numerical scores.
Prompt Template
The universal principle isn't a technique with steps, it's a prompt hygiene rule:
Rate {item being evaluated} on these criteria: {criteria}.
Give a score from {min} to {max} and a short explanation.
{item being evaluated}: {content}
What to remove from the prompt if you want an unbiased rating: - The attempt / version number - Any mention that this is a "rework" or "revision" - Any past score, even as "context for your information"
If you need to track progress without bias:
Here are two versions of {item}. Don't give an overall score.
Compare them directly: what got better, what got worse, what stayed the same.
Version 1: {text_1}
Version 2: {text_2}
🚀 Quick start: paste this into the chat:
I regularly ask you to rate revised versions of my text/code/resume
and mention the past score for context. Help me rewrite my rating prompt
so that your new rating doesn't depend on what you know about the past rating.
My task: {describe the task}.
The model will strip the scoring-history fields from the prompt and offer either a "clean" rating from scratch or a direct version-comparison format with no scores.
Original from the Paper
Here is the exact metadata bait the researchers added to the prompt to trigger the effect (avoid this in your own rating prompts):
Attempt metadata:
- Attempt: k (This is a revision)
- Prior score: a
Context: The researchers inserted this block into the LLM judge's prompt along with the task, the response and the rubric. k is the attempt number, a is a random number below the acceptance threshold (0–3.99 out of 5). The response text didn't change between conditions; the only variable was whether this block was present.
Limitations
⚠️ Not universal across models: one of the eight models (Llama-3.1-8B) showed almost no effect. A large model is no guarantee of protection, nor a guarantee of vulnerability: the pattern is unpredictable even within one model family.
⚠️ Standard cures don't help: asking for step-by-step reasoning (Chain-of-Thought) doesn't reduce the bias. A direct warning to "disregard the past score" barely helps for numerical scores; it works only for categorical decisions like "right/wrong."
⚠️ Depends on the task type: code review is less susceptible to the effect than creative writing, summarization and factual answers. If you're asking for a code rating, the risk is lower; if you're asking for a text rating, it's higher.
⚠️ Tested on a limited set: the experiment was built on 20 fixed texts and artificially lowered "past scores." In real multi-step revision chains, the size of the bias may differ from what was measured.
How They Tested It
The team took eight models, from GPT-4.1 and Claude to open Llama and Qwen, and ran 192,000 rating requests through them across three variants of the same prompt: no history at all, a hint that "this is a rework," and a full metadata block (attempt number + random past score). The texts being rated (20 fixed tasks: summarization, code review, creative writing, factual questions) didn't change between conditions, only the context around them.
To separate the real effect from the noise of repeated requests, statistics were computed not per individual response but per task, via bootstrap resampling of the 20 tasks 10,000 times. That's the honest approach: if they'd counted all 185,000 valid responses as independent data points, the result would have looked far more certain than it really is.
The most intriguing part is the token analysis on GPT-4.1: the model's probability of choosing "5" over "4" flipped almost instantly and completely once past-score metadata appeared, while changing the anchor value itself within the "bad" range (1.0 vs. 3.9) changed almost nothing. That suggests the effect isn't a subtle mathematical adjustment but a crude switch into "suspicion mode" when the model sees the flag "this is a revision with a low past score."
They also checked it separately on real business data with human labels (not artificial texts), and the bias held up there on categorical decisions: the model blocked corrections of its own errors in 48% of cases and flipped a correct answer into an incorrect one in 10% of cases when it saw a label saying "the past attempt received such-and-such a tag."
Resources
Kapetanovic, A., Altwlkany, K., Mercep, A., Duricic, T., Lacic, E.: Anchoring Bias in LLM-as-a-Judge Systems: Prior Scores Compromise Evaluation Independence, CIKM 2026, Infobip. Code, prompts and statistical formulas: github.com/infobip/llm-judge-bias