`toolSearch()`

toolSearch()

주변 생성의 지연 로딩(deferred) 툴들을 이름과 설명으로 검색하는 툴을 만들어요. 팩토리는 인자를 받지 않아요. generateText, streamText, ToolLoopAgent, 또는 @ai-sdk/workflow의 WorkflowAgent와 함께 사용하세요. WorkflowAgent는 직접 툴 호출을 지원해요. 다른 API들은 toolDiscovery: 'conversation'으로 구성된 코드 모드도 지원해요.

import { toolSearch } from 'ai';

const search = toolSearch();

직접 호출 및 코드 모드 예시(코드 모드가 툴 정의 캐시를 보존하는 방법 포함)는 Tool Search 가이드를 참고하세요.

출처: 문서

본문

모델 입력 (Model Input)

모델은 검색 툴에 다음 입력을 제공해요:

{ "query": "weather forecast" }

query는 필수이며 비어 있지 않은 검색 키워드 문자열이에요. 검색은 로컬이고 대소문자를 구분하지 않으며, 툴 이름과 설명의 단어를 매칭해요. 카멜케이스 이름은 단어로 분리돼요. 이름 매칭이 설명 매칭보다 위에 순위가 매겨져요. 동점 점수는 등록 순서를 보존해요. 함수 설명은 현재 툴 컨텍스트와 샌드박스로 해석돼요. 임베딩 서비스나 추가 모델 호출은 사용되지 않아요.

출력 (Output)

{
  tools: [
    { name: 'getForecast', description: 'Get the weather forecast for a city.' },
  ],
}

결과에는 최대 5개의 매칭 툴이 이름과 선택적 설명과 함께 포함돼요. 스키마는 포함되지 않아요. 매칭이 없으면 { tools: [] }을 반환해요. 반환된 모든 매칭은 발견(discovery)을 위해 대기열에 들어가요. 새로 발견된 툴은 정의가 제공된 후 다음 모델 스텝에서만 호출할 수 있어요. 검색과 같은 응답에서의 병렬 호출은 새로 발견된 툴을 사용할 수 없어요. 코드 모드의 경우 현재 실행을 끝내고 기능 업데이트를 기다리세요.

발견 라이프사이클 (Discovery Lifecycle)

다음 모델 스텝 전에, SDK는 발견된 툴을 구성된 호출자를 통해 사용 가능하게 해요:

  • 직접 호출: 프로바이더가 업데이트된 툴 정의를 받아요.
  • 코드 모드: SDK가 업데이트된 기능 카탈로그를 담은 사용자 메시지를 추가해요. 프로바이더가 보는 코드 모드 정의는 변경되지 않아요. 기존 카탈로그는 대화에 남아요. 최신 카탈로그가 현재 사용 가능한 완전한 툴 세트를 설명해요.

실제 프롬프트 캐시 재사용은 프로바이더에 따라 달라요. 코드 모드 검색도 toolDiscovery: 'conversation'이 필요해요. 설명 발견과 프로바이더 호출자는 지원되지 않아요.

발견된 툴은 activeTools의 적용을 받아 생성이 끝날 때까지 로드된 상태를 유지해요. 검색은 activeTools로 제외된 툴을 발견할 수 없어요. 발견 상태는 같은 에이전트나 툴 인스턴스를 재사용하는 호출을 포함해 생성 호출 간에 격리돼요.

모델이 검색하고, 발견된 툴을 사용하고, 답변할 수 있도록 generateText와 streamText에서 다단계 stopWhen 조건을 설정하세요.

더 알아보기 (Learn more)

전체 사이트맵