지식 기반 AI의 새로운 지평을 여는 기술
2025년 인공지능 기술 분야에서 RAG(Retrieval-Augmented Generation, 검색 증강 생성)는 가장 큰 주목을 받고 있는 기술 중 하나입니다. RAG는 대형 언어 모델(LLM)을 외부 데이터 소스와 연결하여 더 정확하고 맥락에 맞는 응답을 생성할 수 있게 해주는 기술입니다. 기존의 LLM 모델은 학습된 지식에만 의존하지만, RAG를 활용하면 모델을 다시 훈련시키지 않고도 최신 정보나 특정 도메인 지식을 활용할 수 있습니다.
RAG의 인기가 급증한 이유는 간단합니다. 모델 미세 조정(fine-tuning)은 비용이 많이 들고 시간 소모적인 과정인 반면, RAG는 기존 모델을 그대로 활용하면서 필요한 정보를 외부에서 가져와 정확성과 신뢰성을 높일 수 있기 때문입니다. 특히 기업 환경에서 자체 데이터를 활용한 AI 솔루션을 구축하려는 수요가 늘어나면서 RAG 프레임워크의 중요성이 더욱 커지고 있습니다.
이 글에서는 현재 가장 주목받고 있는 5가지 RAG 프레임워크인 LangChain, LlamaIndex, LangGraph, Haystack, RAGFlow에 대해 살펴보겠습니다. 각 프레임워크의 주요 특징과 간단한 구현 예시를 통해 여러분의 AI 프로젝트에 가장 적합한 도구를 선택하는 데 도움이 되길 바랍니다.

1. LangChain: 유연한 LLM 애플리케이션 개발 프레임워크
LangChain은 LLM 애플리케이션 개발을 단순화하는 유연한 프레임워크입니다. 모듈식 설계로 다양한 LLM과 데이터 소스를 쉽게 통합할 수 있으며, 문서 검색 및 처리를 위한 내장 도구를 제공합니다.
주요 특징:
- 모듈식 설계로 쉽게 커스터마이징 가능
- 다양한 LLM과 데이터 소스 지원
- 문서 검색 및 처리를 위한 내장 도구 제공
- 챗봇과 가상 비서 개발에 적합
LangChain은 코드 체인을 구성하는 방식으로 RAG 파이프라인을 구축합니다. 문서 로딩, 청킹(분할), 임베딩, 벡터 저장, 검색 및 응답 생성까지의 과정을 모듈식으로 연결할 수 있습니다. 아래는 LangChain을 사용한 간단한 RAG 구현 예시입니다:
# 필요한 라이브러리 설치
!pip install langchain_community tiktoken langchain-openai langchainhub chromadb langchain
# 문서 로딩
loader = WebBaseLoader(
web_paths=("https://lilianweng.github.io/posts/2023-06-23-agent/",),
bs_kwargs=dict(
parse_only=bs4.SoupStrainer(
class_=("post-content", "post-title", "post-header")
)
),
)
docs = loader.load()
# 문서 분할
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
splits = text_splitter.split_documents(docs)
# 임베딩 및 벡터 스토어 구성
vectorstore = Chroma.from_documents(documents=splits,
embedding=OpenAIEmbeddings())
retriever = vectorstore.as_retriever()
# RAG 체인 구성
prompt = hub.pull("rlm/rag-prompt")
llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)
def format_docs(docs):
return "\n\n".join(doc.page_content for doc in docs)
rag_chain = (
{"context": retriever | format_docs, "question": RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()
)
# 질문 처리
response = rag_chain.invoke("작업 분해(Task Decomposition)란 무엇인가요?")
LangChain의 강점은 다양한 컴포넌트를 손쉽게 조합하여 복잡한 RAG 파이프라인을 구성할 수 있다는 점입니다. 개발자가 원하는 대로 파이프라인을 커스터마이징할 수 있어 유연성이 뛰어납니다.
2. LlamaIndex: 효율적인 데이터 조직과 검색을 위한 프레임워크
LlamaIndex(이전 명칭: GPT Index)는 LLM 애플리케이션을 위한 데이터를 효율적으로 조직하고 검색하는 데 초점을 맞춘 프레임워크입니다. 개발자가 대규모 데이터셋을 빠르게 접근하고 활용할 수 있도록 도와줍니다.
주요 특징:
- 빠른 조회를 위한 데이터 조직화
- RAG 워크플로우를 위한 맞춤형 컴포넌트 제공
- PDF, SQL 등 다양한 데이터 포맷 지원
- Pinecone, FAISS 등의 벡터 저장소와 통합 가능
LlamaIndex는 다양한 데이터 소스로부터 문서를 로드하고, 이를 효율적으로 색인화하여 LLM에 필요한 컨텍스트를 제공하는 데 특화되어 있습니다. 다음은 LlamaIndex를 사용한 예시입니다:
# 필요한 라이브러리 설치
!pip install llama-index llama-index-readers-file
!pip install llama-index-embeddings-openai
!pip install llama-index-llms-openai
# LLM 및 임베딩 모델 초기화
from llama_index.llms.openai import OpenAI
from llama_index.embeddings.openai import OpenAIEmbedding
llm = OpenAI(model='gpt-4o')
embed_model = OpenAIEmbedding()
from llama_index.core import Settings
Settings.llm = llm
Settings.embed_model = embed_model
# 데이터 로드
documents = SimpleDirectoryReader(input_files=["./uber_2021.pdf"]).load_data()
# 문서 분할
from llama_index.core.node_parser import TokenTextSplitter
splitter = TokenTextSplitter(
chunk_size=512,
chunk_overlap=0,
)
nodes = splitter.get_nodes_from_documents(documents)
# 벡터 인덱스 생성
from llama_index.core import VectorStoreIndex
index = VectorStoreIndex(nodes)
query_engine = index.as_query_engine(similarity_top_k=2)
# RAG를 통한 질문 처리
response = query_engine.query("우버의 2021년 매출은 얼마인가요?")
print(response)
LlamaIndex의 장점은 PDF, 웹페이지, SQL 데이터베이스 등 다양한 형식의 데이터를 쉽게 처리할 수 있고, 데이터 색인화 과정을 단순화하여 개발자가 데이터 접근에 집중할 수 있게 한다는 점입니다.

3. LangGraph: 그래프 기반 데이터 구조와 LLM의 연결
LangGraph는 LLM을 그래프 기반 데이터 구조와 연결하는 프레임워크입니다. 복잡한 데이터 관계를 필요로 하는 애플리케이션에 특히 유용합니다.
주요 특징:
- 그래프 구조에서 효율적으로 데이터 검색
- LLM과 그래프 데이터를 결합하여 더 나은 맥락 제공
- 검색 프로세스의 커스터마이징 가능
LangGraph는 LangChain에서 파생된 프레임워크로, RAG 프로세스를 상태 그래프(StateGraph)로 모델링할 수 있게 해줍니다. 이를 통해 복잡한 데이터 흐름과 다단계 추론 과정을 구현할 수 있습니다:
# 필요한 라이브러리 설치
%pip install --quiet --upgrade langchain-text-splitters langchain-community langgraph langchain-openai
# 모델, 임베딩, 벡터 데이터베이스 초기화
from langchain.chat_models import init_chat_model
llm = init_chat_model("gpt-4o-mini", model_provider="openai")
from langchain_openai import OpenAIEmbeddings
embeddings = OpenAIEmbeddings(model="text-embedding-3-large")
from langchain_core.vectorstores import InMemoryVectorStore
vector_store = InMemoryVectorStore(embeddings)
# 상태 정의
class State(TypedDict):
question: str
context: List[Document]
answer: str
# 애플리케이션 단계 정의
def retrieve(state: State):
retrieved_docs = vector_store.similarity_search(state["question"])
return {"context": retrieved_docs}
def generate(state: State):
docs_content = "\n\n".join(doc.page_content for doc in state["context"])
messages = prompt.invoke({"question": state["question"], "context": docs_content})
response = llm.invoke(messages)
return {"answer": response.content}
# 그래프 컴파일 및 실행
graph_builder = StateGraph(State).add_sequence([retrieve, generate])
graph_builder.add_edge(START, "retrieve")
graph = graph_builder.compile()
# RAG 질의 실행
response = graph.invoke({"question": "작업 분해(Task Decomposition)란 무엇인가요?"})
print(response["answer"])
LangGraph의 독특한 점은 RAG 프로세스를 명확한 단계로 나누고, 이를 그래프 구조로 정의하여 복잡한 데이터 흐름을 관리할 수 있다는 것입니다. 특히 다단계 추론이 필요한 복잡한 RAG 시스템에서 강점을 발휘합니다.
4. Haystack: 문서 검색과 질의응답을 위한 엔드-투-엔드 프레임워크
Haystack은 LLM과 트랜스포머 모델을 활용한 애플리케이션 개발을 위한 엔드-투-엔드 프레임워크입니다. 문서 검색과 질의응답에 특화되어 있습니다.
주요 특징:
- 문서 검색과 LLM 기능 결합
- 최적의 결과를 위한 다양한 검색 방법 사용
- 빠른 개발을 위한 사전 구축된 파이프라인 제공
- Elasticsearch 및 OpenSearch와 호환
Haystack은 파이프라인 구조를 통해 검색과 생성 프로세스를 명확하게 분리하고 연결할 수 있습니다:
# 필요한 라이브러리 설치
!pip install haystack-ai
!pip install "datasets>=2.6.1"
!pip install "sentence-transformers>=3.0.0"
# 벡터 스토어 초기화
from haystack.document_stores.in_memory import InMemoryDocumentStore
document_store = InMemoryDocumentStore()
# 프롬프트 정의
from haystack.components.builders import ChatPromptBuilder
from haystack.dataclasses import ChatMessage
template = [
ChatMessage.from_user(
"""
Given the following information, answer the question.
Context:
{% for document in documents %}
{{ document.content }}
{% endfor %}
Question: {{question}}
Answer:
"""
)
]
prompt_builder = ChatPromptBuilder(template=template)
# LLM 초기화
from haystack.components.generators.chat import OpenAIChatGenerator
chat_generator = OpenAIChatGenerator(model="gpt-4o-mini")
# 파이프라인 정의 및 노드 연결
from haystack import Pipeline
basic_rag_pipeline = Pipeline()
basic_rag_pipeline.add_component("text_embedder", text_embedder)
basic_rag_pipeline.add_component("retriever", retriever)
basic_rag_pipeline.add_component("prompt_builder", prompt_builder)
basic_rag_pipeline.add_component("llm", chat_generator)
# 노드 연결
basic_rag_pipeline.connect("text_embedder.embedding", "retriever.query_embedding")
basic_rag_pipeline.connect("retriever", "prompt_builder")
basic_rag_pipeline.connect("prompt_builder.prompt", "llm.messages")
# RAG 질의 실행
question = "로도스 동상은 어떻게 생겼나요?"
response = basic_rag_pipeline.run({
"text_embedder": {"text": question},
"prompt_builder": {"question": question}
})
print(response["llm"]["replies"][0].text)
Haystack의 강점은 문서 검색과 질의응답을 위한 다양한 컴포넌트를 제공하고, 이를 파이프라인으로 연결하여 복잡한 RAG 시스템을 구성할 수 있다는 점입니다. 특히 대규모 문서 검색이 필요한 기업용 애플리케이션에 적합합니다.

5. RAGFlow: 검색과 생성 프로세스의 원활한 통합을 위한 프레임워크
RAGFlow는 검색과 생성 프로세스를 통합하는 데 초점을 맞춘 프레임워크입니다. RAG 애플리케이션 개발을 간소화합니다.
주요 특징:
- 검색과 생성 프로세스의 연결 단순화
- 프로젝트 요구에 맞는 맞춤형 워크플로우 구성 가능
- 다양한 데이터베이스 및 문서 형식과 쉽게 통합
RAGFlow는 노코드(No-code) 인터페이스를 제공하여 RAG 시스템을 쉽게 구축할 수 있게 해줍니다. 웹 인터페이스를 통해 지식 베이스를 생성하고, 문서를 업로드하고, 채팅 모델을 구성할 수 있습니다:
- RAGFlow 웹사이트에서 가입 후 ‘Try RAGFlow’ 클릭
- ‘Create Knowledge Base’ 클릭하여 새 지식 베이스 생성
- ‘Model Providers’에서 사용할 LLM 모델 선택 및 API 키 입력
- ‘System Model Settings’에서 채팅 모델 선택
- ‘Datasets’에서 PDF 등 문서 업로드 및 파싱
- ‘Chat’ 섹션에서 어시스턴트 생성 및 지식 베이스 연결
- 새 채팅 생성 후 질문을 통해 RAG 시스템 테스트
RAGFlow는 기술적 배경이 적은 사용자도 쉽게 RAG 시스템을 구축할 수 있게 해주는 사용자 친화적인 인터페이스를 제공합니다. 코드 작성 없이도 복잡한 RAG 파이프라인을 구성할 수 있어, 비개발자도 쉽게 활용할 수 있습니다.

어떤 RAG 프레임워크를 선택해야 할까?
각 RAG 프레임워크는 저마다의 장단점이 있으며, 선택은 여러분의 프로젝트 요구사항과 기술적 배경에 따라 달라질 수 있습니다:
- LangChain: 유연성이 높고 커스터마이징이 많이 필요한 복잡한 RAG 시스템에 적합합니다. 특히 다양한 LLM과 데이터 소스를 통합해야 하는 경우에 좋은 선택입니다.
- LlamaIndex: 다양한 데이터 소스(PDF, SQL 등)를 효율적으로 색인화하고 검색하는 데 중점을 둔 프로젝트에 적합합니다. 데이터 처리와 조직에 강점이 있습니다.
- LangGraph: 복잡한 데이터 흐름과 다단계 추론이 필요한 고급 RAG 시스템에 적합합니다. 특히 그래프 기반 데이터 구조를 활용하는 프로젝트에 유용합니다.
- Haystack: 문서 검색과 질의응답에 특화된 엔드-투-엔드 솔루션이 필요한 기업용 애플리케이션에 적합합니다. 특히 Elasticsearch와 같은 검색 엔진과의 통합이 필요한 경우에 좋은 선택입니다.
- RAGFlow: 코딩 경험이 적은 사용자도 쉽게 RAG 시스템을 구축할 수 있는 사용자 친화적인 인터페이스를 제공합니다. 빠른 프로토타이핑이나 간단한 RAG 시스템 구축에 적합합니다.
결론: RAG의 미래
RAG는 최근 AI 기술 발전의 중요한 트렌드로 자리 잡았으며, 특히 기업에서 자체 데이터셋을 활용한 맞춤형 AI 솔루션을 구축하려는 수요가 크게 증가하고 있습니다. LangChain, LlamaIndex, LangGraph, Haystack, RAGFlow와 같은 프레임워크는 이러한 수요를 충족시키는 중요한 도구로 부상했습니다.
이러한 RAG 프레임워크를 활용하면 개발자는 기존 LLM의 강점을 유지하면서도 외부 데이터 소스를 통합하여 더 정확하고 신뢰할 수 있는 AI 시스템을 구축할 수 있습니다. AI 기술이 계속 발전함에 따라 이러한 도구들은 지능형 애플리케이션 개발에 있어 더욱 중요한 역할을 할 것입니다.
RAG 기술은 앞으로도 계속 발전하여 더 정교한 검색 방법, 더 효율적인 문서 처리, 그리고 더 자연스러운 응답 생성 능력을 갖추게 될 것입니다. 이는 AI 애플리케이션의 정확성, 투명성, 그리고 신뢰성을 크게 향상시킬 것으로 기대됩니다. 여러분의 다음 AI 프로젝트에 RAG 프레임워크를 도입해보는 것을 고려해보세요.
답글 남기기