pile·
AI / ML·마켓컬리마켓컬리 Hello World·

AI에게 도메인을 가르치다 두 번 갈아엎은 이야기 — LLM Wiki + RAG 혼합기

컬리가 배송 도메인 지식을 LLM 에 주입하려다 마크다운 문서가 쌓이며 토큰 비용과 "lost in the middle"에 부딪혀, 검색 구조를 두 번 갈아엎은 과정을 다룬다. inverted index → 본문 임베딩 → 요약 임베딩+본문 FTS 분업으로 이어지며, 결국 "무엇을 모델에 맡기고 무엇을 도구·사람에 분담할지 선을 옮긴 작업"이라는 결론에 닿는다.

핵심 포인트
  • 1단계 inverted index 는 동의어 누락("새벽배송" vs "샛별")과 키워드 한 개로 무관 문서 7개 반환 등 토큰 낭비로 실패했다.
  • 2단계 본문 임베딩(sqlite-vec + multilingual-e5-small, 384차원/512토큰)은 동의어는 풀었지만 truncation·의미 평균화·약어 검색 불가가 남았다.
  • 3단계는 요약만 임베딩(의미 매칭)하고 본문은 FTS5 BM25(정확 매칭)로 분업해 양쪽 약점을 메웠다.
  • 다주제 문서를 "한 문서=한 주제"로 분리해 임베딩 의미 평균화 문제를 줄였다.
  • 검색은 의미 매칭 top3 + 키워드 매칭 top2 를 합쳐 중복 제거하고 의미 순위를 우선한다.
상세 정리
  • 배경: 도메인 지식 마크다운이 늘수록 LLM 컨텍스트에 다 넣기엔 토큰 비용이 커지고, 긴 컨텍스트 중간 정보가 누락되는 lost in the middle 이 생겼다.
  • 1단계 구조: 자모 prefix bucket 파일(예: ㅅ-ㅊ.md)에 키워드→문서 매핑을 둔 inverted index 를 만들었다.
  • 1단계 실패: LLM 이 도메인 동의어를 몰라 "새벽배송"과 "샛별"을 못 잇고, "용차" 한 단어로 문서 7개를 다 반환해 6배 토큰을 낭비했으며, 색인 동기화 비용도 컸다.
  • 2단계 도구: sqlite-vec 에 multilingual-e5-small(384차원, 512토큰 제한) 임베딩으로 본문을 색인했다.
  • 2단계 성과: 동의어가 자동 해결되고 한 번의 호출로 검색이 끝났다.
  • 2단계 truncation: 문서의 85%가 512토큰을 넘겨 뒷부분(최대 93%)이 임베딩에 안 들어갔고, wiki 요약 구조 덕에 사실상 요약만 임베딩되고 있었다.
  • 2단계 의미 평균화: 다주제 문서에서 "정책" 같은 일반어가 모든 검색에 약하게 매칭돼 정밀도가 떨어졌다.
  • 2단계 약어 한계: DOS-bot, TICKET-1234, KLS 같은 식별자·약어 검색이 임베딩으로는 거의 불가능했다.
  • 3단계 분리: 한 문서=한 주제 원칙으로 다주제 문서를 쪼개 평균화를 줄였다.
  • 3단계 이중 채널: 의미 매칭은 요약+별칭+키워드(100~200토큰)만 e5-small 로 임베딩하고, 정확 매칭은 본문 전체를 SQLite FTS5 BM25 로 검색한다.
  • 3단계 메타데이터: summary(LLM 작성 후 사람 검토), keywords, aliases 를 두고 본문은 FTS5 와 미리보기에만 쓴다.
  • 남은 한계: "컨티 정책" 검색에 "예약 설정 정책"이 약하게 끼는 일반어 노이즈가 일부 남고, summary 품질이 LLM 세션에 따라 편차가 있다.
  • 다음 후보: 헤딩 단위 청킹, max_seq_length 가 더 큰 모델, 가중치 동적 조정, 자동 품질 평가를 개선 후보로 든다.
왜 읽나사내 문서 기반 RAG 를 구축하며 임베딩만으로는 안 풀리는 동의어·약어·다주제 문제에 부딪힌 엔지니어에게, 임베딩과 FTS 분업 설계의 시행착오 레퍼런스.
마켓컬리
마켓컬리 Hello World 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (0)

이 글과 비슷한

  1. AI / ML·인프랩 (인프런)인프런 (인프랩)·

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

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

    #ai-agent#llm#llm-as-a-judge+2
  2. AI / ML·네이버 D2네이버 D2·

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

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

    #claude-code#multi-agent#ai-agent+2
  3. 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