Skip to the content.

Context

An LLM generates content that will be used or stored, and its output is sometimes wrong in ways a targeted check could catch. Verifying a specific property (grammaticality, factual match, difficulty level) is a narrower task than the open-ended generation that produced it.

Example

The vocabulary exercises need example sentences for each word, which an LLM generates at the learner’s level, an open-ended task (the sentence must be natural, level-appropriate, and actually use the word). A generated sentence can still be wrong in a specific way: it may use the word in a different sense than the one being taught. For the Danish virker (translated as seem), a generated sentence might use virker in its other sense, work/function. A second, batched LLM call then asks one narrow question of each sentence, whether it uses the word in the intended meaning, and drops the ones that fail. Verifying that single property is far narrower than writing a good sentence from scratch.

Problem

How can an unreliable generator’s mistakes be caught, when a second generator would be just as unreliable?

Forces

Solution

Use one LLM call to generate a result, then a separate, differently-prompted LLM call to check one specific property of it. This escapes the paradox for two reasons. First, verifying one property (is it grammatical? does it use the intended meaning?) has a small, well-defined answer space and a clear success criterion, so an LLM does it more reliably than the open-ended generation that produced the output. Second, because the checker is prompted differently and asked a different question, its errors are largely decorrelated from the generator’s rather than shared, so it does not simply repeat the generator’s mistakes.

Consequences

Known Uses

Notes


💬 Open an issue about this pattern