Spring AI 기반 e스포츠 챗봇 고도화
처음엔 “오늘 경기 있어요?” 같은 질문에 DB를 조회해 답하는 단순 챗봇이었다.
실제 사용 흐름에선 일정·승률·핫 키워드·외부 소식까지 다양하게 묻는다.
Spring AI의 tool calling을 시작으로, 도메인별 툴 분리, 기존 서비스 연동, 외부 API 확장까지 단계적으로 넓혀 간 과정을 간단하게 정리했다.
도메인 별 툴 분리
핵심은 AI가 사용자 질문 의도를 분석해 적절한 도메인 툴로 연결해주는 것이었다.
일정은 `query_schedule`,
날짜 지정은 `query_schedule_by_date`,
승률은 `analyze_winning_rate`,
인기 키워드는 `query_hot_keywords`,
외부 소식은 `query_cs2_news`로 툴을 명확히 나눴다.
서비스 호출
CallResponseSpec call = chatClient
.prompt(prompt)
.system(system)
.tools(scheduleTools, winRateTools, hotKeywordTools, cs2NewsTools)
.call();
String answer = call.content();
툴 정의
@Tool(
name = "query_schedule",
description = "날짜 표현(오늘/내일/어제/이번주/지난주/주말)을 해석해 해당 기간의 경기 일정을 조회한다."
)
public ScheduleResponse querySchedule(
@ToolParam(description = "예: 오늘/내일/어제/이번주/지난주/주말", required = false)
String when
) {
...
return ScheduleResponse.of(items, w, start, end);
}
효과
- 컨트롤러/서비스는 프롬프트 + 툴 목록만 건네고, 실제 도구 선택/호출은 모델이 처리
- 수동 JSON 오케스트레이션 없이, Spring AI의 tool calling을 통해 유지보수와 기능 추가 모두 간단해졌다.
기존 “핫키워드 서비스”를 툴로 연결
이미 있던 핫키워드 서비스를 툴로 연결하면 챗봇이 “요즘 뭐가 인기야?” 같은 질문에 자연스럽게 대응할 수 있다.
@Tool(
name = "query_hot_keywords",
description = "최근 인기 있는 e-sports 관련 검색 키워드를 조회한다. (팀명, 리그명 등)"
)
public HotKeywordsResponse queryHotKeywords() {
return hotKeywordsService.getHotKeywords();
}
외부 API 확장
외부 Web API를 호출하는 툴을 추가해 e-sports 패치/새 소식 같은 요청을 지원했다.
@Tool(
name = "query_cs2_news",
description = "Counter-Strike 2 관련 최신 뉴스 5개를 조회한다. (Steam 공식 API 기반)"
)
public List<Cs2NewsItem> queryCs2News() {
int count = 5;
RestTemplate restTemplate = new RestTemplate();
String url = String.format(STEAM_NEWS_API, count);
SteamNewsResponse response = restTemplate.getForObject(url, SteamNewsResponse.class);
if (response == null || response.appnews() == null) {
throw new IllegalStateException("Steam API 응답이 비어있습니다.");
}
return response.appnews().newsitems();
}
모델이 “CS2 최근 소식 알려줘” 같은 요청을 받으면, 단순 문자열 응답이 아니라 실제 Steam API를 호출해 최신 뉴스 데이터를 가져온다.
AI가 단순히 텍스트를 생성하는 수준을 넘어, 실시간 데이터를 직접 조합해 답변하는 단계로 발전한 것이다.
마치며
처음엔 단순한 질의응답 수준이던 챗봇이었지만, Spring AI의 Tool Calling을 적용하면서 구조적으로 확장 가능한 형태로 발전했다.
핵심은 모델이 직접 도구를 선택해 호출한다는 점이었다.
이 덕분에 컨트롤러는 오직 사용자 질문 + 사용할 툴 목록만 전달하면 되고, 실제 어떤 도메인 로직이 실행될지는 AI가 문맥을 기반으로 판단한다.
그리고 다음 단계로는 LangGraph 기반의 확장을 계획하고 있다.
LangGraph는 Tool Calling보다 한 단계 발전된 방식으로, AI가 툴을 순차적 혹은 병렬적으로 조합해 실행할 수 있게 한다.
예를 들어 “이번주 인기팀 경기 일정 알려줘”라는 요청이 들어왔을 때,
① `query_hot_keywords()` → ② `query_schedule_by_team()`
순서로 툴을 자동 연결해 호출하는 그래프 형태의 실행 플로우를 구성할 수 있다.
이처럼 LangGraph를 적용하면, 단일 챗봇을 넘어 도메인 간 협력형 AI 시스템으로 발전할 수 있을 것이다.
'TIL' 카테고리의 다른 글
| Spring Boot 성능 최적화 9 (0) | 2025.11.11 |
|---|---|
| Spring Boot 성능 최적화 8 (0) | 2025.11.10 |
| 11/6 (0) | 2025.11.06 |
| 11/5 (0) | 2025.11.05 |
| 11/4 (0) | 2025.11.04 |