Begin with the problem
A normal model call answers once and stops. An agent exists for goals that may require observing what happened, choosing another action, and repeating safely.
fixed rules → automation → workflow → LLM call → tools → agent loop
What you will learn
- Trace the path from fixed rules to workflows, LLM applications, tool use, and agents.
- Recognize the problem that requires a dynamic reason–act–observe loop.
- Compare a predictable workflow with a task whose next step depends on new evidence.
- Decide when simpler software is safer, faster, and cheaper than an agent.
Current real-system grounding: Google’s current Agents overview documents managed agent harnesses with tools, loops, context management, sandboxed execution, and multi-step research.
These official links document available product features. They do not reveal every provider’s private implementation, hidden reasoning, default setting, or internal limit.
1. The problem this module solves
You’ve completed courses on LLMs, Prompt Engineering, Generative AI, and RAG. This course starts by asking a different question: why wasn’t RAG, or a well-prompted LLM application, already enough? This module traces the real evolution that led to AI Agents — so that by the time Module 2 formally defines “Agent,” you already understand exactly what gap it fills.
2. Where This Story Starts — Traditional Software
Traditional software: EXPLICIT, hand-coded rules.
if ticket.category == "billing":
route_to("billing_team")
elif ticket.category == "technical":
route_to("technical_team")
else:
route_to("general_queue")
Traditional software works well when the rules are known, finite, and stable. Its core limitation: it can only handle situations a human explicitly anticipated and coded for. A ticket that doesn’t cleanly fit any hand-coded category has no home.
3. Automation — Removing Manual Repetition, Not Manual Rules
Automation: a human still DEFINES every step, but a machine EXECUTES
them without manual intervention each time.
"Every night at midnight, back up the database, then email the
report to the ops team."
Automation removes repetitive human execution — but the logic is still entirely predetermined. Nothing about automation lets the system decide what to do; it only executes a fixed, pre-decided sequence, reliably, over and over.
4. Workflows — Structured, Multi-Step, Still Fixed
Workflow: a defined SEQUENCE of steps, sometimes with branching, but
the PATH options are all pre-designed by a human in advance.
New Employee Onboarding Workflow:
Step 1: Create email account
Step 2: Assign equipment
Step 3: IF department == "Engineering": grant repo access
Step 4: Schedule orientation
Step 5: Send welcome email
A workflow can branch — but every branch was > anticipated and explicitly coded ahead of time. It cannot handle “the new employee’s role doesn’t fit any predefined branch” without a human updating the workflow itself.
5. LLM Applications — Flexible Language, Still One Shot
LLM Application:
User Input
↓
LLM (single call)
↓
Response
This is, dramatically more flexible than any rule or workflow — the LLM can handle language it was never explicitly programmed for. But notice: it’s still fundamentally one shot. Ask it to “find our current Q3 revenue and compare it to last year,” and a single LLM call, with no tools, cannot look anything up — it can only generate plausible-sounding text from its own training data (a direct callback to your Generative AI course’s hallucination discussion).
6. Tool-Using LLMs — External Capability, Still No Loop (Yet)
Tool-Using LLM (single tool call):
User Input
↓
LLM decides to call ONE tool
↓
Tool executes
↓
Result -> LLM
↓
Response
This is a leap forward — the LLM can now check a real database, call a real API. But a single tool call still can’t handle “find the revenue, THEN compare it to last year’s figure, THEN check if it beats our forecast, THEN draft a summary” — a multi-step task requiring the system to decide again after seeing each result, not just once.
7. AI Agents — The Key Change: A Loop, Not a Single Call
AI Agent:
Goal
↓
Observe
↓
Reason / Decide
↓
Act
↓
Observe Result
↓
Decide Again
↓
...
↓
Goal Completed
This is the single most important idea in this entire course. An Agent doesn’t just call one tool and stop — it REPEATS the reason-act-observe cycle, using each new observation to inform its NEXT decision, until the actual goal is achieved. This loop is what every prior stage in this module’s story lacked.
Module 3 builds the complete mental model around this loop; Module 4 covers the loop mechanics in full depth.
8. Multi-Agent Systems — When One Loop Isn’t Enough
Single Agent -> sufficient for many tasks
Multi-Agent System -> multiple SPECIALIZED agents, each with their
own loop, COLLABORATING on a task too complex
or too broad for one agent's context and tools
to handle well
This is the final stage of this module’s evolution story — covered fully in Module 15, once you understand a single agent deeply first.
9. The Complete Evolution, In One Diagram
flowchart LR
A[Traditional Software<br/>fixed rules] --> B[Automation<br/>fixed execution]
B --> C[Workflows<br/>fixed branching sequence]
C --> D[LLM Applications<br/>one-shot, flexible language]
D --> E[Tool-Using LLMs<br/>one tool call]
E --> F[AI Agents<br/>real reason-act-observe LOOP]
F --> G[Multi-Agent Systems<br/>specialized agents collaborating]
10. A Real Developer Example — TechCorp’s Support System, Evolved
Watch the same underlying problem — handling a customer support ticket — get solved differently at each stage of this module’s evolution:
| Stage | Approach | What It Handles | What It Still Can’t Do |
|---|---|---|---|
| 1. Traditional software | Fixed if/else routing rules decide which team a ticket goes to | Tickets that cleanly match a known category | Anything a human didn’t explicitly anticipate and code for |
| 2. Automation | A nightly script auto-closes tickets already marked “resolved” | Reliable, repetitive execution of one fixed action | Adapting the logic itself — it never changes |
| 3. Workflow | A defined escalation sequence: Tier 1 → Tier 2 → Manager, with pre-coded branch conditions | Structured, multi-step routing along known paths | Any branch a human didn’t design in advance |
| 4. LLM application | An LLM drafts a reply to a ticket using natural language | flexible, human-like language handling | Looking up the customer’s actual, current order status |
| 5. Tool-using LLM | The LLM checks order status through a single tool call | One real, live lookup per request | A request needing several dependent steps, like “check the order, and if it’s late, check the shipping carrier’s API, and offer a discount if the delay exceeds 5 days” |
| 6. AI Agent | The system loops: checks order status → decides it’s late → calls the shipping tool → decides the delay exceeds 5 days → calls the discount tool → drafts the final reply | Multi-step tasks where each result informs the next decision | — (this is exactly the gap every earlier stage left open) |
The pattern to notice: every stage solves the previous stage’s specific limitation. Stage 6 isn’t “better” in some vague sense — it’s the first stage capable of handling a task whose next step depends on the outcome of the step before it.
11. How Is This Used in AI?
🤖 How Is This Used in AI?
Understanding this evolution directly shapes a important architectural decision every AI engineer makes early: is this problem actually complex enough to need an Agent’s loop, or would a simpler workflow, single tool call, or even traditional software solve it more reliably and cheaply? Module 26’s common misconceptions revisits this decision directly.
12. Common Mistakes
Incorrect idea: Assuming Agents are simply “better” than every earlier stage in this evolution.
Why it is incorrect: As shown directly throughout Sections 2-6, each stage remains appropriate for its own class of problem — Agents solve a specific gap (multi-step, dynamic decision-making), not a universal upgrade.
Incorrect idea: Skipping straight to “Agent” for a problem a simple workflow would solve just as well, more cheaply and reliably.
Why it is incorrect: As emphasized directly in Section 10, not every task needs a full reasoning loop.
Incorrect idea: Confusing “tool-using LLM” (Section 6) with an AI agent.
Why it is incorrect: A single tool call is NOT the same as the repeating loop from Section 7 — this distinction becomes critical in Module 2.
13. Limitations
- This module’s staged story is a real simplification for teaching clarity — real systems sometimes blend characteristics from multiple stages simultaneously
- “Agent” itself is not a single, precisely standardized industry term — Module 2 defines it carefully, but reasonable people build systems along a real spectrum
14. Quick Reference
flowchart TD
Q{Does the task need<br/>MULTIPLE dependent decisions,<br/>each informed by the<br/>previous result?}
Q -->|No, fixed rules suffice| R1[Traditional Software /<br/>Workflow]
Q -->|No, one LLM call suffices| R2[LLM Application]
Q -->|One tool call suffices| R3[Tool-Using LLM]
Q -->|Yes, dynamic,<br/>multi-step| R4[AI Agent]
Q -->|Too complex/broad<br/>for one agent| R5[Multi-Agent System]
15. Code — Classifying Where a System Sits on This Evolution
🎯 Target of this example: implement Section 10’s real developer example directly — a function that examines a system’s real behavioral description and classifies it correctly along this module’s evolution, from traditional software through to a real agent.
Example 1 — Simple
def classify_system(description: str) -> str:
"""A simplified classifier distinguishing where a system sits on
the traditional-software-to-agent spectrum, based on real
behavioral signals in its description."""
d = description.lower()
if "fixed rules" in d or "if/else" in d:
return "Traditional Software / Rule-Based"
if "predefined sequence" in d or "fixed steps" in d:
return "Workflow / Automation"
if "single llm call" in d:
return "LLM Application"
if "chooses tools dynamically" in d and "loop" in d:
return "AI Agent"
return "Unclear"
systems = [
"Uses fixed rules and if/else logic to route support tickets.",
"Runs a predefined sequence of steps to onboard a new employee.",
"Makes a single LLM call to summarize a document.",
"Chooses tools dynamically and repeats a reasoning loop until the goal is met.",
]
for s in systems:
print(f"{classify_system(s)}: {s}")
Expected Output:
Traditional Software / Rule-Based: Uses fixed rules and if/else logic
to route support tickets.
Workflow / Automation: Runs a predefined sequence of steps to onboard
a new employee.
LLM Application: Makes a single LLM call to summarize a document.
AI Agent: Chooses tools dynamically and repeats a reasoning loop
until the goal is met.
What we conclude from this example: each system description is correctly classified purely based on real behavioral signals — most importantly, the final system is only recognized as an AI agent because it BOTH chooses tools dynamically AND repeats a loop — exactly Section 7’s critical distinction, not just “uses a tool.”
Example 2 — Intermediate
def single_llm_call_response(question: str) -> str:
"""Stage 4 from Section 5 -- a ONE-SHOT LLM application.
No tools, no loop -- whatever the model 'knows' from training is
all it has access to."""
# Simulates an LLM with NO access to real, current data.
if "revenue" in question.lower() or "current" in question.lower():
return "I don't have access to current company data to answer this."
return "This is a general knowledge answer based on training data."
def tool_using_single_call(question: str, lookup_tool) -> str:
"""Stage 5 -- ONE tool call, still not a loop. Can answer questions needing ONE lookup, but not multi-step ones."""
if "revenue" in question.lower():
result = lookup_tool()
return f"Current revenue is {result}."
return single_llm_call_response(question)
def mock_revenue_lookup():
return "$847,320"
q1 = "What is the capital of France?"
q2 = "What is our current revenue?"
print(f"Q: {q1}\nA (one-shot): {single_llm_call_response(q1)}\n")
print(f"Q: {q2}\nA (one-shot, no tool): {single_llm_call_response(q2)}")
print(f"A (tool-using, single call): {tool_using_single_call(q2, mock_revenue_lookup)}")
Expected Output:
Q: What is the capital of France?
A (one-shot): This is a general knowledge answer based on training
data.
Q: What is our current revenue?
A (one-shot, no tool): I don't have access to current company data
to answer this.
A (tool-using, single call): Current revenue is $847,320.
What we conclude from this example: the same question about current revenue is unanswerable by a one-shot LLM (Section 5), but becomes answerable the moment a single tool call is added (Section 6) — directly demonstrating each stage’s real, incremental capability gain, one at a time.
Example 3 — Production Grade
from dataclasses import dataclass
from enum import Enum
class EvolutionStage(Enum):
TRADITIONAL_SOFTWARE = "traditional_software"
WORKFLOW = "workflow"
LLM_APPLICATION = "llm_application"
TOOL_USING_LLM = "tool_using_llm"
AI_AGENT = "ai_agent"
@dataclass
class TaskRequirements:
needs_dynamic_language_understanding: bool
needs_external_data: bool
needs_multiple_dependent_steps: bool
rules_are_fully_known_in_advance: bool
def recommend_evolution_stage(req: TaskRequirements) -> EvolutionStage:
"""A production-style decision function directly implementing
Section 11's real architectural question: what's the SIMPLEST
stage in this evolution that actually solves the task well? --
avoiding Section 12's 'skip straight to Agent' mistake."""
if req.rules_are_fully_known_in_advance and not req.needs_dynamic_language_understanding:
return EvolutionStage.WORKFLOW
if not req.needs_external_data and not req.needs_multiple_dependent_steps:
return EvolutionStage.LLM_APPLICATION
if req.needs_external_data and not req.needs_multiple_dependent_steps:
return EvolutionStage.TOOL_USING_LLM
return EvolutionStage.AI_AGENT
# TechCorp's ticket auto-closer -- fully known rules, no language understanding needed
ticket_closer = TaskRequirements(
needs_dynamic_language_understanding=False, needs_external_data=False,
needs_multiple_dependent_steps=False, rules_are_fully_known_in_advance=True,
)
# TechCorp's late-order handler -- Section 10's Stage 6 scenario
late_order_handler = TaskRequirements(
needs_dynamic_language_understanding=True, needs_external_data=True,
needs_multiple_dependent_steps=True, rules_are_fully_known_in_advance=False,
)
for name, req in [("Ticket auto-closer", ticket_closer), ("Late-order handler", late_order_handler)]:
stage = recommend_evolution_stage(req)
print(f"{name}: recommended stage = {stage.value}")
Expected Output:
Ticket auto-closer: recommended stage = workflow
Late-order handler: recommended stage = ai_agent
What we conclude from this example: the simple ticket auto-closer correctly stays at the “workflow” stage — no need for an Agent’s overhead — while the multi-step, dynamic late-order handler from Section 10 correctly routes all the way to “ai_agent.” This is exactly Section 12’s warning made into enforced logic: don’t reach for an Agent by default, reach for the SIMPLEST stage that solves the problem.
16. Interview Questions
Q: Trace the evolution from traditional software to AI Agents, and explain what changed at each step.
Ans: Traditional software uses fixed, hand-coded rules that only handle explicitly anticipated situations. Automation removes repetitive manual execution but keeps the logic entirely predetermined. Workflows add structured, branching sequences, but every branch is still pre-designed by a human. LLM applications introduce real language flexibility but remain one-shot — a single call with no ability to look anything up. Tool-using LLMs add the ability to call one external tool per request. AI Agents introduce a real loop — repeating reason, act, and observe until a goal is achieved, with each observation informing the next decision. Multi-agent systems then combine multiple specialized agents for tasks too broad for one agent alone.
Q: Why is a “tool-using LLM” that makes a single tool call not yet a real AI Agent?
Ans: A single tool call can retrieve one piece of information or perform one action, but it can’t handle a task requiring multiple, dependent decisions where each step’s result should inform what happens next. An Agent’s defining characteristic is the loop — repeating the reason- act-observe cycle as many times as needed until the actual goal is achieved, not stopping after one action regardless of whether the goal was actually reached.
Q: Why shouldn’t a team default to building an AI Agent for every new automation problem?
Ans: Many tasks are well-served by simpler, cheaper, and more reliable approaches — a workflow with fully known branching logic, or a single LLM call, or even traditional rule-based code. Agents introduce real complexity, cost, and unpredictability that’s only worth it when a task requires dynamic, multi-step decision- making that can’t be fully anticipated and hard-coded in advance. Defaulting to an Agent for a problem a simpler stage would solve just as well adds unnecessary complexity without a real benefit.
Q: Using TechCorp’s support ticket system, give an example of a task suited to a workflow and a task suited to an AI agent, and explain the difference.
Ans: Automatically closing tickets marked “resolved” every night is well-suited to a simple, fixed workflow — the rule is fully known in advance and doesn’t require dynamic decision-making. Handling a late order — checking order status, deciding it’s late, checking a shipping carrier’s tracking API, deciding whether the delay warrants a discount, and drafting an appropriate reply — needs an Agent’s loop, since each step’s outcome determines what the next step should be, in a way that can’t be fully pre-planned as a fixed sequence of branches.
17. What You Should Remember
- The evolution from traditional software to AI Agents is a real progression of increasing dynamic decision-making capability — each stage solves a real limitation of the one before it.
- An AI Agent’s defining characteristic is a real loop — repeating reason-act-observe until a goal is achieved — not simply “using a tool” or “understanding language flexibly.”
- Not every problem needs the most advanced stage — verified directly through a decision function that correctly routes a simple, fully-known-rules task to a workflow rather than defaulting to an Agent.
18. Quick Practice
Think of an automated system you interact with regularly (a customer support chatbot, a smart home device, a recommendation feed). Walk it through this module’s evolution stages and decide, based on its real observed behavior, which stage it most likely represents.
19. Next Step
Next: Module 2 — What Is an AI Agent — building the precise definition this module’s story has been building toward, and drawing sharp distinctions between an Agent and an LLM, a chatbot, an LLM application, automation, and a workflow.
- Author
- TechByteByByte Editorial Team
- Reviewed by
- TechByteByByte Admin
- Published
- Last reviewed