한성대학교 클라우드 컴퓨팅 산학협력 프로젝트
Team 토깽스터 | 김혜진, 임혜정, 김서희
Steam의 약 70,000개에 달하는 방대한 게임 라이브러리에서 사용자에게 최적화된 게임을 추천하는 AI Agent 기반 시스템입니다. 자연어 질의를 통해 사용자의 취향, 예산, 상황을 종합적으로 분석하여 정확도 높은 게임 추천을 제공합니다.
배포 URL: https://game-picker.netlify.app
GitHub Repository: https://github.com/AI-GAME-AGENT
-
게임 선택의 어려움
- Steam의 약 70,000개 방대한 게임 라이브러리
- 너무 많은 선택지로 인한 의사결정 피로
- 늘 비슷한 인기 게임만 추천되는 문제
-
커뮤니티 후기의 한계
- 개인화된 추천 불가능
- 일반적인 리뷰만 제공
-
정보 신뢰성 문제
- 광고성 리뷰 구분의 어려움
- 오래된 정보 혼재
자연어로 질문하면 AI Agent가 여러 도구를 조합해 가장 적절한 게임을 추천하는 시스템을 개발했습니다. 직관적인 인터페이스와 다중 Agent 협업을 통해 사용자에게 정확도 높은 맞춤 게임을 제공합니다.
AI Agent의 정의: 사용자의 목표를 달성하기 위해 자율적으로 추론하고, 계획하며, 행동하는 지능형 소프트웨어 시스템
-
LLM
- AWS Bedrock의 Claude 3 Haiku
- Strands Agent SDK 활용
-
Retrieval
- Bedrock Knowledge Base
- 벡터 기반 의미 검색 구축
-
Tools
- DynamoDB 조건 필터
- 상세 게임 정보 조회
- 웹 검색 (최신 리뷰 및 업데이트 정보)
-
Memory
- DynamoDB 기반
- 세션별 대화 히스토리 유지
단순한 챗봇이 아닌 복수의 도구를 활용해 스스로 계획하고 행동하도록 설계했습니다.
- Thought (사고): 모델이 현재 상황을 분석하고 다음 단계를 계획
- Action (행동): 계획에 따라 구체적인 행동 수행 (정보 검색, 계산, 도구 사용 등)
- Observation (관찰): 행동의 결과를 관찰하고 평가하여 결론 도달
출처: Yao et al., 2023 - ReAct: Synergizing Reasoning and Acting in Language Models
의미 기반 검색과 조건 기반 검색을 결합하여 검색 정확도를 극대화했습니다.
Vector Only vs Filter Only
| Vector Only | Filter Only | Hybrid (본 시스템) |
|---|---|---|
| 의미 기반 검색만 사용 | 조건 필터만 사용 | 두 방식 결합 |
| 자연어 이해 우수, 취향/분위기 반영 | 정확한 조건 필터, 가격/장르 반영 | 의미 이해 + 정확한 조건 반영 |
| 정확한 조건 반영 실패 | 의미 이해 불가, 취향/상황 반영 실패 | 양쪽 장점 활용 |
- Bedrock Knowledge Base: 벡터 검색용
- DynamoDB: 메타데이터 필터링용
출처: AWS - Hybrid search with Amazon OpenSearch
Steam API를 통해 110,000개의 게임 데이터 수집
목적: Semantic Search (의미 기반 검색)용 게임 문서 벡터 저장소
저장 데이터:
- 게임명 (name)
- 게임 설명 요약 텍스트 (short_description)
- 게임 카테고리 (categories)
- 게임 장르 (genres)
선정 이유: 자연어 질의에 대한 의미 기반 검색으로 취향 및 상황 기반 유사 게임을 고정확도로 찾을 수 있음
저장 데이터:
- app_id (Primary Key)
- name
- genres
- price (USD)
- is_multiplayer
- positive/negative_review
- tags
- description
- 외 Kaggle Steam 데이터 전체 필드
선정 이유: 대용량 JSON을 스키마 없이 빠르게 조회 및 확장 가능
Steam 원본 데이터는 수십 개의 필드와 긴 텍스트로 구성되어 Bedrock Knowledge Base 업로드 시 오류가 발생하는 문제가 있었습니다.
전처리 작업:
- 핵심 정보(게임명, 요약 설명, 장르, 카테고리, 태그)를 선별하여 단일 문서 형태로 재구성
- 과도하게 긴 필드(detailed_description, screenshots 등) 제거로 문서 크기 최적화
- 카테고리 정보 기반 멀티플레이 여부 추가 생성으로 검색·추천 품질 향상
- 모든 게임 데이터를 자연어 기반 JSONL 문서로 변환하여 Bedrock이 안정적으로 임베딩할 수 있도록 정제
사용자가 자연어로 게임 추천 요청
- 예시: "2만원 이하 커플 퍼즐 게임 추천해줘"
- 키워드, 조건, 상황 요소 추출
- 장르 (Puzzle)
- 가격 (≤2만원)
- 상황 (커플)
- 모드 (협동)
- 어떤 도구를 사용할지 "계획(Plan)" 수립
- 의미 기반 검색 + 조건 기반 필터링 필요 여부 판단
- AWS Bedrock Knowledge Base (Vector DB)에 쿼리 전달
- 자연어 의미 기반으로 유사 게임 후보군 검색
- Top-N 후보 결과를 Agent로 반환
- DynamoDB 메타데이터 기반 정밀 조건 필터링
- max_price, genres, 멀티플레이 여부 등
- 최신 리뷰, 패치, 업데이트 정보가 필요한 경우
- Strands에서 제공하는 기본 웹 검색 툴 사용하여 최신 데이터 보강
- 특정 후보의 상세 정보가 필요할 때 ID 기반 조회
- Steam 리뷰 수, 평점 등 데이터 확보
- Tools를 사용한 결과를 종합 평가 및 정렬
- 3~5개의 Top 추천 게임 선정
- 각 추천에 설명(reasoning) 생성
- 추천 게임 목록
- 가격, 장르, 플레이 방식 등 핵심 정보
- 사용자의 요구와 어떻게 맞는지 이유 설명 및 분석
- 필요시 추가 정보 요청 (예산, 분위기, 난이도 등)
로컬 Python 실행 환경
- Agent Framework: Strands Agent SDK
- LLM: AWS Bedrock Claude 3 Haiku
- Vector DB: Bedrock Knowledge Base
- Metadata DB: AWS DynamoDB
- Web Search: Strands 제공 웹 검색 툴
개발
- Server: FastAPI
배포
- Render 클라우드에 배포하여 REST API 형태로 제공
개발
- Main Library: React, react-router-dom
- Styling: SCSS, Keyframe
- Data Fetching: Axios
- Build/Bundler: Vite
배포
- API 연동 후 Netlify에 배포
로컬 Python 기반 Agent를 웹에서 호출 가능한 서비스 구조 (API + Web UI)로 확장
로컬 CLI 기반 실행으로 자연어 질의에 대한 정확한 게임 추천 제공
사용자의 감성적 요구사항을 분석하여 적합한 게임 추천
직관적인 웹 인터페이스를 통해 누구나 쉽게 접근 가능
김혜진 (2271340) - 모바일소프트웨어트랙/웹공학트랙
- AI Agent 파이프라인 구축
- 메타데이터 DB (DynamoDB) 구축
- 백엔드 API 개발
김서희 (2171186) - 웹공학트랙/모바일소프트웨어트랙
- 데이터 수집 및 전처리
- Vector DB (Bedrock Knowledge Base) 구축
- AWS 환경 구성 및 관리
임혜정 (2191233) - 웹공학트랙/모바일소프트웨어트랙
- UI 디자인 및 프론트엔드 개발
- API 연동 및 데이터 처리
- 프론트 서버 배포
- 김서희: 2171186@hansung.ac.kr
- 김혜진: hjnee222@gmail.com
- 임혜정: 2191233@hansung.ac.kr
- AWS - What is AI Agents
- Yao et al., 2023 - ReAct: Synergizing Reasoning and Acting in Language Models
- AWS - Hybrid search with Amazon OpenSearch
한성대학교 클라우드 컴퓨팅 수업 | 7반
지도교수: 김성동 교수님 | 멘토: 임지훈 멘토님