Key Takeaways
- RAG = 문서를 업로드하고 모델이 출처를 인용하며 질문에 답변하도록 하는 방식입니다.
- Open WebUI는 가장 간편한 내장 RAG를 제공합니다. PDF를 업로드하고 질문하면 됩니다. 5분 설치.
- LlamaIndex는 RAG 파이프라인 구축에 가장 유연한 프레임워크입니다.
- LangChain은 가장 널리 사용되는 전문가용 프레임워크로, 방대한 생태계를 보유하고 있습니다.
- Chroma와 Qdrant는 문서 청크 저장을 위한 주요 벡터 데이터베이스입니다.
- 2026년 4월 현재, 로컬 RAG는 성숙하고 프로덕션 환경에 적합합니다.
RAG(검색 증강 생성)란 무엇입니까?
RAG는 모델을 파인튜닝하지 않고도 LLM이 사용자 자신의 문서에 대한 질문에 답변할 수 있도록 하는 기법입니다.
처리 과정: (1) 문서(PDF, 텍스트 파일) 업로드, (2) 청크로 분할, (3) 청크를 임베딩(수치 벡터)으로 변환, (4) 벡터 데이터베이스에 임베딩 저장, (5) 질문 시 데이터베이스에서 관련 청크 검색, (6) 청크와 질문을 LLM에 전달, (7) LLM이 청크를 기반으로 답변.
RAG는 문서가 자주 변경되는 경우(파인튜닝은 일회성 훈련)와 출처 표시가 필요한 경우(RAG는 사용된 문서를 표시) 파인튜닝보다 선호됩니다.
2026년 상위 8개 로컬 RAG 도구
| Tool | Type | Best For | Vector DB | Learning Curve |
|---|---|---|---|---|
| Open WebUI | 웹 앱 (Docker) | 입문자, 가장 쉬운 설치 | 내장 | 없음 |
| LlamaIndex | Python 프레임워크 | 유연한 파이프라인 | 모두 지원 (Chroma, Qdrant, Pinecone) | 중간 |
| LangChain | Python 프레임워크 | 프로덕션 시스템 | 모두 지원 | 중간 |
| Chroma | 벡터 데이터베이스 | 간단한 RAG | Chroma (임베디드) | 낮음 |
| Qdrant | 벡터 데이터베이스 | 확장 가능한 RAG | Qdrant (분산형) | 중간 |
| Weaviate | 벡터 데이터베이스 | GraphQL 쿼리 | Weaviate | 중간 |
| Milvus | 벡터 데이터베이스 | 대규모 처리 | Milvus | 높음 |
| Text-Generation-WebUI RAG | 확장 기능 | 모델과의 통합 | 내장 | 낮음 |
Open WebUI RAG는 어떻게 사용합니까? (가장 쉬운 방법)
Open WebUI에는 내장 RAG 기능이 있습니다. Docker 외에 별도 설정이 필요하지 않습니다. 문서를 업로드하고 질문하면 됩니다.
# 1. Run Open WebUI with Docker
docker run -d -p 3000:8080 \
-e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
ghcr.io/open-webui/open-webui:latest
# 2. Open http://localhost:3000
# 3. Click "+" next to message input → "Upload files"
# 4. Select PDFs or text files
# 5. Ask questions -- Open WebUI retrieves relevant chunks
# 6. Model answers based on documents, with citationsLlamaIndex로 RAG를 구축하는 방법은 무엇입니까?
LlamaIndex는 문서 로딩, 청킹, 임베딩, 검색을 처리하는 프레임워크입니다. 유연하며 모든 벡터 데이터베이스를 지원합니다.
# 1. Install
pip install llama-index
pip install llama-index-embeddings-ollama # use local Ollama embeddings
pip install llama-index-vector-stores-chroma # use Chroma for storage
# 2. Simple RAG pipeline
from llama_index.core import SimpleDirectoryReader, VectorStoreIndex
from llama_index.embeddings.ollama import OllamaEmbedding
# Load documents
documents = SimpleDirectoryReader("./documents").load_data()
# Create index with local embeddings
embedding_model = OllamaEmbedding(model_name="nomic-embed-text")
index = VectorStoreIndex.from_documents(
documents,
embed_model=embedding_model
)
# Query
query_engine = index.as_query_engine()
response = query_engine.query("What does the document say about X?")
print(response)LangChain으로 RAG를 구축하는 방법은 무엇입니까?
LangChain은 프로덕션 RAG 시스템에서 가장 널리 사용되는 프레임워크입니다. 모든 벡터 데이터베이스와 LLM 제공업체를 지원합니다.
# pip install langchain langchain-community langchain-chroma
from langchain.document_loaders import DirectoryLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OllamaEmbeddings
from langchain.vectorstores import Chroma
from langchain.chat_models import ChatOllama
from langchain.chains import RetrievalQA
# Load documents
loader = DirectoryLoader("./documents")
docs = loader.load()
# Split into chunks
splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=100)
chunks = splitter.split_documents(docs)
# Create embeddings and vector store
embeddings = OllamaEmbeddings(model="nomic-embed-text")
vectorstore = Chroma.from_documents(chunks, embeddings)
# Create QA chain
llm = ChatOllama(model="llama3.2:8b")
qa = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=vectorstore.as_retriever()
)
# Answer questions
result = qa.run("What does the document say about X?")
print(result)로컬 RAG에 가장 적합한 벡터 데이터베이스는 무엇입니까?
Chroma (가장 쉬움): 인프로세스 벡터 데이터베이스. 서버 설정이 필요하지 않습니다. 소규모 RAG 프로젝트(문서 100만 개 미만)에 적합합니다.
Qdrant (확장 가능): 자체 호스팅 또는 클라우드. 대규모 RAG에 더 적합합니다. Chroma보다 더 많은 기능을 제공합니다.
Weaviate: GraphQL 기반. 임베딩에 대한 복잡한 쿼리에 적합합니다.
Milvus: 엔터프라이즈급. 초대규모 RAG(문서 1억 개 이상)에 적합합니다.
대부분의 로컬 배포에는 Chroma로 충분하며 가장 사용하기 쉽습니다.
RAG와 파인튜닝 중 무엇을 사용해야 합니까?
다음 기준을 참고하십시오:
- RAG를 사용하는 경우: 문서가 자주 변경되거나, 출처 표시가 필요하거나, 모델 훈련 없이 시작하고 싶거나, 문서가 10만 개 미만인 경우.
- 파인튜닝을 사용하는 경우: 지식 베이스가 고정되어 있거나, 모델이 해당 도메인을 진정으로 "이해"하기를 원하거나, 추론 속도가 필요한 경우(파인튜닝된 모델이 더 빠름).
- 둘 다 결합하는 경우: 도메인에 맞게 모델을 파인튜닝한 후 RAG를 추가하여 매우 높은 품질의 Q&A를 구현합니다.
로컬 RAG 사용 시 흔한 실수
- 잘못된 청크 크기 사용. 너무 작으면(100 토큰) 조각이 너무 많아집니다. 너무 크면(2000 토큰) 구체성이 부족합니다. 최적은 500-1000 토큰입니다.
- 임베딩을 사용하지 않는 경우. 청크를 임베딩으로 변환하지 않으면 RAG를 수행할 수 없습니다. 영어에는 `nomic-embed-text`, 다국어에는 `bge-m3`를 사용하십시오.
- 검색 품질을 평가하지 않는 경우. RAG가 실행된다고 해서 올바른 문서를 검색하는 것은 아닙니다. 알려진 질문으로 테스트하고 검색된 청크가 관련성이 있는지 확인하십시오.
- RAG를 파인튜닝의 대체제로 취급하는 경우. RAG는 검색 + 인컨텍스트 학습입니다. 파인튜닝은 실제 모델 적응입니다. 목적이 다른 도구입니다.
로컬 RAG에 관한 자주 묻는 질문
로컬 RAG는 문서를 몇 개까지 처리할 수 있습니까?
벡터 데이터베이스에 따라 다릅니다. Chroma는 소비자용 하드웨어에서 10만~100만 개의 문서를 쉽게 처리합니다. 100만 개를 초과하면 Qdrant 또는 Milvus를 사용하십시오.
RAG는 이미지와 함께 작동합니까?
텍스트를 먼저 추출(OCR)한 경우에만 가능합니다. 진정한 이미지 이해를 위해서는 RAG와 함께 Llama 3.2 Vision과 같은 멀티모달 모델을 사용하십시오.
RAG는 파인튜닝보다 느립니까?
RAG는 검색(밀리초) + 컨텍스트 전달(프롬프트에 토큰 추가)이 필요합니다. 일반적으로 파인튜닝된 추론보다 느리지만 설정 속도는 훨씬 빠릅니다.
로컬 LLM과 클라우드 임베딩을 함께 사용할 수 있습니까?
가능합니다. 검색에는 클라우드 임베딩(OpenAI, Cohere)을 사용하고 답변에는 로컬 LLM을 사용하는 하이브리드 방식이 일반적입니다.
출처
- LlamaIndex Documentation -- docs.llamaindex.ai
- LangChain Documentation -- python.langchain.com
- Chroma Documentation -- docs.trychroma.com
- Qdrant Documentation -- qdrant.tech/documentation
- RAG Paper -- arxiv.org/abs/2005.11401
