What is an AI agent, and how is it different from a chatbot?
A client emailed us a couple of weeks ago asking for “a chatbot to handle orders.” Ten minutes into the call it was clear that wasn’t what they actually wanted. They wanted something that checked stock, worked out shipping, and, if needed, pinged the supplier. That’s not a chatbot anymore. That’s an agent.
The short version: a chatbot replies. It gets a message, whichever model is running generates an answer, and the loop ends there. An agent can decide to do something before it answers: query a database, call an API, run a script, and only then give you a response that actually accounts for what it found. The key isn’t the model itself, it’s that the model has access to tools and can choose to use them.
This is called “tool calling” or “function calling,” and it’s been around for a while. What’s changed in the last few months is that it’s become reasonably reliable. It used to make up parameters or call the same API three times for no reason. With Claude Opus or Sonnet, or GPT-4.1 onward, it fails a lot less. Not never. It still happens, especially with poorly documented tools or ambiguous parameter names.
For this client we built something fairly simple: an agent with three tools. Check stock, calculate shipping cost by weight and postcode, and draft a supplier alert when stock dropped below a threshold. No free-form language in the critical part: the agent decides which tool to call, but the shipping calculation is plain code, not something the model “reasons” its way through. Watch out for this one, because a lot of people skip it on their first agent build: the model decides the what, the code handles the how. Let the model guess shipping rates and you’ll get surprises —annoyingly hard to debug ones too, since the model won’t explain why it got it wrong, it just returns a different number each time.
The hard part wasn’t the AI. It was deciding what happened when the agent picked the wrong tool or got stuck halfway, say on a timeout from the supplier’s API. We had to add retries and, more than anything, a step limit so the agent wouldn’t loop calling the same tool twenty times if something broke. The first version we tested didn’t have that limit. In an internal test it sat there querying stock in a loop for almost two minutes before we killed it by hand.
If you’re weighing something like this for your business, the question that actually matters isn’t whether AI can do it (it almost always can, at least in a demo). It’s what happens the day the tool it calls fails, returns something odd, or takes fifteen seconds to respond. That part isn’t solved by the model. You solve it.