Introduction
You build a chatbot. You test it once, it works. You push it live – and within a week, users are complaining. The bot forgets their names. It answers questions it was never supposed to touch. And somehow it seems to remember every detail from last Tuesday’s session with a different user.
These are not random failures. They follow a pattern. Most conversational AI problems trace back to one of three recurring design mistakes: assuming the AI retains memory across sessions when it does not, writing a system message that tries to do too much at once, and skipping edge-case handling altogether.
Each mistake is easy to make and equally easy to fix. This article covers all three – what the mistake looks like in practice, why it happens, and a concrete correction you can apply immediately.
The 3 Mistakes at a Glance
| Mistake | What goes wrong | The fix |
|---|---|---|
| 1. Assuming cross-session memory | Bot forgets users between sessions unexpectedly | Design each session to collect the context it needs from scratch |
| 2. Over-engineering the system message | Inconsistent tone, blurred persona, competing instructions | Cover only role, tone, scope, and constraints – nothing else |
| 3. Skipping edge-case handling | Bot answers out-of-scope questions and erodes trust | Add a clear redirect script for off-topic inputs and test it |
Mistake 1: Assuming the AI Remembers Previous Sessions
What it looks like
You design a customer support bot, test it successfully in one session, and expect it to remember a user the next time they return. The user types their name and order number. The second session, they type a greeting and expect the bot to pick up where they left off.
It does not. The second session starts completely fresh – no user name, no prior order, no context at all.
Why it happens
Base AI models have no memory between sessions. Each new conversation begins with an empty context window. The model has access only to what is in the current session – the system message, the current exchange, and whatever the user types now. There is no carry-over.
This is one of the most important distinctions in conversational AI design. As covered in Chapter 5, base AI models are text-only systems with no tool access and no persistent memory. Tool-connected AI systems are different. Depending on their configuration, they may store user preferences, session summaries, or past interaction records that can be retrieved in future sessions. But that capability requires additional infrastructure. You cannot assume it on a base model.
Designs that blur this distinction produce experiences that feel broken to users – not because the prompt was poorly written, but because the design assumed a capability the system does not have.
The fix
Be explicit about what your session can and cannot remember. If your use case requires continuity across sessions – returning users who expect to be recognized – you need a tool-connected system configured to store and retrieve that context.
For base model flows, redesign each session to collect the context it needs from scratch. A simple opening prompt that asks the user for relevant details often resolves the issue.
| Bot (Turn 1) | Welcome back! How can I help with your order today? |
| User | Hi, it’s me again – order 78421. |
| Bot (Turn 2) | Hello! How can I assist you today? (Loop. No context. No progress.) |
| Bot (Turn 1) | Hi! I’m here to help with your order. Could you share your name and order number so I can look up the details? |
The revised opening does not assume anything. It collects what it needs. This works reliably on base models and scales to tool-connected systems without breaking.
Mistake 2: Over-Engineering the System Message
What it looks like
You write a 400-word system message. It covers every possible scenario, lists 15 behavioral rules, and includes three separate tone instructions – one for frustrated users, one for happy users, and one for new users. You push it live and the bot feels generic, hesitant, and inconsistent across turns.
Why it happens
A system message with too many instructions or conflicting directives tends to produce inconsistent outputs. When the model has to weigh competing rules, responses often become awkward, the persona starts to blur mid-conversation, and the tone shifts in ways you did not intend.
This is not a model failure. It reflects a design decision – putting too much into a single instruction set rather than structuring the persona clearly and handling edge cases separately.
There is also a practical constraint: as covered in Chapter 5, every token in a session occupies space in the context window. A long system message reduces the space available for the actual conversation. In longer sessions, this contributes to the context drift you were already trying to prevent.
The fix
Write the leanest system message that covers four components and nothing more: role, tone, scope, and constraints. Each component does a specific job.
| Component | What it defines | Keep it short |
|---|---|---|
| Role | The identity and function of the AI in this conversation | One sentence. Name, type, product. |
| Tone | How the AI communicates – formality, energy, language style | One to two adjectives. No contradictions. |
| Scope | The topics and tasks the AI will engage with | Specific tasks only. Not a department list. |
| Constraints | Topics to decline or redirect, and how to do so | One redirect script. Clear and reusable. |
| System message | You are a helpful AI assistant for ShopEasy. Be friendly. Be professional. Be concise but thorough. If the user is upset, be empathetic but firm. If the user is happy, be warm. Handle returns, exchanges, billing questions, technical support, product recommendations, shipping, complaints, and general inquiries. Do not answer questions about competitors. Do not be rude. Do not make promises. Escalate when needed. Always end with a question. Never end with a question if the issue is resolved… |
| System message | You are Aria, a calm and direct support assistant for ShopEasy. Help users with returns, exchanges, and order status. For technical issues or billing questions, say: “That’s outside what I can help with here – please contact our support team at help.shopeasy.com.” |
The revised message is shorter, internally consistent, and provides a single redirect script that works across multiple edge cases. If a rule only applies to one rare scenario, handle it with a targeted grounding prompt when that scenario occurs – do not add it to the system message upfront.
Mistake 3: Skipping Edge-Case Handling
What it looks like
You design the conversation for the expected path – users who ask exactly what you anticipated. You test it, it works, and you ship it. Three days later, a user asks your returns bot to write a product description. The bot complies in full. Another asks for pricing comparisons with a competitor. The bot engages enthusiastically.
Why it happens
Real users ask unexpected questions. Without explicit constraints in the system message, the model will often attempt to answer out-of-scope requests rather than redirect. This is not the model making an error – it is responding helpfully to what it was asked. The missing instruction is yours.
Edge cases are also the category of problem most likely to surface in real use rather than in testing. You test the expected path. Users find the unexpected ones.
The fix
Add a short constraints section to your system message that provides a clear redirect script for out-of-scope inputs. The script should be reusable – a single phrasing that works across multiple off-topic categories so the model does not need separate rules for each.
Then test the flow specifically with off-topic questions to confirm the redirect works. This is a separate test from your standard flow test and should be run independently.
| User | Can you also write a product description for our homepage? |
| Bot | Sure! Here’s a polished product description for your homepage… (Scope drift. No redirect.) |
| System message addition | For any request outside returns, exchanges, or order status, say: “That’s outside what I can help with here. For [topic], please contact our support team or visit the Help Center.” |
| User | Can you also write a product description for our homepage? |
| Bot | That’s outside what I can help with here. For copywriting, you’d want to reach out to your marketing team or visit the Help Center. |
The redirect is graceful, on-brand, and scalable. The same script handles pricing questions, competitor comparisons, API queries, and any other out-of-scope topic without additional rules.
The Pattern Behind All Three Fixes
Look at the three corrections together and you will notice the same structure each time: identify the assumption, replace it with a deliberate design choice, and test to confirm the fix holds across the turns where the problem appeared.
The underlying cause of each mistake is a gap between what the design assumes the model can do and what the model actually does by default. Base AI models do not retain memory, do not filter by default, and do not self-limit their scope unless you instruct them to. The fixes are not clever workarounds – they are the baseline design decisions that should have been made from the start.
Fixing one of these mistakes does not guarantee the others will not appear. Apply all three corrections and test each one before deploying.
Key Takeaways
- Base AI models have no memory between sessions. Each session starts from scratch. If your design requires cross-session continuity, you need a tool-connected system – not a base model.
- A focused system message covering four components – role, tone, scope, and constraints – tends to produce more consistent persona behavior than a long list of rules. Competing instructions reduce coherence.
- Edge-case handling is not optional. Real users ask unexpected questions. Without a redirect script in the system message, the model will often attempt to answer out-of-scope requests rather than decline.
- Test each fix separately. The expected-path test confirms the flow works. The edge-case test confirms the redirect works. Both are required.
- These are design decisions, not prompting tricks. The fixes described here reflect how base AI models work by default. Applying them closes the gap between design assumptions and actual model behavior.

