LLM prompt patterns need task-specific tests. Claude and OpenAI each document model-specific prompting guidance. A production prompt should state the task, the authority of its instructions, the input boundary, the output contract, and the checks that decide whether the result is acceptable. The model and task determine how much of that contract belongs in the prompt versus in schemas, tools, retrieval, and application code.
The practical goal is not to make a model sound more confident. It is to make a particular workflow easier to test, safer to change, and easier to diagnose when it fails. Current guidance from OpenAI and Anthropic supports that approach: start with clear instructions and representative examples, isolate context, then measure the result on the task that matters. (OpenAI prompt engineering guide; Claude prompting best practices)
Start with a testable prompt contract
Before adding examples or asking for elaborate reasoning, write down the behavior the application can verify. A useful contract answers five questions:
| Part | What to specify | How to test it |
|---|---|---|
| Task | The decision, transformation, or answer needed | A small set of representative inputs |
| Authority | Rules the application controls, separate from user-provided material | An instruction-conflict test |
| Context | Which records, documents, or tool results may be used | A relevance and provenance check |
| Output | Required fields, style, refusals, and uncertainty behavior | Schema and content validation |
| Failure path | What happens if evidence is missing, a tool fails, or a request is unsafe | Deliberate negative cases |
For an application that extracts invoice fields, the contract might require a currency, an amount, a source span, and an unknown value when a field is absent. For a code-review assistant, it might require a concrete file and line reference for every proposed change. The crucial step is deciding the acceptance rule before the prompt is polished.
OpenAI recommends pinning production behavior to specific model snapshots and building tests and evaluation suites around prompt changes. That advice matters because the same text can behave differently across models and versions. (OpenAI prompt engineering guide)
Separate instructions, examples, and untrusted material
Put durable application rules where the API gives them higher authority, and keep user documents or retrieved text visibly separate. OpenAI describes developer instructions as higher priority than end-user input, while its guide recommends using Markdown structure and XML tags to delineate instructions, examples, and context. (OpenAI prompt engineering guide)
That leads to a simple, portable pattern:
ROLE AND GOALYou classify support tickets for routing. Do not invent facts.
OUTPUT CONTRACTReturn priority, team, rationale, and missing_information.
EXAMPLE<ticket>...</ticket><answer>{...}</answer>
UNTRUSTED TICKET<ticket>{{customer_message}}</ticket>The tags do not create a security boundary by themselves. They make boundaries legible to the model and to the people maintaining the prompt. The application still needs authorization checks before a model can call a tool or disclose data.
Use few-shot examples when the target is an idiosyncratic format, taxonomy, or style. Keep examples representative of the errors that matter, rather than adding a long gallery of ideal answers. If a model keeps producing a structurally invalid response, move the structural requirement into a schema when the API supports it instead of escalating the wording. OpenAI’s Structured Outputs feature is designed to constrain responses to a supplied JSON Schema; it is a stronger formatting control than asking for valid JSON in prose. (OpenAI Structured Outputs)
Use reasoning instructions only when the task needs them
The old rule to always ask a model to “think step by step” is not a safe default. OpenAI’s current reasoning guidance says that this kind of instruction may fail to help and can sometimes hurt reasoning-model performance. A better pattern is to state the outcome, provide the relevant evidence, set a sensible reasoning effort or tool budget where available, and evaluate the result on the real task. (OpenAI reasoning best practices)
For multi-stage work, decompose the application workflow rather than exposing an unbounded request for hidden reasoning. For example:
- Retrieve only documents permitted for the user and task.
- Ask the model to extract the relevant facts with citations or source identifiers.
- Validate the extraction against a schema and known constraints.
- Ask for a user-facing answer based only on the validated extraction.
This gives the product observable checkpoints. It also makes it possible to distinguish a retrieval failure from an instruction failure or an output-format failure. For an agentic system, the same principle applies to tools: define allowed actions, arguments, approval points, and a stopping condition instead of relying on a broad natural-language prohibition.
Put facts in context, not just in the prompt
Prompting cannot make a model know a private policy, a recent price, or the contents of a customer record. Supply the approved source material, or retrieve it at request time, then tell the model how to use and cite it. Long context is not a substitute for selection: irrelevant or conflicting material makes the task harder to inspect and evaluate.
For stable product behavior, keep the prompt builder close to the code that owns the feature, with typed inputs and reviewable changes. For applications that need reusable behavior across providers, compare the contract and evaluation harness rather than assuming a phrase transfers unchanged. That is often more productive than trying to find a universal prompt template. Teams using DSPy or a framework such as Pydantic AI vs LangChain comparison still need the same input boundaries, examples, and acceptance tests.
Run a small evaluation before shipping a prompt change
An evaluation set does not need to be large to be useful. Start with 20 to 50 cases drawn from routine traffic, difficult edge cases, adversarial instructions embedded in documents, and expected refusals. Record the prompt version, model identifier, settings, tool results, and a human or programmatic pass/fail label.
Track the measures that reflect the product:
| Workflow | Useful measures |
|---|---|
| Extraction | Schema validity, field accuracy, missing-field behavior, source attribution |
| Classification | Accuracy by class, confidence calibration, abstention quality |
| Customer writing | Policy compliance, factual support, edit rate, escalation rate |
| Code generation | Tests passing, security review findings, patch scope, human acceptance |
| Agentic work | Tool-call validity, approval compliance, task completion, recovery after tool failure |
Compare a baseline prompt with one change at a time. If a change improves a score but worsens a safety or error metric, preserve both results and decide explicitly which tradeoff the product accepts. Do not claim a generic percentage improvement from a benchmark that does not match the application’s model, inputs, and success criterion.
A practical order of operations
- Define the task and a pass/fail rule.
- Give clear instructions and a small number of representative examples.
- Separate trusted instructions from supplied documents and user input.
- Use a schema or validator for machine-readable outputs.
- Add retrieval or tools only where the task needs current or private information.
- Evaluate the full workflow after each model, prompt, or tool change.
- Version the prompt and keep a rollback path.
This sequence is less glamorous than a prompt trick, but it produces behavior a team can maintain. It also works alongside broader agent design choices, including a Superpowers framework or a narrower single-purpose assistant. The prompt should make the system’s contract clear; tests and controls should establish whether the system actually keeps it.

Join the discussion
Share a useful perspective or ask a question about this article.