`hasToolCall()`

hasToolCall()

가장 최근 스텝에서 지정된 툴 중 하나가 호출되면 중지하는 stop condition을 만듭니다. 이 함수는 generateText와 streamText의 stopWhen과 함께 사용하여, 지정된 툴 중 하나가 호출되었는지에 따라 툴 호출 루프를 언제 멈출지 제어합니다.

출처: 문서

본문

import { generateText, hasToolCall } from 'ai';
__PROVIDER_IMPORT__;

const result = await generateText({
  model: __MODEL__,
  tools: {
    weather: weatherTool,
    finalAnswer: finalAnswerTool,
  },
  // Stop when the finalAnswer tool is called
  stopWhen: hasToolCall('finalAnswer'),
});

Import

import { hasToolCall } from "ai"

API Signature

Parameters (파라미터)

  • ...toolNames: string[] — 하나 이상의 툴 이름입니다. 가장 최근 스텝에서 이 중 하나라도 호출되면 stop condition이 트리거됩니다.

Returns (반환값)

가장 최근 스텝에서 지정된 툴 중 하나가 호출되면 true를 반환하는 StopCondition 함수를 반환합니다. 이 함수는 generateText와 streamText의 stopWhen 파라미터와 함께 사용할 수 있습니다.

Examples (예제)

기본 사용법

특정 툴이 호출되면 멈춥니다.

import { generateText, hasToolCall } from 'ai';

const result = await generateText({
  model: yourModel,
  tools: {
    submitAnswer: submitAnswerTool,
    search: searchTool,
  },
  stopWhen: hasToolCall('submitAnswer'),
});

여러 툴 매칭

가장 최근 스텝에서 여러 툴 중 하나가 호출되면 멈춥니다.

import { generateText, hasToolCall } from 'ai';

const result = await generateText({
  model: yourModel,
  tools: {
    weather: weatherTool,
    search: searchTool,
    finalAnswer: finalAnswerTool,
  },
  stopWhen: hasToolCall('weather', 'finalAnswer'),
});

다른 조건과 결합

여러 stop condition을 배열로 결합할 수 있습니다.

import { generateText, hasToolCall, isStepCount } from 'ai';

const result = await generateText({
  model: yourModel,
  tools: {
    weather: weatherTool,
    search: searchTool,
    finalAnswer: finalAnswerTool,
  },
  // Stop when weather tool is called OR finalAnswer is called OR after 5 steps
  stopWhen: [
    hasToolCall('weather'),
    hasToolCall('finalAnswer'),
    isStepCount(5),
  ],
});

에이전트 패턴

최종 답변을 제공할 때까지 실행되는 에이전트의 일반적인 패턴입니다.

import { generateText, hasToolCall } from 'ai';

const result = await generateText({
  model: yourModel,
  tools: {
    search: searchTool,
    calculate: calculateTool,
    finalAnswer: {
      description: 'Provide the final answer to the user',
      inputSchema: z.object({
        answer: z.string(),
      }),
      execute: async ({ answer }) => answer,
    },
  },
  stopWhen: hasToolCall('finalAnswer'),
});

See also

더 알아보기 (Learn more)