One problem I ran into while building a dialectical conversation engine was repetition.
When a user repeated or rephrased an earlier question, the assistant sometimes started the argument all over again. It would repeat points that had already been established instead of moving the discussion forward.
I fixed this by adding explicit conversation-state tracking.
Tracking the Conversation in 3 Levels
The engine now keeps track of three layers:
Level 1 — Original premise
The user’s starting question or claim.
Level 2 — Established position
The assistant’s current conclusion, including any concessions that have already been accepted.
Level 3 — Unresolved objection
The current issue that still needs to be examined.
This gives the assistant a clear sense of where the argument currently stands.
Detecting Repeated Questions
When the user repeats, quotes, or rephrases something that has already been answered, the system checks whether the core claim has already been addressed.
If it has, the assistant doesn’t restart the explanation.
Instead, it follows a simple rule:
A repeated question should trigger advancement, not repetition.
The assistant identifies the last substantive conclusion and moves to the next logical implication or objection.
Example: Biological Naturalism
I tested this using questions about phenomenal consciousness.
The system first establishes that behavioral criteria have an epistemic limitation: observing behavior alone doesn’t necessarily tell us whether a system has phenomenal experience.
Once that point is established, repeating the same objection shouldn’t reset the conversation.
Instead, the engine moves to the deeper question:
What biological causal properties are actually constitutive of consciousness?
From there, the discussion can advance into the question of substrate independence and whether biological causal properties can be meaningfully distinguished from equivalent computational organization.
The Result
After implementing the guard, repeated epistemic qualia questions no longer caused the assistant to loop.
It recognized the previous concession, treated it as established ground, and moved directly into the next unresolved issue.
The main lesson was simple:
Good conversational memory isn’t just remembering what was said. It’s remembering where the argument is.
Once the system knows what has already been established and what remains unresolved, repetition becomes an opportunity to advance the discussion rather than restart it.
