Tools

While large language models (LLMs) have incredible generation capabilities, they struggle with discrete tasks (e.g. mathematics) and interacting with the outside world (e.g. getting the weather).

Tools are actions that an LLM can invoke. The results of these actions can be reported back to the LLM to be considered in the next response.

For example, when you ask an LLM for the "weather in London", and there is a weather tool available, it could call a tool with London as the argument. The tool would then fetch the weather data and return it to the LLM. The LLM can then use this information in its response.

What is a tool?

A tool is an object that can be called by the model to perform a specific task. You can use tools with generateText and streamText by passing one or more tools to the tools parameter.

A tool consists of three properties:

  • description: An optional description of the tool that can influence when the tool is picked.
  • parameters: A Zod schema or a JSON schema that defines the parameters. The schema is consumed by the LLM, and also used to validate the LLM tool calls.
  • execute: An optional async function that is called with the arguments from the tool call.

streamUI uses UI generator tools with a generate function that can return React components.

If the LLM decides to use a tool, it will generate a tool call. Tools with an execute function are run automatically when these calls are generated. The results of the tool calls are returned using tool result objects.

You can automatically pass tool results back to the LLM using multi-step calls with streamText and generateText.

Schemas

Schemas are used to define the parameters for tools and to validate the tool calls.

The AI SDK supports both raw JSON schemas (using the jsonSchema function) and Zod schemas. Zod is the most popular JavaScript schema validation library. You can install Zod with:

pnpm
npm
yarn
pnpm add zod

You can then specify a Zod schema, for example:

import z from 'zod';
const recipeSchema = z.object({
recipe: z.object({
name: z.string(),
ingredients: z.array(
z.object({
name: z.string(),
amount: z.string(),
}),
),
steps: z.array(z.string()),
}),
});

You can also use schemas for structured output generation with generateObject and streamObject.

Toolkits

When you work with tools, you typically need a mix of application specific tools and general purpose tools. There are several providers that offer pre-built tools as toolkits that you can use out of the box:

  • agentic - A collection of 20+ tools. Most tools connect to access external APIs such as Exa or E2B.
  • browserbase - Browser tool that runs a headless browser

Do you have open source tools or tool libraries that are compatible with the AI SDK? Please file a pull request to add them to this list.

Learn more

The AI SDK Core Tool Calling and Agents documentation has more information about tools and tool calling.