Home AI Solutions Ready-made Solutions Peers & Simulation RAG & Retrieval Use Cases Frameworks Blog Deutsch Contact Us
Back to the blog

The Toolbox Is the Problem, Not the Model

We kept adding tools because each one was individually justified. Somewhere past thirty the agent began choosing plausibly wrong ones, and no amount of prompt work fixed it. ToolLLM describes the scale we were trying to reach; our answer was to stop trying.

How We Got to Forty

Nobody decides to give an agent forty tools. It accumulates. Each request is reasonable in isolation: the agent should also be able to look up a contract, also check delivery status, also open a ticket. Every addition was justified by a real user need.

The failure did not arrive as an error. It arrived as a slow rise in answers that were confidently derived from the wrong source — the contract lookup used where the order lookup was meant, returning a real value for the wrong question.

Taskgoal Agentplan · decide Toolapi · mcp Resultverified
A task arrives — the agent plans its next step. 1/4

Why Prompting Did Not Fix It

We did what everyone does first: better tool descriptions, explicit disambiguation rules, examples in the system prompt. Each round improved a specific confusion and left the general one intact, because the problem is not that any single description is unclear.

The problem is that selection quality degrades as the option set grows and options overlap. Two tools that both plausibly answer a question will be confused some of the time, and the number of such pairs grows faster than the tool count.

What the Research Direction Says

Qin and colleagues went the other way, and instructively so. ToolLLM builds an instruction-tuning framework aimed at mastering large numbers of real-world REST APIs, with data collected across a very wide API surface.

That is a legitimate and interesting target. It is also a statement about where the difficulty lives: if teaching a model to handle thousands of APIs requires dedicated data collection and tuning, then handing an untuned model forty overlapping ones and hoping is not a plan.

What We Changed

We stopped scoping the toolbox by system and started scoping it by task. The agent handling delivery questions gets the nine tools a delivery question can need. The agent handling contracts gets its own set. Neither sees the other's.

Where a request spans both, a router decides which task it is before any tool is visible. The router is a small classifier with a fixed output set, not an agent — it has one job and it can be tested exhaustively.

Scoping by systemScoping by task
Every tool the platform hasOnly what this task can need
Grows with the platformGrows with the task, which is bounded
Overlap resolved by promptOverlap removed by construction
Wrong tool returns a real valueWrong tool is not reachable

What It Costs

A routing step adds a call and a failure mode of its own: route wrongly and the right tool is unreachable. We accept that trade because a routing error is visible and testable, while a tool-selection error inside a large toolbox looks like a plausible answer.

The maintenance cost is real too. Task scopes have to be revisited when the product changes, and a tool that becomes relevant to a second task has to be added deliberately rather than being present by default.

What We Do Not Claim

We do not claim nine is a magic number. It is what that task needed. The number that matters is not the count but the overlap: two tools that answer the same question are worse than ten that answer ten questions.

We also do not claim large toolboxes cannot work. With tuning aimed at exactly that, as the research shows, they can. We claim that most products do not have that tuning and should not design as if they did.

Sources