| Generation | Author still writes | System decides |
|---|---|---|
| Decision tree / IVR | Every path and every reply | Nothing |
| Intent classifier | The reply for each intent | Which intent this is |
| LLM chatbot | Instructions and knowledge | The wording of every reply |
| Agent | Tools, guardrails, goals | Which actions to take, in what order |
Read down the last column and the trajectory is a steady transfer of decisions from design time to run time. Read down the middle column and you see what each generation freed its authors from - and each step also removed a place where behaviour could be inspected before it happened.
What each step actually fixed
- Trees → intents: callers stopped having to phrase things the way the tree expected.
- Intents → LLM: the long tail stopped falling off a cliff. An unanticipated question got a reasonable answer instead of "I did not understand that".
- LLM → agent: the system could finally *do* something. A chatbot that can explain your booking policy but not make a booking has moved the work, not removed it.
What each step broke
Every generation traded inspectability for coverage. A decision tree can be audited exhaustively. An intent classifier can be evaluated on a labelled set. An LLM chatbot can only be spot-checked. An agent has a combinatorial action space and cannot be exhaustively anything.
This is why the engineering emphasis in agent products sits where it does: not on making the model better, but on constraining consequences - narrow tools, permission scoping, approval gates, and traces good enough to reconstruct a decision after the fact.
If the process is fully specified, has no exceptions and never changes, a decision tree is cheaper, faster and auditable. The generations are a menu, not a ladder.