A chatbot responds to one query.
- This guide provides comprehensive, actionable information
- Consider your specific workflow needs when evaluating options
- Explore our curated development tools for specific recommendations
- The spectrum from chatbot to agent
- Pattern 1: Tool-calling agent (simplest)
- Pattern 2: Reasoning loop (most flexible)
- Pattern 3: State machine (structured)
- Pattern 4: Hierarchical agents (orchestration)
- Pattern 5: Streaming & cancellation
- Build the three layers
- Common failure modes
- Which pattern should you ship?
The spectrum from chatbot to agent
A chatbot responds to one query. An agent makes decisions, calls tools, evaluates results, and loops until it reaches a goal. In between are simpler patterns: a tool-calling LLM that runs in one shot, or a prompt that chains steps manually. Understanding where your system sits on this spectrum determines what patterns matter.
Pattern 1: Tool-calling agent (simplest)
The LLM sees a list of available tools, decides which to call, and returns results. You handle the loop: feed response back, repeat if needed. This is stateless and easy to reason about.
When to use: Single-task problems, low error rates, tight latency budgets. When the agent rarely needs more than one turn.
Gotchas: The model might hallucinate tool names. It might call tools in the wrong order. Error messages need to be clear so the model can recover.
Pattern 2: Reasoning loop (most flexible)
The model thinks, makes a decision, calls a tool if needed, observes the result, and loops. You define a stopping condition: goal reached, error threshold, or step limit. This is how Claude's extended thinking works.
When to use: Multi-step reasoning, error recovery, when the agent should "think about" failures. Most production agents use this.
Gotchas: Easy to loop forever. Set a step limit. The model might ignore observations. Write error messages the model will actually respond to.
Pattern 3: State machine (structured)
Define explicit states: GATHERING_INFO, DECIDING, EXECUTING, DONE. The agent can only take certain actions from each state. This is rigid but predictable. Common in enterprise automation.
When to use: Workflows with defined steps (collect → analyze → decide → execute). When auditing is critical.
Gotchas: The model might refuse to follow state rules. You need to enforce them, not just suggest them.
Pattern 4: Hierarchical agents (orchestration)
One agent delegates to specialized sub-agents. The manager agent decides which expert handles which part. This scales reasoning and allows each agent to focus.
When to use: Complex tasks across domains. Scaling to many tools. When you want to reuse agents.
Gotchas: Coordination overhead. The manager needs to understand each specialist's capabilities. Errors cascade: if one agent fails, the whole chain breaks.
Pattern 5: Streaming & cancellation
Start the reasoning loop but let the client interrupt. Stream token-by-token thinking back to the user. This trades latency for interactivity: users see the agent "thinking" and can cancel early if they see it's on the wrong track.
When to use: Long-running agents. User-facing applications where latency matters.
Gotchas: Harder to handle errors mid-stream. The model might emit garbage if interrupted.
Build the three layers
Layer 1: Tool substrate
Define what the agent can actually do. This is your source of truth. If a tool is buggy, the agent will misuse it. If a tool is missing, the agent will hallucinate it. Invest here first.
Layer 2: Reasoning loop
How the agent makes decisions. This is where most production problems hide: the model goes off the rails, ignores error messages, or loops without progress.
Layer 3: Supervision
What stops the agent? Error budgets, step limits, human review gates? Most agents fail because they were given no way to fail gracefully.
Common failure modes
- Hallucinated tools: The model calls tools that don't exist. Fix: validate tool names before calling.
- Tool argument errors: The model puts the wrong data in the wrong fields. Fix: strict schemas with examples.
- Infinite loops: The agent makes no progress. Fix: step limits, state validation.
- Ignoring errors: The tool returned "permission denied" but the model acts like it succeeded. Fix: explicit error parsing.
- Context explosion: The reasoning history grows so large the model forgets the original goal. Fix: summarization or windowing.
Which pattern should you ship?
Start with tool-calling (one shot) or a simple reasoning loop (N steps, step limit). This will fail fast and teach you what your model actually needs. Only add state machines, hierarchies, or streaming once you understand the failure modes. Most agents succeed with boring architecture, not clever patterns.
Explore curated tools related to this guide: