AnythingLLM의 RAG — 왜 LLM이 내 문서를 안 쓰나요?

AnythingLLM의 RAG — 왜 LLM이 내 문서를 안 쓰나요?

가장 많이 받는 질문이 "임베딩된 문서의 모든 것을 LLM이 왜 모르는가"예요. AnythingLLM의 RAG(검색 증강 생성)가 실제로 어떻게 동작하는지 이해하면 답이 나옵니다.

출처: https://docs.anythingllm.com/chatting-with-documents/rag-in-anythingllm

LLM은 전지전능하지 않고, 안을 들여다보지 않아요

LLM은 아직 "네가 무슨 말을 하는지"를 스스로 아는 것이 아니에요. 또 AnythingLLM은 전체 파일시스템을 읽어 LLM에 넘기지 않습니다 — 대부분의 경우 토큰을 낭비할 뿐이기 때문이에요. 대신 질의를 문서 텍스트의 벡터 데이터베이스와 대조해, 프롬프트에 "관련 있다"고 판단되는 텍스트 청크 4~6개만 가져옵니다.

문서 챗봇에 RAG를 쓰면 전체 문서 텍스트가 대부분의 LLM 컨텍스트 윈도우에 들어가지 못해요. 그래서 문서를 텍스트 청크로 나누고 그 청크를 벡터 데이터베이스에 저장해, 질의에 맞는 관련 정보 조각으로 LLM의 기본 지식을 보강(augment) 하는 것이 전부입니다. 모델에 문서 전체가 "임베딩"되는 것이 아니에요.

AnythingLLM은 어떻게 동작하나요?

AnythingLLM을 하나의 파이프라인이라고 생각하면 됩니다.

  1. 워크스페이스를 만듭니다. LLM은 이 워크스페이스에 임베딩된 문서만 "볼" 수 있어요. 임베딩되지 않은 문서는 LLM이 접근할 방법이 없습니다.
  2. 문서를 업로드합니다. 업로드는 문서를 텍스트로 바꾸는 것까지만 해요.
  3. "Move to workspace"로 옮깁니다. 이 단계에서 텍스트를 더 잘게 쪼갠 뒤, 임베더 모델로 보내 각 청크를 벡터(숫자 목록)로 만듭니다.
  4. 그 벡터를 저장소에 보관합니다. 이게 RAG의 핵심이고, 검색 시 관련 청크만 꺼내 씁니다.

더 알아보기