How to Stop Your Support Agent From Behaving Inconsistently
For AI engineers building customer support agents · Based on Bri's Production Prompt Engineering Method
// TL;DR
AI engineers building customer support agents can use Bri's Production Prompt Engineering Method to eliminate wrong escalations, over-caution, and drifting response length. The method replaces prohibitions like 'avoid escalating' with decision criteria, declares exact output shapes in a reply tag, injects account data at runtime via the harness, and audits accumulated patches for conflicts — all validated with eval tests that make real API calls. Use it when your support agent resolves things it should escalate, refuses tasks it can handle, or gives verbose, inconsistent answers to simple account questions.
Why does my support agent resolve disputes it should escalate?
Because a defensive instruction like 'avoid escalating unless absolutely necessary' signals urgency and overrides your explicit escalation rule. The strong prohibitive word tells the model this is the top priority, so it fills in wrong behavior — resolving billing disputes itself instead of handing them to a human.
The fix is Decision Criteria over prohibitions. Delete the avoidance instruction and replace it with a calm, two-sided rule: Escalate when the issue is a billing dispute. Continue resolving when the issue is a general product question. Now the agent evaluates neutrally, without a strong-word signal distorting its decision. This is the single highest-leverage change most support-agent prompts need.
How do I make account answers short and consistent?
Declare the exact output. Support agents drift into verbose, inconsistent answers because there's no declared shape — sometimes a paragraph, sometimes a bullet list, sometimes wrong. Add a `
While you're in there, reformat the whole prompt with HTML-style tags — `
How do I handle account IDs and live plan data?
Never hard-code them. Account IDs, plan names, billing status, and pricing change from user to user and run to run, so they must be injected at runtime by the harness as variables. Your static prompt should contain only stable instructions and reference variables like `{{account_plan}}` — never a literal plan name baked into the text. This is No Hard-Coded Dynamic Data, and it stops the agent from confidently citing stale account details.
Similarly, if the agent computes anything deterministic — a proration amount, a renewal date, a remaining balance — offload it. Compute it in the harness or expose a tool, then pass the result back. LLMs are unreliable at math and lookups, so this eliminates a whole class of wrong-number errors.
How do I audit a support prompt with months of patches?
Run a patch audit. Support prompts accumulate patches fast — every angry ticket becomes a new 'always' or 'never' rule. For each patch, ask: is it still relevant, does it conflict with another instruction, and can you name the specific failure it prevents? If you can't name the failure, cut it first. Resolve conflicting pairs by keeping one. Remove stale instructions whose root cause — say, a fixed billing pipeline bug — no longer exists.
Do all of this behind eval tests. Set up a suite that makes real API calls against representative tickets — a billing dispute, a plan question, an authentication edge case — and record what passes before you touch anything. After each change, re-run the suite multiple times, since model calls vary, and confirm the agent escalates correctly, answers concisely, and stays consistent across runs.
What about balancing when to escalate versus resolve?
Frame both costs. If your prompt only says escalation is expensive (ties up a human), the agent will under-escalate. If it only says wrong resolutions are dangerous, it'll over-escalate. State both: Escalating a resolvable question wastes agent time; resolving a dispute you shouldn't creates a compliance risk. Balanced trade-off framing keeps the agent from reflexively drifting in one direction.
Next step: Pull your current support prompt, set up an eval suite with five representative tickets, and run the patch audit and prohibition rewrite before touching anything else. Verify improvement against your baseline, not your gut.
// FREQUENTLY ASKED QUESTIONS
Why does my support agent refuse to answer questions it clearly can handle?
That's over-caution, caused by defensive instructions like 'never guess' or 'avoid making claims' that the agent treats as top priority. Rewrite them as decision criteria stating when to answer and when to defer. Remove urgency words entirely. Newer models are especially prone to this because they abstain rather than guess when instructions push them defensive.
How do I stop my agent from citing outdated plan or pricing info?
Remove all hard-coded account and pricing data from the prompt and inject it at runtime via the harness as variables. The static prompt should reference placeholders, not literal values. This ensures the agent always uses current data and never confidently repeats stale details baked into the prompt months ago.
Should I add a new rule every time a support ticket goes wrong?
No — that's how prompts accumulate conflicting patches. Apply Cleanup First: check whether the failure is caused by an existing prohibition or missing decision criteria before adding anything. Most support failures are fixed by rewriting a prohibition or declaring output, not by piling on a new 'always' rule that will contradict the others.