Part 5 of 9 · Designing questions

Make the question answerable

A useful question names the evidence, defines the boundary, and produces an answer your application can use. Practise those three moves with a reading group choosing papers.

Fictional abstracts and illustrative answers. Nothing on this page calls a model.

Anatomy of a question

Before writing a request, complete this sentence: “Given this material, I need to know ___ so the application can ___.” That sentence connects the question to a visible behaviour.

type

The shape of the answer

choice for one of a set, score for a position on ordered levels, noul for the probability of yes. Pick by what the code will do with the answer.

instructions

The judgment

A specific question or a statement to judge. A string, or an object or array when the judgment has parts worth labelling, such as what to focus on and what to ignore.

criteria

The answer space

For a Choice, the named options; for a Score, the levels in order from low to high; for a Noul, an optional gloss on what yes and no mean. Each entry may itself be a string or a structured object.

The question ID is a lookup key for your application. Put the full meaning in instructions. Keep the wording and criteria under version control so that a change can be evaluated before it changes production decisions.

"code_released": {
  "type": "noul",
  "instructions": "Does `paper.abstract` state that code, models, or data from this work are publicly released?",
  "criteria": {
    "true": "The abstract says code, checkpoints, data, or probes are released or available",
    "false": "No release is mentioned, or only a promise to release later"
  }
}

Separate the decisions you want to tune

A reading group asks “Should we discuss this paper?” The answer depends on the group’s interests, the kind of contribution, and whether members can try the work themselves. If those factors matter separately, ask about them separately.

For example, measure relevance, identify the contribution, and check whether the abstract mentions released code. The group can then change its selection rule without repeating every judgment.

Do not split merely to increase the question count. Keep a judgment together when it has one useful meaning, such as whether an abstract addresses any of the group’s listed interests.

Lab

Decomposition lab

The same abstract, asked two ways. Toggle between the vague question and its decomposition and compare what the code can do with each. Answers are illustrative and omit the confidence field.

State (JSON object; the abstract is fictional):

Questions
Answers and what code does with them

Criteria draw the boundaries

Imagine two group members labelling the same abstract. One uses “systems” for anything involving a computer; the other reserves it for infrastructure research. A label alone has not established a shared boundary.

Write down what qualifies, what belongs elsewhere, and a representative example. Structured criteria can help organize that information. More detail is useful only when it resolves a real ambiguity.

  • Describe what the option covers, in terms that match your inputs.
  • Exclude what it does not cover, naming the neighbouring option that should win instead. Exclusions are where two fuzzy options stop overlapping.
  • Exemplify with two or three phrases that look like the real data. Examples steer strongly, so they must be representative.

Check whether every realistic input has a place to go. “Outside our topics” handles irrelevant papers; “not enough information” handles incomplete abstracts. Use separate checks when you need to distinguish absence of evidence from evidence of absence.

Lab

Criteria sharpener

Compare three versions of the same question. The invented distributions show the intended effect of clearer boundaries; a real rewrite needs evaluation to see whether it helps.
Illustrative distribution

Sharpening is not free: each description costs tokens on every request, and examples that do not resemble your inputs can pull answers the wrong way. Add the move that fixes a confusion you have actually observed, then re-run your labelled set.

Shape the state so questions can point

Give the model a tidy evidence packet: the abstract, the reading group’s interests, and any context the judgment genuinely needs. Named JSON fields keep those roles visible.

Use a path such as `paper.abstract` in the instructions so the target is unambiguous. A path tells the model which text you mean.

Remove unrelated attachments and compute exact facts first. If publication age matters, calculate it in code and provide the result. Retain enough surrounding text to preserve qualifiers and negations.

Lab

Path builder

Click any key in this state to get the backticked path a question would use, dropped into a sample instruction.
State
Path
`paper.abstract`
In an instruction

The token budget

The meter below estimates how state size and question count affect a request. It uses the published Jev 1.13 limits and price as a snapshot: 64k tokens total, 32k for state plus the longest question, and $0.042 per million input tokens. Check current model details before budgeting a deployment.

Lab

State and token meter

Paste a state and see an estimated token count against the documented limits, plus what a thousand requests would cost at the documented price. The estimate uses about four characters per token; the API's usage field reports the real count.
State + longest question
documented limit: 32,000 tokens
Whole request
documented limit: 64,000 tokens
State hygiene, before you send

With questions this shape, the answers become material for the patterns in Part 6: ask many at once and have code discard the answers it does not need (speculative fan-out), or weight several Scores into one ranking you can retune without another request (composite scoring). Part 8 lists what still belongs in code rather than in a question (code or model?).