`tool()`
tool()
tool은 자신의 execute 메서드와 라이프사이클 콜백의 툴 입력과 컨텍스트를 추론하는 헬퍼 함수입니다. 런타임 동작은 없지만 TypeScript가 툴 콜백의 타입을 추론하도록 돕습니다. 이 헬퍼가 없으면 TypeScript는 inputSchema와 contextSchema 속성을 툴 콜백에 연결할 수 없고, 콜백 인자 타입을 추론할 수 없습니다.
runtimeContext, toolsContext, 툴 context 및 민감한 컨텍스트 필터링의 전체 모델은 Runtime and Tool Context를 참고하세요.
Tool 타입은 네 가지 툴 종류의 합집합입니다.
FunctionTool: 알려진 입력/출력 타입을 가진 사용자 정의 함수 스타일 툴입니다.DynamicTool: 런타임에 정의되며unknown입력/출력 타입을 가진 함수 스타일 툴입니다.ProviderDefinedTool: 프로바이더가 정의하고 코드가 실행하는 툴입니다.ProviderExecutedTool: 프로바이더가 정의하고 프로바이더가 실행하는 툴입니다.
출처: 문서
본문
import { tool } from 'ai';
import { z } from 'zod';
export const weatherTool = tool({
description: 'Get the weather in a location',
inputSchema: z.object({
location: z.string().describe('The location to get the weather for'),
}),
// location below is inferred to be a string:
execute: async ({ location }) => ({
location,
temperature: 72 + Math.floor(Math.random() * 21) - 10,
}),
});
Import
import { tool } from "ai"
API Signature
Parameters (파라미터)
tool:Tool— 툴 정의입니다.description:string | ((options: { context: CONTEXT; experimental_sandbox?: Experimental_SandboxSession }) => string)(선택) — 모델이 언제 어떻게 사용할 수 있는지에 대한 세부 정보를 포함한 툴의 목적 정보입니다. 고정 설명에는 문자열을, 각 모델 호출 전에 툴별 컨텍스트와 선택적 실험적 샌드박스에서 설명을 도출하려면 함수를 제공하세요.deferLoading:boolean(선택) —toolSearch가 발견할 때까지 이 툴을 모델 컨텍스트 밖에 둡니다.toolDiscovery: 'conversation'와 함께 직접 호출 또는 코드 모드를 지원합니다. 발견된 툴은 다음 모델 스텝에서 사용 가능해집니다. 기본값은false입니다.title:string(선택) — deprecated 되었습니다. 소스별 툴 표시 메타데이터에는providerMetadata를 사용하세요.needsApproval:boolean | ((input: INPUT, options: { toolCallId: string; messages: ModelMessage[]; context: CONTEXT }) => boolean | Promise<boolean>)(선택) — deprecated 되었습니다.generateText,streamText,ToolLoopAgent에서는toolApproval로 승인을 구성하세요. 기존needsApproval사용은 호환성 폴백으로 여전히 동작합니다. 사용 시 불리언이거나 툴 입력과 타이핑된context를 포함한 실행 메타데이터를 받는 함수일 수 있습니다.inputSchema:Zod Schema | JSON Schema— 툴이 기대하는 입력의 스키마입니다. 언어 모델이 입력을 생성하는 데 사용할 것이며, 언어 모델 출력을 검증하는 데도 사용됩니다. 언어 모델이 이해할 수 있도록 설명(description)을 사용하세요. Zod 스키마 또는 JSON 스키마(jsonSchema함수 사용) 중 하나를 전달할 수 있습니다.inputExamples:Array<{ input: INPUT }>(선택) — 언어 모델에게 입력이 어떤 모습이어야 하는지 보여주는 선택적 입력 예제 목록입니다.contextSchema:Zod Schema | JSON Schema(선택) — 툴이 기대하는 툴별 컨텍스트를 설명하는 선택적 스키마입니다. 제공되면execute,needsApproval및 입력 라이프사이클 콜백의context타입이 이 스키마에서 추론됩니다. 값은toolsContext의 해당 툴 항목을 통해 공급됩니다.strict:boolean(선택) — 툴의 strict 모드 설정입니다. strict 모드를 지원하는 프로바이더는 이 설정을 사용해 입력 생성 방식을 결정합니다. strict 모드는 항상 유효한 입력을 생성하지만 지원되는 입력 스키마가 제한될 수 있습니다.execute:async (input: INPUT, options: ToolExecutionOptions<CONTEXT>) => RESULT | Promise<RESULT> | AsyncIterable<RESULT>(선택) — 툴 호출의 인자로 호출되어 결과 또는 결과 이터러블을 생성하는 비동기 함수입니다. 이터러블이 제공되면 마지막 결과를 제외한 모든 결과는 예비(preliminary)로 간주됩니다. 제공되지 않으면 툴은 자동으로 실행되지 않습니다.toolCallId:string— 툴 호출의 ID입니다. 예를 들어 스트림 데이터로 툴 호출 관련 정보를 보낼 때 사용할 수 있습니다.messages:ModelMessage[]— 툴 호출을 포함한 응답을 시작하기 위해 언어 모델로 전송된 메시지들입니다. 시스템 프롬프트와 툴 호출을 포함한 어시스턴트 응답은 포함하지 않습니다.abortSignal:AbortSignal(선택) — 전체 작업이 중단되어야 함을 나타내는 선택적 abort 신호입니다.context:CONTEXT— 툴 실행에 전달되는 툴별 컨텍스트입니다.contextSchema가 제공되면 이 타입은 해당 스키마에서 추론되고toolsContext의 일치 항목에서 공급됩니다.experimental_sandbox:Experimental_SandboxSession(선택) — 생성 또는 에이전트 호출에서 전달된 선택적 실험적 샌드박스 환경입니다. 툴이 실험적 샌드박스에서 명령이나 코드를 실행해야 할 때 사용하세요.
outputSchema:Zod Schema | JSON Schema(선택) — 툴이 생성하는 출력의 스키마입니다. 타입 추론에 사용됩니다.toModelOutput:({toolCallId: string; input: INPUT; output: OUTPUT}) => ToolResultOutput | PromiseLike<ToolResultOutput>(선택) — 툴 결과를 언어 모델이 사용할 수 있는 출력으로 매핑하는 선택적 변환 함수입니다. 제공되지 않으면 툴 결과는 JSON 객체로 전송됩니다. 이 함수는 "convertToModelMessages"에 의해 서버에서 호출되므로, 동일한 "tools"(ToolSet)를 "convertToModelMessages"와 "streamText"(또는 다른 생성 API) 모두에 전달해야 합니다.onInputStart:(options: ToolExecutionOptions<CONTEXT>) => void | PromiseLike<void>(선택) — 모델이 툴 입력 생성을 시작할 때 호출되는 선택적 함수입니다. 비스트리밍 컨텍스트에서는onInputAvailable직전에 호출됩니다.onInputDelta:(options: { inputTextDelta: string } & ToolExecutionOptions<CONTEXT>) => void | PromiseLike<void>(선택) — 인자 스트리밍 델타가 준비될 때 호출되는 선택적 함수입니다. 툴이 스트리밍 컨텍스트에서 사용될 때만 호출됩니다.onInputAvailable:(options: { input: INPUT } & ToolExecutionOptions<CONTEXT>) => void | PromiseLike<void>(선택) —execute함수가 제공되지 않아도 툴 호출을 시작할 수 있을 때 호출되는 선택적 함수입니다.providerOptions:ProviderOptions(선택) — 추가 프로바이더별 메타데이터입니다. AI SDK에서 프로바이더로 전달되어 프로바이더에 완전히 캡슐화될 수 있는 프로바이더별 기능을 활성화합니다.metadata:JSONObject(선택) — 툴 자체에 대한 선택적 메타데이터입니다 (예: 소스). 결과 툴 호출의toolMetadata로 전파되어 소비자가 툴 호출/결과 파트와 UI 메시지 파트에서 읽을 수 있습니다. 동적 툴의 소스(예: MCP 서버)가 스스로를 식별하는 데 유용합니다.type:'function' | 'dynamic' | 'provider'(선택) — 툴의 유형입니다. 일반 툴은 기본값이 "function"입니다. 런타임에 정의된 툴에는 "dynamic", 프로바이더별 툴에는 "provider"를 사용하세요.id:`${string}.${string}`(선택) — 프로바이더 툴의 ID입니다.<provider-name>.<unique-tool-name>형식을 따라야 합니다. type이 "provider"일 때 필수입니다.isProviderExecuted:boolean(선택) — 프로바이더 툴이 프로바이더에 의해 실행되는지 여부입니다.ProviderDefinedTool에는false,ProviderExecutedTool에는true로 설정하세요. type이 "provider"일 때 필수입니다.args:Record<string, unknown>(선택) — 프로바이더 툴을 구성하는 인자입니다. 이 툴에 대해 프로바이더가 정의한 예상 인자와 일치해야 합니다. type이 "provider"일 때 필수입니다.supportsDeferredResults:boolean(선택) — 프로바이더가 실행하는 툴이 현재 응답의 일치하는 툴 호출 없이 도착하는 결과를 지원하는지 여부입니다.ProviderExecutedTool에서만 사용할 수 있습니다.
Returns (반환값)
전달된 툴을 반환합니다.