← Blog

How to Improve Prompt Engineering Results Fast

2026-09-19 · 5 min read · SubToAPI Team

Improving your prompt engineering comes down to three things: giving the model more structure, removing ambiguity, and testing changes systematically instead of tweaking blindly. Most people who feel stuck with "bad prompts" aren't missing some secret technique — they're skipping structure, being vague about output format, or changing five things at once and never learning which one helped.

This article walks through the concrete changes that move the needle: how to restructure a prompt, how to reduce ambiguity the model has to guess around, and how to set up a lightweight feedback loop so you actually know when a prompt got better or worse.

Start With Structure, Not Wording

A common mistake is polishing sentence-level wording before the prompt has any structure. Structure matters more than phrasing. A well-structured prompt separates:

Use delimiters (XML tags, triple backticks, or headers) to separate these sections. Models handle structured prompts far more consistently than dense paragraphs where instructions and data are mixed together.

You are a technical editor reviewing API documentation.

Task: Rewrite the text below for clarity. Keep all technical terms accurate.

Constraints:
- Max 150 words
- No marketing language
- Preserve code examples exactly

<input>
{{document_text}}
</input>

Output as markdown with a "Summary" heading followed by the rewritten text.

This structure alone fixes a large share of inconsistent outputs, because the model no longer has to infer where instructions end and content begins.

Remove Ambiguity Before Adding Complexity

If a prompt produces inconsistent results across runs, the first thing to check isn't the model — it's whether the instructions leave room for interpretation. Common sources of ambiguity:

A useful test: read your prompt as if you know nothing about the task. Anywhere you'd need to guess, the model is guessing too.

Use Examples, But Choose Them Deliberately

Few-shot examples improve reliability, but only if they're representative of the range of inputs you'll actually see. Two or three examples that only cover the easy case will teach the model the easy case — including the failure modes for harder inputs.

Good practice:

If you don't have real examples yet, write a couple of intentionally imperfect ones to show what not to do, alongside a correct one. Negative examples close gaps that positive-only examples leave open.

Separate Reasoning From Final Output

For tasks that need multi-step thinking — analysis, planning, debugging — ask the model to reason through the problem before producing the final answer, and clearly separate the two in the output. This reduces errors that come from the model jumping straight to a plausible-sounding answer.

First, list the key constraints from the input.
Then check each option against those constraints.
Finally, output your recommendation under a "## Answer" heading.
Keep the reasoning under "## Analysis" separate from the final answer.

If you're building this behind an API rather than a chat interface, this pattern also makes it easy to parse just the final section programmatically and discard the reasoning trace.

Test Changes Like Code Changes

The biggest improvement most teams see isn't a new technique — it's treating prompts like code and testing them like code. Concretely:

  1. Keep a fixed set of test inputs that represent your real use cases, including tricky ones.
  2. Change one variable at a time — wording, structure, or examples — not all three together.
  3. Log the output for every version so you can compare, not just remember impressions.
  4. Check for regressions, not just improvements on the case you were fixing. A change that fixes one prompt often breaks another.

If you're calling a model through an API rather than a chat UI, this is easier to automate. A minimal test harness just loops over your input set and calls the API with each prompt version:

const inputs = ["case1", "case2", "case3"];

for (const input of inputs) {
  const res = await fetch("https://api.subtoapi.app/v1/messages", {
    method: "POST",
    headers: {
      "Authorization": `Bearer ${process.env.SUBTOAPI_KEY}`,
      "Content-Type": "application/json"
    },
    body: JSON.stringify({
      model: "claude-3-5-sonnet",
      max_tokens: 500,
      messages: [{ role: "user", content: promptTemplate(input) }]
    })
  });
  console.log(input, await res.json());
}

If your team already has Claude access and wants a stable HTTPS endpoint for this kind of iteration — with usage metadata per key so you can see which prompt version is costing more tokens — that's exactly what SubToAPI (/pricing) sets up: application API keys, streaming, and tool use without managing separate provider accounts per project. The quickstart at /docs/quickstart covers the setup in a few minutes.

Adjust for the Task Type

Not every task benefits from the same techniques:

Applying a rigid structure to a creative task, or leaving a data-extraction task loosely worded, is a common reason "prompt engineering" feels inconsistent — the technique doesn't match the task.

FAQ

What's the single fastest way to improve a prompt? Add explicit output format and constraints. Vague instructions produce vague or inconsistent results far more often than the wording itself is the problem.

Do I need few-shot examples for every prompt? No. Simple, well-defined tasks often work fine with zero-shot instructions. Add examples when output format or edge-case handling is inconsistent across runs.

How do I know if a prompt change actually helped? Run it against a fixed set of test inputs before and after the change, including edge cases, and compare outputs directly rather than relying on a single run or impression.

Turn your Claude access into an HTTPS API

SubToAPI gives you application API keys, streaming, tool use and usage insights on top of your existing Claude access — set up in minutes.

Start free  Read the quickstart →