Hun-Bot's Devlog

알고리즘 학습 자동화 +⍺: RAG 기반 유사 문제 추천 시스템
단순 복습을 넘어, 기억에 오래 남도록 하는 AI 기반 학습 자동화 설계

알고리즘 학습 자동화 +⍺: RAG 기반 유사 문제 추천 시스템

algorithm RAG LLM automation

왜 만들려고 하는가?

기존에 구축한 에빙하우스 망각 곡선 기반의 Slack 알림 봇은 이미 푼 문제를 다시 들여다보게 하는 데는 성공적이었습니다. 하지만 장기 기억으로 유지하고, 알고리즘의 실력을 늘리기 위해서는 풀었던 유형에 대한 변형 문제 풀이같은 유형의 문제 풀이가 있어야 하기에 복습할 당시, 제가 복습할 문제를 AI에게 던져서 “이것과 유사한 문제를 찾아줘”라는 방식으로 유사한 문제를 풀었고, 이 부분을 자동화하려고 합니다.

약 일주일간 문제를 풀고 공부해나가면서 현재 제가 겪고 있는 문제점은 아래와 같습니다.

플랫폼,언어 차이: 백준(Baekjoon) 문제를 풀고 나면, 이와 유사한 논리를 가진 외국 사이트(LeetCode, Codeforces)의 문제를 찾기 위해 다시 AI에게 물어봐서 검색해야 합니다.

검색 노이즈: 문제의 제목이나 내용이 비슷하다고 해서 반드시 같은 알고리즘을 요구하는 것은 아닙니다. 당연히 풀이 방법이 다양하지만, 내가 한 내용을 복습하기 위해선 최대한 유사한 내용을 찾아야 한다고 생각합니다.


알고리즘 문제 찾기

알고리즘 문제에서, 제가 매칭해야 할 데이터는 다음과 같습니다.

  • 필요 없는 부분(스토리): 문제에 입혀진 스토리(예: 철수의 사과 사기). 이는 검색 시 제거해야 할 노이즈입니다.
  • 알고리즘 형태, 태그: 문제의 핵심이 되는 자료구조와 알고리즘 논리(예: 2차원 배열의 Prefix Sum).
  • 제약 조건: 시간 복잡도와 메모리 제한.

어떤 기술이 들어가는가: RAG 기반 아키텍처

단순한 키워드 매칭이 아닌, 의미적 유사성을 판단하기 위해 RAG (Retrieval-Augmented Generation) 시스템을 구축하려고 합니다. RAG를 활용할만한 프로젝트를 하려고 했는데, 마침 좋은 기회가 생겼네요^^

우선 아래와 같은 흐름으로 개발이 진행될 예정입니다.

1. 지식 베이스 (Vector Database)

LeetCode와 Codeforces의 문제 데이터셋을 수집하여 벡터 데이터베이스(Pinecone 또는 ChromaDB)에 저장합니다. 이때 문제 본문 전체가 아닌, LLM이 전처리한 알고리즘 요약본을 임베딩하여 검색 정확도를 높입니다.

2. 3단계 파이프라인

정확한 매칭을 위해 다음 과정을 거칩니다.

Metadata Filtering: 백준의 난이도(Gold/Silver등등)와 태그를 기반으로 후보군을 1차 필터링합니다.

Semantic Search: OpenAI의 text-embedding-3-small 모델을 통해 문제 골격의 유사도를 계산합니다.

LLM Re-Ranking: 상위 5개 후보군을 GPT-4o-mini에게 전달하여, 제약 사항까지 일치하는 최적의 1순위 문제를 최종 선정합니다.


비용 및 효율성 분석(GPT 작성)

이 시스템은 개인 블로그의 인프라(GitHub Actions) 내에서 구동되므로 유지비용이 거의 발생하지 않을 것으로 예상이 된다고 하는데 돌려봐야지 알겠죠? 최근에 Github Actions 관련해서 뭔가 있었는데, 흠.. 아마 Action을 못 쓴다면 Jenkins로 돌리면 되지 않을까 싶습니다.

항목사용 기술비용 (30문제 기준)
저장소Pinecone Starter Plan$0 (Free)
임베딩text-embedding-3-small약 $0.0006
추론/검증GPT-4o-mini약 $0.15
컴퓨팅GitHub Actions$0 (Public Repo)
합계약 $0.15 (한화 약 200원)

향후 계획

단순히 “복습할 시간입니다”라는 알림을 받는 단계를 넘어, “어제 푼 백준 문제와 유사한 리트코드 Medium 문제를 추천합니다”라는 메시지를 받는 환경을 목표로 합니다.

이 자동화가 완성되면, 저는 더 이상 문제를 찾기 위해 문제 링크를 복사해서 AI에게 던지는걸 하지 않아도 됩니다.

Slack 메시지 하나로 학습을 이어나갈 수 있게 될 것입니다. 시스템 구축이 완료되는 대로 구체적인 벡터 DB 업로드 스크립트와 프롬프트 엔지니어링 과정을 공유하겠습니다.

목차

댓글