Zum Inhalt springen
EN DE

Tools definieren

Tools erweitern ein LLM um Faehigkeiten, die es allein nicht hat — Datenbank-Abfragen, API-Calls, Berechnungen. Im AI SDK definierst Du ein Tool mit der tool()-Funktion, die drei Properties erwartet: description (was das Tool tut), parameters (welche Parameter es akzeptiert) und execute (was es ausfuehrt).

Das LLM sieht die description und die parameters, entscheidet ob es das Tool aufrufen will und generiert passende Argumente. Die execute-Funktion laeuft dann auf Deinem Server — das LLM fuehrt nie selbst Code aus.

Es gibt drei Tool-Varianten: Custom Tools (Du definierst alles selbst), Provider-Defined Tools (der Provider liefert das Schema, Du die Ausfuehrung) und Provider-Executed Tools (laufen komplett auf Provider-Servern, z.B. Web Search bei OpenAI).

import { tool } from 'ai';
import { z } from 'zod';
const weatherTool = tool({
description: 'Get the weather in a location',
parameters: z.object({
location: z.string().describe('The city name'),
unit: z
.enum(['celsius', 'fahrenheit'])
.optional()
.describe('Temperature unit'),
}),
execute: async ({ location, unit }) => ({
location,
temperature: 22,
unit: unit ?? 'celsius',
}),
});
// Tools an generateText/streamText uebergeben
import { generateText } from 'ai';
import { anthropic } from '@ai-sdk/anthropic';
const result = await generateText({
model: anthropic('claude-sonnet-4-5-20250514'),
prompt: 'Wie ist das Wetter in Berlin?',
tools: { weather: weatherTool },
});
PropertyTypBeschreibung
descriptionstringErklärung für das LLM, wann und wofuer das Tool genutzt werden soll
parametersZodSchema | JSONSchemaSchema der Eingabeparameter — Zod empfohlen für Typsicherheit
executeasync (args, options) => Promise<T>Async Funktion, die mit den validierten Argumenten aufgerufen wird
PropertyTypBeschreibung
experimental_toToolResultContent(result) => Content[]Wandelt das Tool-Ergebnis in Content um, den das LLM verarbeiten kann — z.B. für Bilder oder Screenshots bei Multi-Modal-Modellen

Die execute-Funktion erhaelt neben den Argumenten ein Options-Objekt mit:

  • toolCallId — eindeutige ID des Tool-Calls (z.B. für Stream-Data)
  • messages — die Messages, die den Tool-Call ausgeloest haben
  • abortSignal — Signal zum Abbrechen der Operation
MethodeZweck
.describe('...')Hilft dem LLM, den Parameter zu verstehen
.optional()Macht den Parameter optional
.default(value)Setzt einen Standardwert
z.enum([...])Beschraenkt auf erlaubte Werte

Part of AI Learning — free courses from prompt to production. Jan on LinkedIn