Voice AI agent lied to customers and mixed up callers — the developer found the cause wasn't the prompt
Three months in production, and the voice AI agent managed to lie to a customer about a nonexistent administrator, pass off ordinary speech synthesis as a "cloned voice" for a month, and treat all callers as the same person. The developer concluded the problem wasn't the prompts but the architecture of the code around the model. And all of it ran on an entirely Russian stack. The developer of a business voice AI agent documented the pitfalls from three months in live conditions: the agent lied, confused customers and faked a voice in a way nobody intended. The takeaway: most "strange behavior" is not model hallucination but architectural holes in the surrounding code. They can be fixed, but not with a prompt.
AI-processed from Habr AI; edited by Hamidun News
The developer of a voice AI agent for business spent three months in live conditions and documented every pitfall: the agent lied, mixed up customers and faked a voice in a way that was nothing like the original plan.
The agent's three biggest failures
In its first months in production, the voice agent distinguished itself several times.
First incident: the agent told a customer that "administrator Alexey" would call back in an hour. No Alexey existed. The agent generated the name from the context of past calls, blending fragments of dialogues. The customer waited and filed a complaint.
The second bug was more serious: the agent started treating all incoming callers as the same person. The session wasn't reset between calls, so memory of the previous customer leaked into the next conversation. Technically, this is the classic problem of shared context without explicit isolation.
- The agent addressed a new customer by the previous caller's name
- It remembered details of someone else's order and offered to "continue checkout"
- It confirmed nonexistent agreements from past sessions
- It apologized for a "delay" that never happened, confusing the current call with the previous one
The third case took the longest to detect. For a full month, the agent used ordinary TTS synthesis while introducing itself to customers as a "cloned voice." Cloning failed to connect because of a configuration error, but it threw no exception anywhere. It simply degraded silently to standard synthesis.
Why the prompt doesn't fix it
The first intuitive reaction is to add lines to the prompt: "don't invent names," "don't remember previous callers," "always check whether a voice profile exists." The author tried it and explains why it doesn't work systematically.
A language model doesn't distinguish between a prohibition in the prompt and data in the session context. If the history of a previous call physically lands in the context window, the model uses it. An instruction can't forbid what is already in memory.
"A prompt is a recommendation, not an architectural barrier.
The barrier must be in code."
The solution is to isolate state at the infrastructure level: a hard context reset between calls, a check for a voice profile before the call starts (not during it), and explicit validation of every fact before it is spoken.
The Russian stack and its quirks
The author works entirely with domestic tools: a Russian LLM, a Russian TTS provider and telephony through a domestic operator. This brings specific constraints.
Documentation for a number of these tools is incomplete or lags behind the API. That is why the voice cloning error stayed invisible: when no voice profile was present, the provider returned no error. It quietly delivered standard synthesis with a 200 status code. The substitution could only be detected by analyzing the output audio or explicitly checking the response metadata.
Practical lessons from three months of experience:
- Check that all resources (voice, profile, session) exist before the operation starts, not during it
- Log not only errors but also "successful" responses: silent degradation is more dangerous than an outright crash
- Isolate the agent's state between sessions in code, not in the prompt
- Test the audio output, not just the text log: synthesis and a clone sound different
What this means
Voice AI agents break differently in production than chatbots do: errors are spoken aloud, and the customer hears them in real time and can't reread or ignore them. That makes architectural discipline critical.
Most "strange behavior" in a voice agent is not model hallucination but architectural holes in the code around it. It can be fixed. But not with a prompt.
- Nov 1, 2026Local models lose to Opus and Codex: 0.21 on a MacBook versus 1.00 for Codex
- Nov 1, 2026Adobe's EditAgent judge picks a usable edit 81.3% of the time, versus 74.8% for EditScore
- Nov 1, 202616 models tested on 7 search tools: Exa averaged 10.5 out of 14, SearXNG about 3
- Nov 1, 2026Google's StreamVibe video agent beats other models by 10.7% on response timing and quality
Key Questions Answered
What are the key details on The agent's three biggest failures?
In its first months in production, the voice agent distinguished itself several times. First incident: the agent told a customer that "administrator Alexey" would call back in an hour. No Alexey existed. The agent generated the name from the context of past calls, blending fragments of dialogues. The customer waited and filed a complaint. The second bug was more serious: the agent started treating all incoming callers as the same person. The session wasn't reset between calls, so memory of the previous customer leaked into the next conversation. Technically, this is the cla
Why the prompt doesn't fix it?
The first intuitive reaction is to add lines to the prompt: "don't invent names," "don't remember previous callers," "always check whether a voice profile exists." The author tried it and explains why it doesn't work systematically. A language model doesn't distinguish between a prohibition in the prompt and data in the session context. If the history of a previous call physically lands in the context window, the model uses it. An instruction can't forbid what is already in memory. "A prompt is a recommendation, not an architectural barrier. The barrier must be in code." Th
What are the key details on The Russian stack and its quirks?
The author works entirely with domestic tools: a Russian LLM, a Russian TTS provider and telephony through a domestic operator. This brings specific constraints. Documentation for a number of these tools is incomplete or lags behind the API. That is why the voice cloning error stayed invisible: when no voice profile was present, the provider returned no error. It quietly delivered standard synthesis with a 200 status code. The substitution could only be detected by analyzing the output audio or explicitly checking the response metadata. Practical lessons from three months o
Test Frontier LLMs & Autonomous Agents in One Workspace
Run Claude Opus 5.5, GPT-6, Gemini 3.1, and DeepSeek side-by-side in Nomad AI (nomadnet.ai) — unified model routing, deep research, and multimodal workflows under one subscription.
The AI world, distilled — once a week
Seven stories that actually mattered, hand-picked. No noise, no reposts, no press releases.
Done! Check your inbox for a confirmation.