pile·
AI / ML·인프랩 (인프런)인프런 (인프랩)·

학습 에이전트 — AI 두뇌 구축하기

인프런이 강의 학습 에이전트를 구축하며 겪은 기술 스택 선정, 컨텍스트·도구 설계, LLM-as-a-Judge 품질 개선, 비용 최적화 전략을 다룬다. LLM SSE 스트리밍 처리를 위해 Spring MVC + Virtual Thread + Spring AI를 선택하고, 명시적 프롬프트 캐싱으로 입력 토큰을 90% 절감하는 과정까지 실전 경험이 담겨 있다.

핵심 포인트
  • LLM SSE 스트리밍(수십 초 연결 유지)을 위한 기술 스택으로 Spring MVC + Virtual Thread + Spring AI를 최종 채택했다. Webflux의 리액티브 전염 문제와 Nest.js의 CPU 바운드 블로킹 위험을 고려한 결정이다.
  • 에이전트에 8종 컨텍스트(커리큘럼, 진도, 자막, 비디오 프레임, 유저 메모리 등)를 제공하되, Lost in the Middle 방지를 위해 필요 시 Tool로 동적 로드하는 구조를 설계했다.
  • 이미지 분석은 별도 서브에이전트에 위임해 환각을 줄이고 전체 입력 토큰도 절감했다.
  • LLM-as-a-Judge 워크플로우(학습 에이전트 → 평가관 에이전트 → 조교 에이전트)와 약 40개의 Golden Dataset으로 답변 품질을 측정하고 프롬프트를 개선한다.
  • 명시적 캐싱으로 입력 토큰 90% 할인을 받으며, gemini-3.1-flash-lite 기준 30,000 토큰 캐시 시 손익분기점은 시간당 4.44 요청이다.
상세 정리
  • 기술 스택 선정 배경: LLM SSE 스트리밍은 수십 초간 연결을 유지해야 해서 전통적 스레드 풀은 스레드 고갈이 발생한다. Spring MVC+Virtual Thread, Webflux, Nest.js 세 가지를 비교했다.
  • Virtual Thread 채택: 블로킹 I/O 시 캐리어 스레드에서 자동 분리(unmount)돼 스레드 고갈 없이 동기적 코드 스타일을 유지한다. Java 25부터 synchronized 메서드 pinning 이슈도 대폭 개선됐다.
  • Webflux 탈락: Reactor Mono/Flux는 SSE에 최적화돼 있으나, 리액티브 전염 문제(한 지점 블로킹 시 전체 블로킹)가 외부 I/O가 복잡한 AI 파이프라인에서 위험하다.
  • 컨텍스트 설계: 8종 컨텍스트(커리큘럼, 수강생 진도, 사용 언어, 유저 메모리, 자막, 비디오 프레임, 수업 요약, 페르소나) 중 과도한 컨텍스트는 LLM 품질 저하와 토큰 비용 증가를 유발하므로 필요 시 Tool로 동적 로드한다.
  • 유저 메모리: Spring AI의 Advisor로 AOP 개념을 구현해 "더 간단하게 설명해줘" 같은 요청을 기억하고 이후 모든 답변에 자동 반영한다.
  • 비디오 화면 캡처: 이미지 분석 전용 서브에이전트에 위임한다. 이미지 토큰화는 입력 토큰을 크게 늘리므로 서브에이전트로 책임을 한정해 비용과 환각을 동시에 줄인다.
  • LLM-as-a-Judge 구성: 평가관 에이전트가 학습 에이전트 답변과 Golden Dataset(약 40개 정답지)을 비교해 점수와 피드백을 생성한다. 조교 에이전트가 피드백을 검토하고 프롬프트를 수정한다.
  • 과적합 방지: 단일 피드백으로 즉시 프롬프트를 수정하지 않고, 여러 피드백에서 동일 문제가 반복될 때만 수정한다. 사람 검수 단계 포함 시 전자동보다 품질이 더 높았다.
  • 암시적 캐싱의 한계: LLM API가 자동으로 동일한 시스템 프롬프트를 캐시하지만, 동적 컨텍스트가 포함되면 호출 간 프롬프트가 달라져 실제 캐싱 효과가 미미하다.
  • 명시적 캐싱 도입: 개발자가 캐시를 직접 생성·관리해 TTL을 제어한다. gemini-3.1-flash-lite 기준 캐시 저장 비용 1달러/1M Token/시간, 입력 토큰 절감 90%. 30,000 토큰 캐시 시 손익분기점은 시간당 4.44 요청이다.
  • 명시적 캐싱 제약: 캐시 포함 요청에서 시스템 프롬프트와 Tool Definition이 페이로드에 중복 포함되면 에러가 발생한다. 세션 간 공유 불가한 동적 데이터는 캐시에서 제외해야 한다.
  • ADR 활용: 기술 의사결정을 ADR 문서로 기록하고 CLAUDE.md, AGENTS.md에 링크해 AI 코딩 에이전트가 컨텍스트를 파악하며 협업하도록 설계했다.
왜 읽나LLM SSE 스트리밍 서버 선택, 멀티 에이전트 비용 최적화(명시적 캐싱·서브에이전트 분리), LLM-as-a-Judge 품질 관리를 실제 서비스에 적용한 경험이 필요한 백엔드·AI 엔지니어에게 실전 레퍼런스다.
인프랩 (인프런)
인프런 (인프랩) 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (0)

이 글과 비슷한

  1. AI / ML·네이버 D2네이버 D2·

    AI 에이전트 회사 차리기: 설립부터 어디서든 동기화까지

    네이버 ENGINEERING DAY 2026 발표. Claude Code를 매일 쓰지만 매번 초기화되는 문제를 해결하기 위해 NaverMadCat이라는 다중 AI 에이전트 조직 프레임워크를 구축한 경험을 다룬다. 비서실장 역할의 에이전트가 10개 부서 에이전트를 조율하며, 어느 환경에서 접속해도 동일한 컨텍스트로 동작하도록 동기화 메커니즘을 구현했다.

    #claude-code#multi-agent#ai-agent+2
  2. AI / ML·vercel-blogVercel Blog·

    AI Gateway에서 실시간 음성 에이전트 구축하기

    Vercel AI Gateway가 음성·오디오 기능을 정식 지원한다. 실시간 대화 음성(Realtime Voice), 텍스트→음성(TTS), 음성→텍스트(STT) 세 가지를 기존 텍스트/이미지 모델과 동일한 라우팅·인증·모니터링 체계 위에서 사용할 수 있다. OpenAI gpt-realtime-2·Whisper와 xAI Grok 오디오 모델을 지원하며, AI SDK 7 베타로 제공된다.

    #llm-app#ai-sdk#realtime-voice+2
  3. AI / ML·dropbox-techDropbox Tech·

    DSPy로 AI 평가를 더 나은 응답으로 전환하기 — Dropbox Dash Chat 사례

    Dropbox가 Dash Chat 에이전트의 응답 품질을 높이기 위해 DSPy 최적화 프레임워크를 도입한 과정을 다룬다. 인간 레이블로 LLM 평가자(judge)를 보정하고, 보정된 judge로 에이전트의 시스템 프롬프트를 자동 최적화하는 두 단계 전략으로 불완전 답변 26% 감소와 토큰 사용 5.4% 절감을 달성했다.

    #ai-agent#llm-evaluation#dspy+2