← All guides

Say what shape the answer should take

Ask a model to extract some data and it will happily give you a paragraph about the data. Not because it misunderstood — because you never said what shape you wanted, and prose is the default.

Clear task, unspecified shape
Extract the invoice totals from the supplier statement below for the finance team.

The task here is unambiguous. The verb is right, the object is right. And you will still get something like "I found three invoices in the statement. INV-104 is for £82.50, while INV-105..." — perfectly correct, and completely useless if you were going to feed it into a spreadsheet.

Instant checks

9 key structural practices evaluated locally

71% Coverage5/7
  • States a concrete task

    Passed
  • Avoids vague language

    Passed
  • Specifies an output format

    Consider

    The wanted output format, length, or structure is never stated.

    Recommendation — Say what shape the answer should take — JSON, a table, three bullets, under 200 words. Left unsaid, models default to prose you then have to parse.
  • Avoids dangling references

    Passed
  • Includes an example

    Consider

    No example of the output you want.

    Recommendation — One worked example pins down format, tone, and edge-case handling far more reliably than describing them in prose.
  • Separates data from instructions

    Passed
  • Avoids over-aggressive phrasing

    Passed
No format stated, and no example — both checks fire.

Prose is the default, and the default is rarely what you want

Models are trained overwhelmingly on prose written for humans. Absent any instruction, that is what they produce. This is fine when a person is going to read the answer, and actively costly the moment anything else is:

Each of those is a round trip you pay for in time, and often in a second API call.

Name the shape, and show it

Shape named, then demonstrated
Extract every invoice total from the statement below.

### Output format
Return JSON: [{"invoice": "string", "total": 0.00}] and nothing else.

### Example
[{"invoice": "INV-104", "total": 82.50}]

### Statement
"""
INV-104  82.50
INV-105  19.00
"""

Instant checks

9 key structural practices evaluated locally

100% Coverage7/7
  • States a concrete task

    Passed
  • Avoids vague language

    Passed
  • Specifies an output format

    Passed
  • Avoids dangling references

    Passed
  • Includes an example

    Passed
  • Separates data from instructions

    Passed
  • Avoids over-aggressive phrasing

    Passed
Every applicable check passes.

Three separate things are doing work here, and they compound.

The format is named. Return JSON: [{"invoice": "string", "total": 0.00}] removes every ambiguity about structure — the key names, the nesting, the types.

"and nothing else" is not redundant. Without it, models often wrap valid JSON in a friendly sentence, or a markdown code fence, and now your JSON.parse throws. This four-word clause is the difference between a parser that works and one that needs a regex to clean up first.

The example pins down what the description cannot. Is total a string or a number? Does it carry a currency symbol? The schema line suggests an answer; the example settles it. This is why the format check and the example check so often fire together — they are two halves of the same instruction.

What counts as a format

More than you might think. Any of these is a format instruction, and any of them beats silence:

That last category is underrated. Half the frustration with model output is not that the content is wrong — it is the "Certainly! Here's the summary you requested:" wrapped around it. One line — "Return the summary only, with no preamble" — deletes that forever.

If you use structured outputs, still say it

Most APIs now support a schema that guarantees the response shape. Use it — it is strictly better than hoping.

But keep the instruction in the prompt anyway. The schema constrains the shape of the output; it does not tell the model what the fields mean, or which of two plausible readings of your data to pick. A schema will happily give you a perfectly-formed JSON object full of the wrong values.

Every check in this article ran live in your browser. The same nine run on any prompt you paste in, for free.