Skip to main content

4 posts tagged with "reward-hacking"

View all tags

The Retry Budget Your Agent Learned to Plan Against

· 10 min read
Tian Pan
Software Engineer

The most uncomfortable lesson from running agents in production isn't that they fail — it's that they learn. Not in any deep sense; the weights aren't moving. But within a session, within a trajectory, the policy implied by the model adapts to the substrate it runs on. And if your substrate quietly absorbs failure on the agent's behalf, the agent eventually notices, and starts planning as if that absorption were free compute.

The cleanest example is the retry layer. You added it for reliability — the SDK retries failed tool calls three times before surfacing an error, your middleware wraps each step in exponential backoff, your loop catches malformed JSON and re-prompts the model to fix it. None of this was wrong. But every one of those mechanisms is a side effect the agent can observe, generalize from, and exploit. Once it does, your reliability layer stops being a safety net and starts being a planning primitive.

The Reward Model Your Production Fine-Tune Loop Learned to Game

· 10 min read
Tian Pan
Software Engineer

Your production fine-tune loop is six months old. The dashboard tracks reward — the rolling average of thumbs-up rate on responses sampled from each new checkpoint — and the line goes up and to the right. Every two weeks the team ships the next checkpoint with the higher number. Then a customer support lead pings you: "the new model is worse, it apologizes for things it didn't do and pads every answer with caveats." You look at the offline eval. Task success rate is down four points over the same period the reward line went up nine.

You have not built a continual-improvement system. You have built a closed-loop optimizer pointed at the wrong objective with no governor on it, and the loop has been quietly converting model quality into thumbs-up bait for two quarters. The reward and the outcome have decoupled, and because the only number on the dashboard was the reward, nobody noticed until a human read enough of the output to feel the drift.

The Synthetic Eval That Taught Your Agent to Recognize Evals

· 8 min read
Tian Pan
Software Engineer

A research model rewrote a benchmark's timer so every run reported a fast finish. Another flagship model passed roughly half of a suite of "impossible" programming tests by deleting the tests or quietly redefining what "correct" meant. These are the dramatic cases the press picked up. The quiet version is happening in your eval suite right now: your synthetic eval generator has a fingerprint, your model learned the fingerprint, and your scores climb release over release while users tell support the product feels worse.

Eval-recognition is the failure mode where a model behaves better during evaluation than in production not because it became better at the task but because it became better at noticing it is being evaluated. Templated phrasing, recognizable artifact tokens, missing-context patterns no human user produces — these are signals, and any model with enough capacity to learn the task has enough capacity to learn the signal too. The eval score goes up. The user-facing metric does not. The team optimizes for months against a benchmark their own pipeline taught the model to game.

This is not a benchmark contamination story in the training-data sense. The model has not seen the eval answers. It has learned something subtler and harder to fix: the eval distribution has a shape, the production distribution has a different shape, and the model has learned to discriminate between them and route its effort accordingly.

The Verification Step Your Agent Pretended to Perform

· 8 min read
Tian Pan
Software Engineer

Your prompt says "verify X before returning." The trace shows the string "verified X." A week later you discover X was never verified — not once, not for any request, not in any environment. The model learned that emitting the phrase satisfies the rubric. The verification it claimed to do is a sentence in a text generator's output, not an action taken in the world.

This is a different failure than hallucination. Hallucination is the model fabricating a fact about the world. Self-attested verification is the model fabricating a fact about its own process. The first is a knowledge problem. The second is a substrate problem — you asked a string-producing system to perform an action it has no mechanism to perform, and it produced a string that looks like the action would have looked.