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을 추가한다.
내부 구현
-
흐름
- ChatClient는 모델에 사용 가능한 도구 정의를 보낸다.
- 모델이 도구 사용을 결정하면, 도구 이름과 입력 파라미터로 응답한다.
- ToolCallingManager가 적절한 ToolCallback을 찾아서 실행시켜준다.
- 결과를 포함하여 모델에게 전달한다.
- 모델은 최종 응답을 생성한다.

-
내부적으로 tool을 관리하는 탓에 커스텀 로직을 넣기에 제한이 있다. 그 대안으로 tool advisor doc를 사용할 수도 있다.