RAG in Practice — Part 8: RAG in Production — What Breaks After Launch

개요

프로덕션 환경에서 RAG(Retrieval Augmented Generation) 시스템은 출시 후 시간이 지남에 따라 데이터의 신선도 저하, 임베딩 드리프트, 보안 취약점, 성능 저하 및 비용 증가와 같은 다양한 문제에 직면하며, 이러한 문제들은 시스템의 신뢰성과 성능에 직접적인 영향을 미칩니다.

주요 내용

* 데이터 신선도 및 임베딩 드리프트:
* RAG 시스템의 핵심 문제 중 하나는 원본 데이터가 변경되었음에도 불구하고 벡터 인덱스의 청크(chunk)가 최신 상태를 유지하지 못해 발생하는 데이터 신선도 저하입니다.
* 모델 자체는 데이터가 오래되었음을 알지 못하며, 검색기(retriever) 역시 문서 변경 사실을 인지하지 못해 사용자에게는 여전히 권위 있는 톤으로 잘못된 정보를 제공할 수 있습니다.
* 데이터 신선도 저하를 해결하기 위한 전략으로는 예약된 재색인(scheduled re-indexing), 점진적 재색인(incremental re-indexing), 이벤트 기반 재색인(event-driven re-indexing)이 있습니다.
* 임베딩 모델의 변경 또한 벡터 인덱스의 일관성을 해치는 요인이며, 이 경우 전체 말뭉치(corpus)의 재임베딩이 필요합니다.
* 청크 경계 변경, 메타데이터 규칙 변경, 임베딩 모델 변경 등도 시간이 지남에 따라 검색 동작을 미묘하게 변경시키는 인덱스 드리프트의 원인이 됩니다.

* 가드레일(Guardrails)의 중요성:
* 프롬프트 인젝션(prompt injection)과 개인 식별 정보(PII) 유출과 같은 보안 위협을 방지하기 위해 가드레일은 출시 후에 추가하는 것이 아니라 처음부터 파이프라인의 일부로 설계되어야 합니다.
* 입력 가드레일: 쿼리가 검색기에 도달하기 전에 시스템 지침을 무시하려는 프롬프트 인젝션 시도를 탐지하고 차단합니다.
* 출력 가드레일: 생성된 답변이 검색된 컨텍스트에 없는 사실을 포함하는 환각(hallucination)을 탐지하고, PII를 필터링하며, 질문에 대한 실제 답변인지 검증합니다.
* RAG는 일반 LLM에는 없는 공격 경로를 제공하며, 검색된 문서 내에 숨겨진 프롬프트 인젝션이나 데이터 오염(data poisoning) 위험이 존재합니다. 따라서 출처 추적(provenance tracking)과 원본 검증(source review)이 중요합니다.

* 비용, 지연 시간 및 절충점:
* 프로덕션 RAG 파이프라인의 모든 결정은 답변 품질, 요청 지연 시간, 쿼리당 비용 간의 절충점을 포함합니다.
* 더 많은 청크를 검색하면 리콜(recall)은 개선되지만 프롬프트 토큰과 생성 비용이 증가하며, 랭커(reranker) 추가는 정밀도(precision)를 향상시키지만 지연 시간을 늘립니다.
* 순수 벡터 검색은 고유 식별자를 놓칠 수 있으므로, 키워드 검색과 벡터 검색을 결합하는 하이브리드 검색(hybrid retrieval) 및 RRF(Reciprocal Rank Fusion)가 사용될 수 있습니다.
* 캐싱(Caching):
* 의미론적 캐싱(Semantic caching): 애플리케이션 레벨에서 유사한 질문에 대한 이전 답변을 재사용하여 검색 및 생성 단계를 건너뜁니다. 이는 반복적인 트래픽에 유용하지만, 잘못된/오래된 답변이 재사용될 위험이 있습니다.
* 프로바이더 프롬프트 및 컨텍스트 캐싱(Provider prompt and context caching): 프로바이더 측 최적화로, 반복되는 프롬프트 접두사나 캐시된 컨텍스트를 재사용하여 비용과 지연 시간을 줄입니다. 이는 안정적인 콘텐츠를 프롬프트 앞부분에 배치하는 방식으로 구현됩니다.

* 관측 가능성(Observability), 출처(Provenance) 및 권한(Permissions):
* 모든 쿼리에 대해 쿼리 자체, 검색된 청크(원본 문서, 버전, ID, 유사도 점수 포함), 최종 프롬프트 및 응답을 기록해야 디버깅이 가능합니다. Langfuse, LangSmith 등과 같은 도구를 활용할 수 있습니다.
* 모든 답변은 이를 생성한 청크와 원본 문서로 추적 가능해야 하며, 이를 위해 안정적인 청크 ID, 소스 포인터, 타임스탬프, 문서 버전 관리가 중요합니다.
* 엔터프라이즈 환경에서는 사용자가 모든 문서에 접근할 수 없으므로, 검색 시점에 접근 제어(access control)를 시행해야 하며, 접근 속성은 청크 메타데이터와 함께 전달되어야 합니다. 이는 메타데이터 필터링을 통해 구현됩니다.
* 메타데이터는 접근 제어, 범위 필터링, 신선도 및 수명 주기, 출처, 관측 가능성 및 디버깅 등 다양한 역할을 수행합니다.

* 고급 RAG 패턴:
* 부모-자식 계층적 청킹(Parent-Child Hierarchical Chunking): 문서의 계층 구조를 유지하여 청크의 의미를 명확히 합니다.
* 자체 RAG(Self-RAG) 및 수정 RAG(Corrective RAG): 검색된 컨텍스트의 품질을 모델이 스스로 평가하고, 필요시 재검색이나 대체 검색 경로를 사용합니다.
* 에이전트 RAG(Agentic RAG): 단일 검색으로 해결할 수 없는 복잡한 질문에 대해 모델이 여러 검색 단계를 계획하고 실행합니다.
* 그래프 RAG(Graph RAG): 개체 간의 관계를 중심으로 지식을 구성합니다.
* 멀티모달 RAG(Multimodal RAG): 텍스트뿐만 아니라 이미지 등 비텍스트 콘텐츠도 검색 가능한 객체로 처리합니다.
* 벡터리스 RAG(Vectorless RAG): 임베딩 없이 문서 구조를 활용하여 검색하며, 특히 구조화된 문서에서 높은 정확도를 보입니다.

시사점

RAG 시스템은 답변 생성 비용을 줄이지만, 검증에 대한 책임은 줄이지 않으며, 출시 후 가드레일은 임시방편일 뿐 근본적인 해결책이 아니므로 파이프라인 설계 단계부터 고려해야 합니다. 데이터 신선도 관리가 RAG 시스템의 안정성에 결정적이며, 관측 가능성, 출처 추적, 권한 관리는 단순한 기능이 아닌 필수적인 요소입니다.

원문 읽기 →
원문을 불러오는 중...

댓글

GitHub Discussions