DEV Community

Ahmed El Otmani
Ahmed El Otmani

Posted on

AI Is Bad at Disagreeing. I Spent Weeks Trying to Fix That.

A few months ago I started building a tool that generates debate videos between two brands. The idea was simple: pick two rivals, pick a topic, get a short video where they actually go at it.

The first version was terrible. Not in the way you'd expect.

The voices sounded fine. The video quality was fine. The problem was that the two AIs refused to disagree with each other. Coke would make a point, and Pepsi would respond with something like: "That's a great perspective, and while I understand where you're coming from, I think we bring a different but equally valid point of view."

Two brands. One debate. Zero conflict.

I had built the world's most polite argument generator.

Why AI is bad at arguing

Modern language models are trained, heavily, to be agreeable. RLHF — the process that teaches them to be helpful — also teaches them to defuse. When you ask an AI to take a position, it hedges. When you ask two AIs to disagree, they find common ground. The training goal is a useful assistant, not a compelling adversary.

You can see this in ChatGPT, Claude, Gemini — any of them. Ask them to argue with each other and within two turns they're writing joint statements.

This is a feature for assistants. It's a bug for entertainment.

What doesn't work

My first instinct was prompt engineering. Tell the model: "You are aggressive. You never agree. You attack the other side's points."

It works for about one exchange. Then the model drifts back to consensus. The training is stronger than the instruction. You end up with a model that opens aggressively and then quietly de-escalates. Watch any AI debate long enough and you'll see this — the first line is sharp, the fifth line is "we're really saying the same thing."

The second instinct was to make it worse: "You hate the other side. You think they are fundamentally wrong." This produces genuinely offensive output for one line, then the model course-corrects even harder into olive-branch territory. It's like it feels guilty.

The third instinct, which a lot of people try, is to raise temperature and hope randomness produces conflict. What it actually produces is nonsense. Random isn't disagreement. Random is incoherence.

What does work

The thing that finally worked was architectural, not prompted.

Instead of giving one model "both sides" and asking it to generate a debate, I split the two debaters into completely separate contexts. Each side never sees the other's instructions. Each side has its own persona, its own priors, its own goals, and — critically — never sees the "debate framing." As far as each side knows, it's not in a debate. It's just answering a question from a specific worldview.

Then I orchestrate the turns externally. Side A speaks. Side B gets Side A's transcript as a statement made by a rival that is wrong, and is asked to respond in character. Not "debate them" — respond to a rival's wrong statement.

That framing — "the other side is wrong, here is what they said, your turn" — does what "please disagree" can't. It sidesteps the agreeable training because the model isn't being asked to argue. It's being asked to defend its own position against an attack. That's a much more natural posture for a language model.

The disagreement becomes real, because the two sides genuinely don't know each other exists as negotiating partners. They think they're doing monologues.

The persona problem

Even with split contexts, another problem emerged: both sides sounded identical.

Two AIs arguing, even aggressively, tend to use the same sentence structures, the same rhetorical moves, the same vocabulary. It's all one model underneath. Without distinct voices, even a good disagreement reads like one person talking to themselves.

The fix was to build character sheets deeper than "you are brand X." Each side got a tone (sarcastic, earnest, condescending), a rhetorical style (data-driven, emotional, dismissive), a set of taboo moves (never concede, never apologize, never ask questions), and a few character tics (favorite phrases, what they always come back to). This is more like writing a character in fiction than prompting an assistant.

Once the personas were real, the debates felt like debates. Not because the AI was smarter — because the two outputs stopped being the same AI in two costumes.

Pacing, interruptions, and why a debate isn't a podcast

The last thing I got wrong, for a long time, was pacing.

My early debates sounded like podcasts. Both sides spoke in full paragraphs, finished their points, then the other side responded. It was technically a debate. It was also unwatchable.

Real debates are messier. People interrupt. They trail off. They restart. They repeat themselves when they're heated. They don't finish sentences when they're confident the other side already gets it.

I had to add all of this manually. Interruption tokens. Trail-offs. Intentional repetition. Incomplete sentences. None of it happens naturally from a language model — models are trained to complete things, not abandon them.

Once the pacing felt human, the debates stopped sounding like AI, even when the content was obviously AI-written. Pacing is half the performance.

What this taught me about LLMs

A few things, in descending order of how much they've stuck with me:

Models resist what they're trained against, no matter what you prompt. If you need behavior that contradicts RLHF, prompting alone won't get you there. You have to restructure the problem so the model isn't being asked to violate its training — it's being asked to do something adjacent that produces the behavior you want as a side effect.

Character is architectural, not prompted. You can't "be" a character by being told to be. You become a character by having a different context, different goals, different constraints than everyone else in the scene.

The interesting problems in AI products aren't the AI problems. Everyone can wire an LLM to a video generator. The thing that made this project actually work was understanding debate structure, pacing, persona construction, and interruption dynamics. The AI was the easy part.

The tool

I ended up shipping the thing — it's called DebaterX, it lives at debaterx.app — and it does roughly what I set out to build. You upload two brands or mascots, pick a topic, pick a tone, and get a short debate video back. Ronald McDonald vs the Burger King on fries. Netflix vs YouTube on who killed TV. Coke vs Pepsi on whatever you want them to fight about.

Most of the engineering went into the problems above, not the plumbing. That's true of most AI products now, I think — the plumbing is commodity, and the craft is everywhere else.

If you're building something in the generative space and running into the "my AI won't disagree / won't commit / won't take a position" wall, the answer is almost never a better prompt. It's usually a better architecture around a worse prompt.

Which, honestly, is a more interesting place to be.

Top comments (0)