Python, GRID, Gemini로 AI e스포츠 코치를 만든 방법 (해커톤 여정)
Source: Dev.to
Problem Statement
e스포츠 코치와 선수들은 데이터에 압도당합니다. GRID Open Platform은 놀라운 실시간 데이터 피드를 제공하지만, 복잡한 GraphQL 스키마를 고압 경기 중에 해석하는 것은 인간에게 불가능합니다. 우리는 다음을 수행할 수 있는 시스템이 필요했습니다:
- 실시간 게임 이벤트(Series State)의 혼란을 소화하기.
- 이를 실행 가능한 전략적 조언으로 변환하기.
- 선수들의 정신 상태(“Tilt” 요인)를 모니터링하기.
Solution: C9 Pulse
C9 Pulse는 Flask로 구축된 모듈형 웹 대시보드로, 실시간 커맨드 센터 역할을 합니다. 단순히 K/D 비율을 보여주는 것이 아니라, 어떻게 개선할지 알려줍니다.
Dashboard Overview
- Real‑time Economy Graph – 재정적 모멘텀을 시각화하여 적의 구매 라운드를 예측합니다.
- Tilt Meter – 사망 연속과 성과 하락을 과거 평균과 비교 분석하여 플레이어가 “틸트” 상태인지 감지하는 맞춤 알고리즘.
Coach Titan (The Heart) 🎙️
Google Gemini와의 통합을 통해 데이터에 개성을 부여합니다. Titan이라는 무자비하지만 지원적인 AI 코치를 만나보세요. 그는 타임아웃 중에 Edge‑TTS(Microsoft Azure)를 통해 조언을 전달하며, 플레이어가 화면에 집중하도록 돕습니다.
Example advice
“Hans Sama는 2/6 K/D로 어려움을 겪고 있습니다. 그의 자신감이 약해졌습니다. 공격적인 피크를 멈추고, 트레이드 기회를 만들어 정신을 재설정하세요.”
Implementation
Data Retrieval
표준 GRID 엔드포인트는 스케줄을 제공하지만, 나는 실시간 킬 피드가 필요했습니다. JetBrains AI Assistant(Junie)가 GRID GraphQL 스키마의 깊은 중첩을 탐색하고 몇 초 만에 쿼리를 구성하도록 도와주었습니다.
query GetSeriesState($id: ID!) {
seriesState(id: $id) {
games {
teams {
players {
name
kills
deaths
}
}
}
}
}
Match Analyzer
위 쿼리를 사용해 실시간 스트림을 처리하고, 즉시 경제‑위험 비율을 계산하는 MatchAnalyzer 클래스를 Python으로 만들었습니다.
Backend Stack
- Backend: Python 3.9+ & Flask
- Data Source: GRID Open Platform API (GraphQL)
- AI Logic: Google Gemini API (전략적 조언 생성)
- Voice Engine:
edge-tts(로컬에서 실행해 지연 시간 0) - Development Environment: JetBrains PyCharm + Junie AI
What I Learned 🚀
- Context is king. Tilt Meter를 구축하려면 단순한 K/D 비율을 넘어선 관찰이 필요했습니다. 목적이 뚜렷한 “entry fragger” 0/3과 쉬운 샷을 놓치는 플레이어를 구분하는 것이 핵심이었습니다.
- AI can be a teammate. 올바른 데이터(GRID)와 강력한 도구(JetBrains)로 구동될 때, 코드는 압박 상황에서 지원적인 존재가 될 수 있습니다.
- 이 프로젝트는 단순 CLI 스크립트에서 완전한 음성 지원 대시보드로 진화했으며, 데이터 과학과 스포츠 심리학 사이의 시너지를 보여줍니다.
Project repository:
Full submission on Devpost: