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을 하나의 파이프라인이라고 생각하면 됩니다.
- 워크스페이스를 만듭니다. LLM은 이 워크스페이스에 임베딩된 문서만 "볼" 수 있어요. 임베딩되지 않은 문서는 LLM이 접근할 방법이 없습니다.
- 문서를 업로드합니다. 업로드는 문서를 텍스트로 바꾸는 것까지만 해요.
- "Move to workspace"로 옮깁니다. 이 단계에서 텍스트를 더 잘게 쪼갠 뒤, 임베더 모델로 보내 각 청크를 벡터(숫자 목록)로 만듭니다.
- 그 벡터를 저장소에 보관합니다. 이게 RAG의 핵심이고, 검색 시 관련 청크만 꺼내 씁니다.
더 알아보기
- 소개는 Introduction 참고
- 벡터 저장소는 Vector Databases 참고