Field note · architecture
How Many LLM Calls Should an AI Workflow Use?
A six-task deterministic audit shows when one LLM call is enough, when a second owns a real contract, and what a model run must measure.

The right call count is the smallest number that gives every important output its own acceptance boundary. One call is the default. A second call earns its place when it retrieves, checks, repairs, or transforms something under a separate contract. More stages need the same proof.
I ran a small deterministic preflight to make that rule inspectable. It is not a model benchmark. It tells you what call count the workflow structure requires before you spend tokens measuring model behavior.
What did the six-task audit observe?
One call covered 3 of 6 task families, two calls covered 5, and three stages covered all 6 under the fixture's fixed contract rule. The result measures contract coverage, not answer quality.
| Design | Calls available per task | Tasks covered | Tasks needing another boundary | Observed result |
|---|---|---|---|---|
| One-call baseline | 1 | 3 of 6 | 3 of 6 | Classification, extraction, and bounded drafting fit one contract |
| Two-call design | 2 | 5 of 6 | 1 of 6 | Retrieval plus synthesis and generation plus checking fit two contracts |
| Three-stage design | 3 | 6 of 6 | 0 of 6 | Classification, drafting, and validation each have a stage |
The useful finding is not “three calls are better.” It is that each extra call in this fixture corresponds to an additional accepted output. If a proposed call has no separate contract, the audit gives you no reason to keep it.

What counted as a separate contract?
A contract is separate when it has its own output, acceptance rule, or failure decision. A longer prompt is not a contract. A different stage name is not a contract.
The six-task fixture used these families:
| Task family | Contracts in the fixture | Minimum design indicated |
|---|---|---|
| Classify a support request | One label and schema check | 1 call |
| Extract invoice fields | One structured record and schema check | 1 call |
| Draft a reply from approved facts | One draft and content check | 1 call |
| Retrieve a policy and answer with evidence | Retrieval result, then answer grounded in it | 2 calls |
| Generate a reply and check it against a rubric | Draft, then independent check | 2 calls |
| Classify, draft, and validate | Three outputs with three acceptance checks | 3 calls |
The rule was fixed before comparing designs:
- One independent output contract requires one call.
- A second sequential contract requires a second call.
- Three separately accepted contracts require three stages.
- A cosmetic rewrite does not justify another call.
Use this decision table before adding a call: count the independently accepted outputs, then add only the stages that own them.
This is a reusable design artifact, not a claim about what a model must do. A real workflow can combine contracts if one call can satisfy them without hiding a failure. The burden is to show that combination on the same acceptance rubric.
When is one LLM call enough?
One call is enough when one response owns the complete accepted result and one rubric can detect its failures. Structured classification, field extraction, and a bounded draft from approved facts fit that shape in the audit.
Anthropic recommends starting with the simplest solution and adding workflow structure when the task has a reason to be decomposed. Its distinction between workflows and agents is useful here: a fixed sequence can stay fixed, while an agent dynamically directs its process (Anthropic's guide to effective agents).
Use one call when:
- the input context is available at the same boundary;
- the output has one clear schema or rubric;
- no independent source must be retrieved after generation; and
- a failed result can be rejected or repaired at that same boundary.
Do not split a prompt only to make the diagram look more sophisticated. A split that produces no new check, context boundary, or decision gives you another failure point without a new measurement.
For the broader agent decision, start with when to use an AI agent. The call-count decision belongs inside that architecture, not above the workflow's acceptance rules.
When does a second call earn its place?
A second call earns its place when the first call creates an intermediate result that the second call must independently use or judge. Retrieval followed by synthesis and generation followed by checking both meet that test in the fixture.
The separation matters because the second stage can reject, repair, or stop the first result. If it merely paraphrases the same output, it has no independent job. Keep the calls together until you can name what call two owns and how you will score it.
Anthropic describes prompt chaining as sequential calls where each call processes the previous output, and evaluator-optimizer as generation followed by evaluation and refinement. It presents both as conditional patterns, with clear decomposition or criteria as the reason to use them (Anthropic's workflow guidance).
The decision test is:
keep one call unless call two has
a distinct input or output contract
and a distinct acceptance or stop rule
If you cannot fill in both lines, the second call is probably a prompt split.
When does a staged design need three or more calls?
Use three or more calls only when the workflow contains three or more independently accepted transitions. The fixture's classify, draft, and validate task is the narrow example: each transition creates a result that can fail for a different reason.
A staged design can make those failures visible. It also adds latency, token use, retries, state management, and more places for stale context to enter. AWS describes repeated inference in an agent loop as a source of added latency and cost, and recommends an explicit performance budget for retries (AWS's agent performance guidance).
Use a third stage when it has a real owner, such as:
- a classifier that selects the route before drafting;
- a generator that creates the candidate output; and
- a validator that can reject or repair the candidate.
Do not use a third stage when the first two stages already share one acceptance rule. Add it only after the failure it is meant to catch appears in the fixture or the risk boundary requires an independent check.
How should you measure the model-backed result?
Run the same task set through matched one-call, two-call, and staged designs with the same model identifier, prompts, schemas, sampling settings, token limits, retry policy, and clock source. The deterministic audit tells you what to compare; it does not tell you which model will win.
OpenAI's evaluation model uses a configured data source, graders, and runs. That shape is appropriate for a call-count experiment because each design can receive identical cases and the same acceptance logic (OpenAI's evals documentation).
For every task and design, record:
| Measurement | What it answers |
|---|---|
| Accepted-task rate | Did the complete workflow meet the release rubric? |
| Correction rate | How often did a later stage repair a failure? |
| p50 and p95 latency | What do typical and slow runs cost in time? |
| Input and output tokens | How much context and generation did the design consume? |
| Estimated cost | What did the provider charge under the dated price sheet? |
| Failure mode | Where did the workflow fail: routing, retrieval, generation, validation, or execution? |
Keep the raw cases, outputs, stage events, rubric decisions, exclusions, and analysis code. A result table that reports only the final answer hides the reason an extra call helped or hurt.
How do latency and cost change the decision?
Treat each extra request as a budget decision, then divide the cost by accepted work rather than by raw calls. Anthropic's pricing documentation charges input and output tokens per request, and its tool-use examples show that request context can add tokens (Anthropic's pricing documentation).
Use these calculations after a real run:
cost per accepted task = total input and output cost / accepted tasks
quality gain = accepted-task rate after the extra call - baseline accepted-task rate
The local fixture has no model outputs, token counts, provider bill, or accepted-task denominator. It would be dishonest to fill those fields with estimates. The extra call earns its place when the measured quality or recovery gain fits the latency and cost budget.
What does this result still not prove?
It does not prove that a model is more accurate with two calls, that a three-stage workflow is reliable, or that one design has lower cost in production. It also does not measure parallel calls, streaming, non-model tool calls, retries, context-window pressure, human approval time, or provider-specific behavior.
Method note: the sample is synthetic, small, and deterministic. Its six families were chosen to expose one, two, and three independent contracts. The contract rule is an analysis artifact for this article, not an external standard. A real benchmark can disagree because model behavior, prompts, schemas, task ambiguity, and failure recovery all matter.
Limitations: this audit does not estimate model accuracy or production performance. It only makes the acceptance boundaries visible before a provider run.
The local endpoint check explains why no model-backed measurement appears here. Claude Code was not authenticated, and the local inference endpoint was unavailable. That is a reproducibility boundary, not evidence that any architecture wins. Reopen the measurement when the endpoint, fixture, dated configuration, raw outputs, and rubric are available.
The practical answer is conditional: start with one call, add a call for a separate contract, and stop when the measured benefit no longer pays for its operating budget. For the release decision after the fixture, use how to evaluate an AI agent. For queue and retry implications, see how to build a queue-backed AI workflow.