tool

Tool

LLM이 사용할 수 있는 메서드 즉 tool을 제공하는 기능 Tool은 LLM이 실시간 정보를 검색할 수 있게 하거나, 행동을 할 수 있도록 도와준다.

  • 관련 doc

  • LLM이 실시간 정보를 검색할 수 있게 하거나, 행동을 할 수 있도록 도와준다.

Tool 정의

class DateTimeTools {

    @Tool(description = "Get the current date and time in the user's timezone")
    String getCurrentDateTime() {
        return LocalDateTime.now().atZone(LocaleContextHolder.getTimeZone().toZoneId()).toString();
    }

    @Tool(description = "Set a user alarm for the given time")
    void setAlarm(@ToolParam(description = "Time in ISO-8601 format") String time) {
        LocalDateTime alarmTime = LocalDateTime.parse(time, DateTimeFormatter.ISO_DATE_TIME);
        System.out.println("Alarm set for " + alarmTime);
    }
}
  • Tool: 메서드를 tool이라고 선언한다.
    • description: tool의 사용법을 설명한다.
  • ToolParam: 매개변수의 형식 등 주의사항을 명시한다.
  • 이 외에도 tool을 구현하는 수 많은 방법이 존재한다.

Tool 사용

ChatClient.create(chatModel)
    .prompt("What day is tomorrow?")
    .tools(new DateTimeTools())
    .call()
    .content();
  • tools를 통해서 Tool을 추가한다.

내부 구현

  • 흐름

    1. ChatClient는 모델에 사용 가능한 도구 정의를 보낸다.
    2. 모델이 도구 사용을 결정하면, 도구 이름과 입력 파라미터로 응답한다.
    3. ToolCallingManager가 적절한 ToolCallback을 찾아서 실행시켜준다.
    4. 결과를 포함하여 모델에게 전달한다.
    5. 모델은 최종 응답을 생성한다. tool-calling-diagram.jpg
  • 내부적으로 tool을 관리하는 탓에 커스텀 로직을 넣기에 제한이 있다. 그 대안으로 tool advisor doc를 사용할 수도 있다.