tool.Rd
Convert an object, such as an R function or an agent, into a Tool
object for use by an agent. The equip
function performs
this conversion automatically, but by calling tool
directly,
the user can customize the tool before equipping it.
tool(x, name = deparse(substitute(x)), ...)
Object to convert to a tool, such as a function or Agent
Name of the new tool
Arguments passed to convert
. Methods on
convert
typically forward these to the Tool
constructor.
A Tool object, which is an R function decorated with metadata, such as the argument types and return type.
The more annotations on a tool, the more the agent will understand how
to use it. describe_with_Rd
is a convenient way to
annotate a tool based on a packaged R function with information from
its man page.
Arguments passed to a tool are converted according to the types
declared by can_accept_as
, without any conversion by
default.
Converting an Agent to a Tool enables an agent to be called by another agent (enabling networks of agents), as well as the user by simply invoking it like any other function, fully realizing the goal of the wizrd package: to program agents as functions.
The call to the tool is evaluated in the env
provided to
chat
, so any arguments converted to language objects
will be evaluated as R code. If the agent sends a backquoted string,
like `x`
, it will be converted to a name and resolved
dynamically, as shown in the examples.
There is nothing LLM-specific about Tool objects. Thus, they could even be used as a way to annotate ordinary R functions, like with inferred parameter types.
equip
for equipping an agent with a tool; functions like
can_accept_as
, demonstrate
and
describe_with_Rd
for further specifying a tool
if (FALSE) { # \dontrun{
var <- 1:10
equip(llama(), tool(mean) |> describe_with_Rd()) |>
predict("What is the mean of `var`?")
} # }