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.

8 minute read
  • AI workflow architecture
  • LLM evaluation
Illustration of one, two, and staged LLM workflow paths meeting separate acceptance contracts

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.

DesignCalls available per taskTasks coveredTasks needing another boundaryObserved result
One-call baseline13 of 63 of 6Classification, extraction, and bounded drafting fit one contract
Two-call design25 of 61 of 6Retrieval plus synthesis and generation plus checking fit two contracts
Three-stage design36 of 60 of 6Classification, 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.

Illustration of a fixed task fixture branching into one-call, two-call, and staged designs

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 familyContracts in the fixtureMinimum design indicated
Classify a support requestOne label and schema check1 call
Extract invoice fieldsOne structured record and schema check1 call
Draft a reply from approved factsOne draft and content check1 call
Retrieve a policy and answer with evidenceRetrieval result, then answer grounded in it2 calls
Generate a reply and check it against a rubricDraft, then independent check2 calls
Classify, draft, and validateThree outputs with three acceptance checks3 calls

The rule was fixed before comparing designs:

  1. One independent output contract requires one call.
  2. A second sequential contract requires a second call.
  3. Three separately accepted contracts require three stages.
  4. 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:

MeasurementWhat it answers
Accepted-task rateDid the complete workflow meet the release rubric?
Correction rateHow often did a later stage repair a failure?
p50 and p95 latencyWhat do typical and slow runs cost in time?
Input and output tokensHow much context and generation did the design consume?
Estimated costWhat did the provider charge under the dated price sheet?
Failure modeWhere 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.