- 스프링 AI에서 도구는
@Tool 어노테이션을 메소드에 적용하여 정의하며, 인자와 반환값은 반드시 JSON 직렬화 가능한 타입이어야 합니다. 🛠️
- 도구의 정의는 JSON 스키마로 자동 번역되지만, 도구와 인자에 대한 명확한 설명을 위해
description을 추가해야 합니다. 📝
ToolCallingManager가 도구 호출, 정의 해석, 결과 병합 등 복잡한 다중 턴(multi-turn) 도구 호출 과정을 추상화하여 개발자가 쉽게 사용할 수 있도록 돕습니다. 🪄
- LLM의 도구 사용 흐름은 연쇄적이며, 도구 호출 응답이 오면 그 결과를 포함하여 다시 질의하는 과정을 최종 응답이 올 때까지 반복해야 합니다. 🔄
- 모든 LLM API는 상태가 없으므로, 도구 호출 결과를 포함한 이전 대화 컨텍스트 전체를 매번 재전송해야 합니다. 📦
- 스프링 AI의 도구 사용은 구상 모델(OpenAI, Claude 등)이 도구 호출을 지원하지 않으면 아무런 오류 없이 무시되며, 이는 보이지 않는 약점입니다. 👻
- 도구 설계 시, 유사한 기능의 도구들이 동시에 주어지면 LLM이 혼란을 겪을 수 있으므로, '세분화 전략' (작고 명확한 도구) 또는 '위임 전략' (큰 범주의 도구에 위임)을 고려해야 합니다. 🗺️
- 도구의 실질적인 성과는 모델의 '성향'에 따라 달라지며, 어떤 모델은 적은 인자와 많은 도구를, 어떤 모델은 많은 인자와 적은 도구를 선호하는 등 모델별 특성을 파악하는 것이 중요합니다. 🧠
데브허브 | DEVHUB | 스프링AI - 13. 도구사용