본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 05. 27. 02:11

Hermes Agent를 사용하여 모든 제출 내용으로부터 학습하는 로컬 인터뷰 코치 제작기

요약

Hermes Agent를 활용하여 사용자의 학습 패턴을 기억하고 진화하는 로컬 인터뷰 코치 'PrepPilot' 제작 사례를 소개합니다. Next.js와 FastAPI를 기반으로 로컬 환경에서 동작하며, 사용자의 문제 해결 방식과 기술적 강점을 실시간으로 학습하여 프로필에 반영합니다.

핵심 포인트

  • Hermes Agent를 핵심 지능 계층으로 활용하여 개인화된 코칭 제공
  • 로컬 우선(Local-first) 설계로 데이터 프라이버시 및 개인화 강화
  • 사용자의 제출 내용을 바탕으로 기술 파일(skill files)을 지속적으로 업데이트
  • Next.js, FastAPI, SQLite를 활용한 로컬 실행 환경 구축

이 글은 Hermes Agent Challenge를 위한 제출물입니다.

요약 (TL;DR): PrepPilot은 Hermes Agent 기반의 로컬 인터뷰 코치로, 사용자의 문제 해결 방식을 기억하고, 전체 브라우저 워크스페이스에서 코드를 리뷰하며, 매 제출 후 프로필을 업데이트하고, 자체 기술 파일(skill files)을 눈에 보이게 진화시킵니다. 이 서비스는 Next.js, FastAPI, SQLite, 208개의 오리지널 공유 문제, 비공개 커스텀 문제와 함께 제 컴퓨터의 WSL Ubuntu 환경에서 Hermes를 통해 검증된 상태로 로컬에서 실행됩니다.

내가 만든 것

내가 아는 모든 개발자는 인터뷰 준비에 대해 똑같은 불만을 가지고 있습니다.

LeetCode는 당신을 모릅니다. 당신이 반쯤 잠든 상태에서도 배열(array) 문제는 풀 수 있지만, 그래프(graph) 문제에서 재귀(recursion)가 사용되면 얼어붙는다는 사실을 모릅니다. 공식적인 증명보다 시각적인 설명이 당신에게 더 도움이 된다는 것도 모릅니다. 당신이 계속해서 똑같은 엣지 케이스(edge case)를 놓치고 있다는 사실도 기억하지 못합니다.

PrepPilot은 이를 해결하기 위한 나의 시도입니다.

이것은 로컬 우선(local-first) 인터뷰 코치로, 각 학습자가 로컬 이메일/비밀번호 프로필을 생성하고, 전체 대시보드 워크스페이스에서 문제를 풀며, Hermes로부터 리뷰를 받고, 피드백을 평가하며, 코칭 모델이 적응하는 과정을 지켜볼 수 있습니다. 하나의 이메일은 하나의 프로필을 의미합니다. 각 프로필은 별도의 세션, 커스텀 문제, 평가 진행 상황, 통계 및 Hermes 메모리를 가집니다.

중요한 점은 다음과 같습니다: Hermes는 앱을 꾸며주는 장식용 래퍼(wrapper)가 아닙니다. Hermes는 핵심 지능 계층(intelligence layer)입니다. 대시보드, 문제 은행, 커스텀 문제, 세션 기록은 모두 동일한 FastAPI 제출 파이프라인으로 흐르며, 이 파이프라인이 Hermes 기술(skills)을 호출합니다.

그것이 내가 속이고 싶지 않았던 지점이었습니다. 만약 앱이 학습한다고 주장한다면, 학습 경로는 데모 프롬프트 뒤에 숨겨지는 것이 아니라 제품 내에서 눈에 보여야 하며 로컬 시스템에 저장되어야 합니다.

작동하는 앱

로컬 프로필

이벤트 빌드(event build)를 위해 배포/인증(deployment/auth)의 복잡성을 제거했습니다. Google OAuth도, GitHub OAuth도, 외부 인증 장벽도 없습니다. 로컬에서 실행하며 이메일당 하나씩 원하는 만큼의 로컬 프로필(local profiles)을 생성할 수 있습니다.

Telegram은 선택적인 사용자 이름 식별 단축키로 계속 사용할 수 있지만, 주된 경로는 로컬 이메일/비밀번호 프로필입니다. 데이터베이스가 사용자의 개인 컴퓨터에 있을 때는 이 방식이 가장 합리적이기 때문입니다.

대시보드 및 평가 (Dashboard And Assessment)

대시보드는 Hermes가 가시화되는 공간입니다:

  • 현재 평가 진행 상황 (current assessment progress)
  • 점수 추세 (score trend)
  • 주제 지도 (topic map)
  • 활성 문제 (active problem)
  • 기술 진화 타임라인 (skill evolution timeline)
  • 로컬 프로필 데이터 (local profile data)

신규 사용자는 3개의 문제로 구성된 보정 평가(calibration assessment)를 거칩니다. Hermes는 해당 제출 내용을 검토하여 foundation(기초), interview-ready(면접 준비 완료), 또는 advanced(고급)와 같은 시작 레벨을 할당합니다.

확장된 문제 은행 (Expanded Problem Bank)

이제 앱은 크롤링된 문장이 아닌, 208개의 독창적인 공유 문제를 포함하여 제공됩니다. 문제 은행은 다음을 다룹니다:

  • 클래식 DSA(자료구조 및 알고리즘) 패턴
  • GSoC 및 오픈 소스 기여 과제
  • GSSoC 스타일의 커뮤니티 과제
  • Unstop 스타일의 채용 챌린지
  • 백엔드(backend), 프론트엔드(frontend), 풀스택(full stack) 및 웹 플랫폼 문제
  • 데이터/Kaggle 스타일 과제
  • AI/ML 및 RAG 과제
  • 데이터베이스(database), 보안(security) 및 시스템 디자인(system design) 기초

사용자는 또한 개인용 커스텀 문제를 생성할 수 있습니다. 이러한 문제는 해당 로컬 프로필에만 귀속됩니다.

문제 카드 해결 흐름 (Problem Card To Solve Flow)

문제를 클릭하면 이제 단순한 정지된 카드가 아닌 실제적인 흐름(flow)이 시작됩니다. 카드가 열리면 문제 설명(problem statement), 예시(examples), 제약 조건(constraints), 힌트(hints), 상태(status), 그리고 Solve 버튼이 나타납니다. 해당 버튼은 PrepPilot 세션을 생성하거나 재사용하여 학습자를 전체 /solve 워크스페이스로 안내합니다.

Full Solve Workspace (전체 풀이 워크스페이스)

작은 모달(modal) 창은 사라졌습니다. 이제 풀이는 전문적인 연습 탭처럼 앱 전체를 채우는 전체 페이지 워크스페이스인 /solve에서 이루어집니다:

  • 문제 선택(Problem Selector) 탭
  • 풀이(Solve) 탭
  • 문제 설명(problem statement), 예시(examples), 제약 조건(constraints), 힌트(hints)
  • Monaco 에디터
  • 언어 선택기(language selector)
  • 제출(submit) 버튼
  • Hermes 리뷰 출력
  • 점수 세부 내역(score breakdown)
  • 1~5점 도움 정도 평가(helpfulness rating)

Hermes Review (Hermes 리뷰)

솔루션이 제출되면, Hermes는 코드, 언어, 소요 시간, 점수, 점수 세부 내역, 상태 및 피드백을 저장합니다. 그런 다음 주제 통계(topic stats)와 코칭 프로필(coaching profile)을 업데이트합니다.

학습자가 피드백에 대한 등급을 매긴 후, Hermes는 스킬 파일(skill file) 자체를 업데이트할 수 있습니다. 이것이 제가 가장 중요하게 생각하는 루프(loop)입니다. 피드백이 블랙박스 속으로 사라지지 않고, 코치를 변화시킵니다.

Custom Problems (사용자 정의 문제)

학습자가 자신만의 문제를 가져오고 싶다면 그렇게 할 수 있습니다. 사용자 정의 문제는 기본 제공(seeded) 문제와 정확히 동일한 파이프라인을 사용합니다:

사용자 정의 문제 -> 세션 -> 코드 제출 -> Hermes 리뷰 -> 통계/프로필 업데이트 -> 피드백 등급 매기기 -> 스킬 진화 확인

이를 통해 시스템의 정직함을 유지할 수 있습니다. 하나의

로컬 Hermes 상태 (Local Hermes Status)

설정(Settings) 페이지에서는 로컬 기반(foundation)이 실제로 연결되어 있는지 여부를 보여줍니다:

  • FastAPI 백엔드 (backend)
  • SQLite 메모리 (memory)
  • 로드된 Hermes 스킬 버전 (loaded Hermes skill versions)
  • WSL Ubuntu Hermes CLI
  • 휴리스틱(heuristic) 또는 선택적 외부 추론 모드 (optional external inference mode)
  • Telegram 설정 여부 (configured or off)

제 컴퓨터에서 Hermes는 WSL Ubuntu에 설치되어 있습니다:

/home/sreej/.local/bin/hermes
Hermes Agent v0.12.0

해당 상태는 앱 자체에서 GET /api/v1/hermes/status를 통해 나타납니다.

Hermes 사용 방식

PrepPilot에는 세 가지 핵심 Hermes 스킬이 있습니다.

problem_selector.md

이 스킬은 다음에 무엇을 풀어야 할지를 선택합니다. 취약한 주제, 최근 점수, 난이도, 평가 상태 및 문제의 신선도(freshness)를 검토합니다. 208개의 공유 문제 중에서 선택하거나 프로필 소유의 커스텀 문제 중에서 선택할 수 있습니다.

solution_reviewer.md

이 스킬은 사용자의 코드를 검토합니다. 검토는 다음과 같이 구조화되어 있습니다:

  • 정확성 (correctness): 40점
  • 복잡도 (complexity): 30점
  • 예외 케이스 (edge cases): 20점
  • 스타일 (style): 10점

피드백은 Hermes가 사용자에 대해 구축한 프로필을 통해 개인화됩니다.

coaching_profiler.md

이것은 메모리 계층 (memory layer)입니다. 반복되는 제출 내용을 모니터링하고 학습자 프로필을 업데이트합니다:

  • 반복되는 실수 (recurring mistakes)
  • 설명 스타일 선호도 (explanation style preference)
  • 주제별 강점 (topic strengths)
  • 취약 영역 (weak areas)
  • 속도 (pacing)
  • 보정 수준 (calibration level)

해당 프로필은 문제 선택기(problem selector)와 검토기(reviewer) 모두에 다시 입력됩니다.

학습 루프 (The Learning Loop)

사용자가 문제를 해결함
  -> FastAPI 세션 제출 엔드포인트 (session submission endpoint)
  -> Hermes solution_reviewer
...

핵심은 문맥의 복리 효과 (compounding context)입니다. 일반적인 준비 플랫폼은 매번 새로 시작합니다. PrepPilot은 지난주에 무슨 일이 있었는지 기억하고 있는 것처럼 느껴져야 합니다.

아키텍처 (Architecture)

로컬 브라우저 (Local Browser)
  -> Next.js 대시보드 및 /solve 워크스페이스 (workspace)
  -> FastAPI 백엔드 (backend)
...

Telegram 봇 코드는 존재하지만, 이번 이벤트 빌드(event build)를 위해 의도적으로 데모를 로컬(local)로 유지하고 있습니다. 이를 통해 배포 위험, 인증 제공자(auth-provider) 설정, 웹훅(webhooks), 클라우드 데이터베이스 문제를 제거했습니다. 로컬 제품이야말로 심사위원들이 직접 실행하고 느꼈으면 하는 결과물입니다.

Quick Start (빠른 시작)

# Backend (백엔드)
py -3.10 -m venv backend/.venv
backend/.venv/Scripts/python.exe -m pip install -r backend/requirements.txt
...

그 다음 다음을 여세요:

로컬 프로필을 생성하고, 세 개의 보정 문제(calibration problems)를 해결한 다음, 설정(Settings)에서 로컬 Hermes 연결 상태를 확인하세요.

로컬에서 테스트한 항목

최종 이벤트 빌드를 위해 다음 항목들을 테스트했습니다:

  • 로컬 이메일/비밀번호 프로필 생성
  • 중복 이메일 방지
  • 별도의 진행 상황을 가진 두 개의 프로필
  • 확장된 208개 문제 뱅크 (problem bank)
  • 문제 카드 -> /solve 이동
  • 코드 제출 -> Hermes 리뷰
  • Hermes 리뷰 후 재제출
  • 피드백 평점 -> 프로필/기술 경로 (skill path)
  • 비공개 커스텀 문제 생성 및 해결
  • WSL Ubuntu Hermes CLI를 통한 설정(Settings) 내 Hermes 상태 확인
  • OpenRouter 키 불필요
  • 명시적으로 설정하지 않는 한 Telegram 비활성화

보완이 필요한 부분 (Where I Would Push Back)

학습 루프(learning loop)가 인상적으로 변하기까지는 시간이 걸립니다. 첫날에는 선택기(selector)가 주로 사려 깊은 규칙 엔진 (rule engine) 역할을 합니다. 세션 8~10회차 정도가 되면 흥미로운 동작이 시작됩니다: 난이도가 변하고, 설명 스타일이 바뀌며, 문제 선택이 사용자가 반복하는 실수들을 반영하기 시작합니다.

이것이 제가 기술 파일(skill files)을 볼 수 있게 만들고 싶었던 이유이기도 합니다. 앱이 학습하고 있다고 주장한다면, 학습자는 무엇이 변했는지 검사할 수 있어야 합니다.

다음에 구축할 항목

모의 인터뷰 모드 (Mock interview mode): Hermes가 면접관처럼 행동하고 인터뷰 후 평가를 작성하는, 제한 시간이 있는 2문제 라운드.

기업/프로그램 트랙 (Company/program tracks): GSoC, GSSoC, Unstop, 백엔드 인터뷰, 프론트엔드 인터뷰, 데이터 역할, 그리고 시스템 디자인 기초 (system design foundations).

추후 배포: 이벤트 데모의 안정성을 위해 이번 빌드에서는 의도적으로 배포(deployment) 과정을 제외했습니다. 나중에 동일한 FastAPI 백엔드를 영구 데이터베이스(persistent database) 및 웹훅(webhook) 설정과 함께 패키징할 수 있습니다.

최종 결론 (Final Take)

수백 가지의 인터뷰 준비 도구들이 있습니다. 그들 대부분은 여러분에게 더 많은 문제만을 던져줍니다.

PrepPilot은 패턴을 파악하는 코치를 제공하려고 시도합니다.

이 도구는 로컬(locally)에서 실행됩니다. 여러분의 기록을 로컬에 저장합니다. 실제 에디터에서 실제 문제를 풀 수 있게 해줍니다. Hermes를 통해 여러분의 코드를 리뷰합니다. 여러분에 대한 모델(model)을 업데이트합니다. 그러면 다음 문제는 더 이상 무작위가 아닙니다.

그것이 바로 제가 이 프로젝트를 만든 이유입니다.

링크:

  • GitHub: https://github.com/ogMaverick12/preppilot
  • Hermes Agent: https://hermes-agent.nousresearch.com

Nous Research의 Hermes Agent를 통해 Hermes Agent 자체로 제작되었습니다. 로컬 런타임(Local runtime): FastAPI, SQLite, Next.js 14, WSL Ubuntu Hermes CLI. 이벤트 빌드: 로컬 전용, 클라우드 인증 불필요, 외부 추론 키(external inference key) 불필요.

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0