본문으로 건너뛰기

Function: toolDefinition()

function toolDefinition<TInput, TOutput, TName, TNeedsApproval, TApprovalSchema>(config): ToolDefinition<TInput, TOutput, TName, TNeedsApproval, TApprovalSchema>;

정의 위치: packages/ai/src/activities/chat/tools/tool-definition.ts:331

직접 사용하거나 서버/클라이언트용으로 인스턴스화할 수 있는 동형 도구 정의를 생성합니다.

정의에는 모든 도구 메타데이터(이름, 설명, 스키마)가 포함되며 다음과 같이 사용할 수 있습니다.

  1. 서버의 chat()에서 직접 사용합니다(execute가 없는 도구 정의로 사용).
  2. .server()로 서버 도구를 인스턴스화합니다.
  3. .client()로 클라이언트 도구를 인스턴스화합니다.

Standard JSON Schema를 준수하는 모든 라이브러리(Zod v4+, ArkType, Valibot 등) 또는 일반 JSON Schema 객체를 지원합니다.

타입 매개변수

TInput

TInput extends SchemaInput | undefined = undefined

TOutput

TOutput extends SchemaInput | undefined = undefined

TName

TName extends string = string

TNeedsApproval

TNeedsApproval extends boolean = false

TApprovalSchema

TApprovalSchema extends | ApprovalSchemaConfig | undefined = undefined

매개변수

config

ToolDefinitionConfig&lt;TInput, TOutput, TName, TNeedsApproval, TApprovalSchema>

반환값

ToolDefinition&lt;TInput, TOutput, TName, TNeedsApproval, TApprovalSchema>

예제

import { toolDefinition } from '@tanstack/ai';
import { z } from 'zod';

// Using Zod (natively supports Standard JSON Schema)
const addToCartTool = toolDefinition({
name: 'addToCart',
description: 'Add a guitar to the shopping cart (requires approval)',
needsApproval: true,
inputSchema: z.object({
guitarId: z.string(),
quantity: z.number(),
}),
outputSchema: z.object({
success: z.boolean(),
cartId: z.string(),
totalItems: z.number(),
}),
});

// Use directly in chat (server-side, no execute function)
chat({
tools: [addToCartTool],
// ...
});

// Or create server-side implementation
const addToCartServer = addToCartTool.server(async (args) => {
// args is typed as { guitarId: string; quantity: number }
return {
success: true,
cartId: 'CART_' + Date.now(),
totalItems: args.quantity,
};
});

// Or create client-side implementation
const addToCartClient = addToCartTool.client(async (args) => {
// Client-specific logic (e.g., localStorage)
return { success: true, cartId: 'local', totalItems: 1 };
});