"Accuracy versus latency" is not one dial. It is a set of separate levers, each with its own curve, and an architect is expected to pick a point, defend it with evidence, and say what would make them change it. The scenario question rarely asks "which is best"; it asks which lever addresses the stated constraint, or which justification would actually persuade a reviewer.
| Lever | What it tends to buy | What it tends to cost |
|---|---|---|
| Model tier | Capability on hard tasks | Latency and price; smaller tiers are faster and cheaper |
Effort (output_config.effort) | Thoroughness, especially on agentic work | Tokens and time; lower effort means less thinking and fewer, terser tool calls |
| Thinking | Multi-step reasoning quality | Thinking tokens are billed as output and count toward max_tokens |
| Retrieval depth (top-k, reranking) | Recall of the right evidence | More input tokens, and one more stage if you rerank |
| Verification pass (second call or judge) | Catches errors before users see them | A whole extra round trip |
| Parallel subagents | Wall-clock time on breadth tasks | Much higher total tokens: Anthropic reports agents use roughly 4 times and multi-agent systems roughly 15 times the tokens of a chat |
| Streaming | Perceived latency (time to first token) | Nothing on total time; more client complexity |
Effort and thinking: what the docs actually say
Effort is set per request as output_config: {effort: ...} with levels low, medium, high, xhigh and max (which levels exist depends on the model). high is the default and is identical to omitting the parameter. Effort affects all output tokens, including tool-call arguments and thinking, so lower effort also means fewer and terser tool calls. Anthropic calls it a behavioural signal, not a strict token budget: at low effort Claude still thinks on hard problems, just less.
Four practical consequences:
- Sweep, do not inherit. The effort docs advise starting from the default and adjusting from your own evals, and running a fresh sweep when you change models rather than reusing old settings.
- Effort is not a length control. On at least one current model the docs say changing effort does not reliably shorten responses; prompt for the length you want.
- Effort changes interact with caching. Changing top-level effort between requests invalidates the prompt cache for that conversation. Some models support a per-message effort change (beta) that preserves the cache; otherwise choose a level per workload, not per turn.
- Thinking is mostly on by default now. On recent models thinking is adaptive and steered by effort, and the per-model table in the thinking docs says which models accept which configuration. Do not assume you can switch it off; check the table.
Anthropic's latency guide adds a discipline point: first build a prompt that works well without constraints, then apply latency reductions, or you never learn what top performance looks like. Its other levers are a smaller, faster tier for speed-critical work (check the models page for current options), shorter prompts and outputs, and streaming. max_tokens is called a blunt instrument: hitting it truncates the answer, so it protects budgets but is not a way to make a normal response arrive sooner.
Latency means several things
Pin down which latency the requirement is about. Time to first token governs how responsive a chat feels, and streaming improves it. Total time governs a pipeline step or a tool-using agent, and streaming does not shorten it. Percentiles matter more than means: a p95 target is missed by exactly the long-tail requests that verification passes and retries add to. For work no one is waiting on, the trade reverses: the Batch API accepts higher latency for lower cost, and the same logic applies to anything you can move off the interactive path.
Two design patterns manage the trade rather than pick a side. An advisor setup (a beta tool) lets a faster executor model consult a stronger advisor mid-generation, so most tokens are produced at the cheaper model's rate. Escalation on failure runs the cheap configuration first and re-runs only the cases a checker rejects at a higher setting; it needs a cheap, reliable failure signal such as a validator or tests, and the failed cases pay for two attempts.
Key concept: defend with a frontier, not an anecdote
A configuration is justified when it meets the latency and quality requirement and no measured alternative achieves the same quality faster or cheaper. That is an argument from a score-versus-cost-and-latency curve on your own workload, not from a vendor benchmark or one impressive example.
Justifying a configuration with evidence
- State the requirement in measurable terms: latency percentile (or time to first token), a quality metric with a threshold, and a cost ceiling.
- Build an eval set from production-like tasks with automated outcome checks, including hard cases; the tier-by-effort curve differs by workload shape. Anthropic's guidance notes that lowering effort tends to cost little on research-style tasks but more on long agentic coding.
- Sweep one variable at a time (tier, effort, retrieval depth, verification on or off) with everything else, including the prompt, held identical.
- Record distributions (p50 and p95 latency), output tokens and cost per completed task, not per token. Anthropic's cost guidance makes that same point and says a multi-model design must beat the single-model curve across its range.
- Pick from the frontier, write the decision record (chosen point, rejected alternatives, evidence), then shadow-test on a slice of real traffic before cutover.
- Name the re-evaluation triggers: new model release, traffic mix change, a metric regression.
Retrieval depth follows the same logic. In Anthropic's contextual retrieval experiments, passing 20 chunks outperformed 5 or 10, and a reranker narrowed a wider candidate set (150) to the final 20. More chunks cost input tokens and latency, so treat top-k as another swept variable (see Lessons 1.5 and 1.6).
Common exam distractor
Beware the answers that sound decisive but skip the measurement: "use the largest model at maximum effort to be safe", "drop to the smallest model to hit the latency target", "lower max_tokens to speed things up", "add an LLM verification step to every request as insurance", or "reuse the effort setting from the previous model". The correct answer usually runs a controlled comparison against the stated SLO, then gates expensive steps so only the requests that need them pay.