---
title: "임베딩만 믿다가 정확도 1%였던 RAG, 피드백 루프 붙이니 67%로"
published: 2026-01-06T23:35:50.000Z
canonical: https://jeff.news/article/517
---
# 임베딩만 믿다가 정확도 1%였던 RAG, 피드백 루프 붙이니 67%로

RAG에서 검색과 생성 사이 피드백 루프가 없는 문제를 Wilson 점수와 동적 가중치로 해결. 시맨틱 유사도가 틀릴 때 0%→60% 정확도 개선.

- Chroma의 작년 7월 연구에서 이미 밝혀진 사실: 컨텍스트 윈도우를 아무리 키워도 검색(retrieval) 문제는 해결 안 됨. Claude, GPT-4.1, Gemini 2.5 포함 18개 LLM 테스트 결과, 넣을 수 있는 양과 무관하게 성능이 떨어짐

- 핵심 문제는 **검색과 생성이 분리되어 있다**는 것. 리트리버가 "관련" 청크를 찾고, 제너레이터가 사용하는데, 그 답변이 실제로 도움이 됐는지에 대한 피드백이 없음. 틀린 답변에 쓰인 메모리가 같은 신뢰도로 다음에도 올라옴

## 해결한 세 가지 문제

- **콜드 스타트 문제**: 새 메모리가 1번 성공하면 100%, 베테랑 메모리가 90/100이면 90%. 수학적으로는 새 게 더 좋아 보이는 함정. Wilson 점수로 해결 — 데이터가 적으면 신뢰 구간을 넓게 잡아서 9/10은 ~60%, 90/100은 ~83%로 평가함

- **신뢰도 동적 가중치**: 새 메모리는 임베딩 유사도 80% + 성과 기반 20%로 시작, 검증된 메모리는 반대로 임베딩 20% + 성과 80%로 전환됨. 신뢰는 가정이 아니라 획득하는 것이라는 원칙

- **암묵적 피드백 수집**: 버튼 클릭 안 시킴. LLM이 사용자의 다음 메시지를 읽고 이전 응답이 도움됐는지 추론함. "됐어 고마워" → 성공, "아니 그게 아니라" → 실패, 새 주제로 넘어감 → 성공(이전 이슈 해결)

## 결과

- 시맨틱 유사도가 **오답을 가리키는** 30개 적대적 테스트 수행. "코드가 자꾸 크래시남"이 "크래시 코스 수강 기록"과 매칭되는 식의 함정

> [!IMPORTANT]
> ChromaDB 베이스라인(유사도만): 정확도 **0%** → Roampal(성과 기반 학습): **60%**. 시맨틱 유사도가 틀린 답을 가리킬 때 60%p 차이

- 토큰 효율성도 큰 차이: "도움이 됐던 메모리가 상위 3개 안에 들어있는가?" 기준으로 Naive RAG **1%** vs Roampal **67%**. 50개 청크 대신 3-5개만 가져오니 토큰도 절약

## 아키텍처

- 5개 컬렉션(memory_bank, books 등)에 3개 지식 그래프(라우팅 KG, 콘텐츠 KG, 액션 KG)가 협업. 하드코딩 규칙 없이 사용자 패턴을 학습함

- 펀딩 없는 사이드 프로젝트라고 함. 고장나면 본인이 직접 고치는 구조

## 핵심 포인트

- 리트리버-제너레이터 간 피드백 부재가 근본 문제
- Wilson 점수로 콜드스타트, 동적 가중치로 신뢰도 전환
- 적대적 테스트에서 0%→60%, 토큰 효율 1%→67%

## 인사이트

RAG의 고질적 문제를 '검색 품질 개선'이 아니라 '결과 피드백'으로 접근한 점이 신선함. 사이드 프로젝트치고 아이디어가 탄탄함.
