Back to Home | Back to PostsWritten:
---
This post is about an idea that’s been rattling around in my head lately.
I find that it helps my creative process to write about partially formed ideas. That way, I can flesh them out and see if there’s anything there. So - how about this one?
What if, instead of having LLM-based agents call tools directly, you instead provided them a registry of tools that they could use? They could then determine which tool(s) would be the most appropriate to use for the task at hand and then access those tools on demand.
I think one benefit of this arrangement is that you can then eject other unnecessary tools from the model context. Let the model decide which tool(s) are most likely to achieve the request, then get those tools and decide which ones to start with.
To break the solution down further, I think what this entails is:
I think that one interesting wrinkle might be to support proxying the request to the tool via the registry server, or a worker thereof. This would prevent you from having to give the agent direct access to the credentials used to authenticate with the tool. This also lets you provide a single point of access for tool-based utilities and treat it like a bastion - secure the heck out of this one service, but let agents run in userspace.
At its most basic, one way to provide scaffolding to allow an agent to complete a request might simply be to specify required headers when registering an instance of a tool (yes - tools should be instanced, if you imagine the most common tool is a REST-like api, that API is going to change versions and endpoint names, etc… if we’re going to create a registry, we should support that). Those headers can then be included in the request, either by proxying, or returned in the request when an agent requests to “hydrate” the tool.
langchain
tool when requested. The registry and proxy server can also be thought of as a tool - it’s a meta-tool, one that provides other tools!yml
, to enhance whatever is included in the basic spec. Having spelled this out, that sounds like a less important capability, since you can always just modify the spec files themselves.Naming is always the hardest part of starting a new project…
Already taken (so we won’t use it):
Not taken (or not confusingly so):