LLM 애플리케이션 개발의 핵심 두 프레임워크: LangChain과 LlamaIndex (출처: Unsplash)
들어가며
2022년 말, 두 개의 오픈소스 프레임워크가 거의 동시에 등장했다. 하나는 해리슨 체이스(Harrison Chase)가 만든 LangChain(2022년 10월), 다른 하나는 제리 류(Jerry Liu)가 창업한 LlamaIndex(당시 GPT Index, 2022년 11월)였다. 이 두 프레임워크는 이후 3년간 LLM 애플리케이션 개발 생태계의 표준이 됐고, 지금도 전 세계 AI 개발자의 절반 이상이 둘 중 하나 — 혹은 둘 다 — 를 사용하고 있다.
2026년 4월 기준, GitHub Stars는 LangChain 100k+, LlamaIndex **40k+**를 기록 중이다. 두 프레임워크 모두 유니콘 스타트업으로 성장했으며, LangChain은 시리즈 B $25M, LlamaIndex는 시리즈 A $70M 규모의 투자를 유치했다.
"LangChain은 LLM을 위한 스위스 아미 나이프다. LlamaIndex는 당신의 데이터와 LLM을 연결하는 가장 똑똑한 파이프다." — Towards Data Science, 2025 연간 리뷰
두 도구는 표면적으로는 경쟁자처럼 보이지만, 실제로는 서로 다른 문제를 해결하기 위해 설계됐다. 이 차이를 이해하는 것이 올바른 선택의 출발점이다.
LangChain은 LLM 에이전트·도구 통합·챗봇에 강하고, LlamaIndex는 RAG 파이프라인·문서 검색·멀티모달 인덱싱에 특화돼 있다. RAG 정확도가 최우선이면 LlamaIndex, 다양한 도구·API와 에이전트를 조합해야 하면 LangChain을 선택하라. 두 프레임워크는 함께 쓰는 것도 가능하다.
두 프레임워크의 탄생 배경과 역사
LangChain: 범용 LLM 오케스트레이션의 탄생 (2022.10)
LangChain은 해리슨 체이스가 Robust Intelligence에 재직하던 시절, LLM을 다양한 도구·API·데이터 소스와 연결하는 과정의 반복적인 복잡성을 해결하기 위해 만든 라이브러리에서 시작됐다. 초기 슬로건은 "LLM을 중심으로 한 애플리케이션 구축을 위한 프레임워크"였다.
| 연도 | 주요 이정표 |
|---|---|
| 2022.10 | GitHub 공개 (초기 버전 0.0.x) |
| 2023.03 | LangChain Inc. 창업, 시드 투자 $10M |
| 2023.07 | LangSmith (디버깅·모니터링 플랫폼) 출시 |
| 2024.01 | LangGraph 공개 (스테이트풀 멀티에이전트) |
| 2024.06 | LangChain v0.2 — 아키텍처 전면 개편 |
| 2025.02 | LangChain v0.3 + LangGraph Cloud 출시 |
| 2026.01 | LangChain v1.0 정식 출시, GitHub Stars 100k 돌파 |
LlamaIndex: 데이터 연결과 RAG 특화 (2022.11)
GPT Index라는 이름으로 시작한 LlamaIndex는 제리 류가 GPT-3로 자신의 문서를 검색하는 개인 프로젝트에서 출발했다. 비정형 데이터(PDF, 코드, 데이터베이스 등)와 LLM을 연결하는 **데이터 인덱싱과 검색 증강 생성(RAG)**에 처음부터 집중했다.
| 연도 | 주요 이정표 |
|---|---|
| 2022.11 | GPT Index로 GitHub 공개 |
| 2023.01 | LlamaIndex로 브랜드 변경 |
| 2023.04 | LlamaHub (데이터 로더 허브) 출시 |
| 2024.03 | LlamaIndex Workflows (이벤트 기반 에이전트) 출시 |
| 2024.09 | LlamaCloud (엔터프라이즈 관리형 파이프라인) 출시 |
| 2025.06 | LlamaIndex v0.12 — 멀티모달 RAG 지원 |
| 2026.02 | LlamaIndex 2.0 — 완전한 비동기 아키텍처 |
철학과 설계 목표의 차이
두 프레임워크의 근본적인 차이는 무엇을 추상화하느냐에 있다.
LangChain의 철학: "LLM을 중심으로 모든 것을 연결한다." Chain(체인)이라는 개념을 통해 LLM 호출, 도구 실행, 메모리 관리, 외부 API 호출을 순서대로 연결하는 오케스트레이션이 핵심이다. 범용성이 강점이며, 챗봇·에이전트·RAG·요약 등 거의 모든 LLM 태스크에 적용 가능하다.
LlamaIndex의 철학: "당신의 데이터와 LLM 사이의 가장 똑똑한 브릿지를 만든다." 데이터 수집(Ingestion), 인덱싱(Indexing), 검색(Retrieval), 후처리(Post-processing) 파이프라인 최적화에 집중한다. RAG 성능이 핵심이며, 엔터프라이즈 데이터를 LLM에 연결하는 시나리오에서 두드러진다.
100개 이상의 LLM 프로바이더, 풍부한 내장 Tool, LangGraph 멀티에이전트, LangSmith 옵저버빌리티까지 — LLM 에이전트와 챗봇을 빠르게 구축해야 한다면 LangChain의 방대한 에코시스템이 최대 자산이다. Discord 멤버 85,000+의 활발한 커뮤니티도 강점.
핵심 기능 비교표 (20개 항목)
| 기능 | LangChain v1.0 | LlamaIndex 2.0 | 비고 |
|---|---|---|---|
| RAG 파이프라인 | ★★★★☆ | ★★★★★ | LlamaIndex가 더 정교한 검색 전략 제공 |
| 에이전트 (ReAct) | ★★★★★ | ★★★★☆ | LangChain이 더 다양한 에이전트 패턴 |
| 멀티에이전트 | ★★★★★ (LangGraph) | ★★★★☆ (Workflows) | LangGraph가 더 성숙한 그래프 기반 구조 |
| 도구(Tool) 통합 | ★★★★★ | ★★★☆☆ | LangChain이 압도적으로 많은 내장 도구 |
| 벡터 스토어 지원 | ★★★★☆ (50+) | ★★★★★ (70+) | LlamaIndex가 더 많은 벡터DB 지원 |
| 문서 로더 | ★★★★☆ | ★★★★★ (LlamaHub) | LlamaHub에 200+ 로더 |
| 스트리밍 | ★★★★★ | ★★★★☆ | LangChain이 더 안정적인 스트리밍 |
| 비동기 지원 | ★★★★☆ | ★★★★★ | LlamaIndex 2.0이 완전 비동기 |
| 메모리 관리 | ★★★★★ | ★★★☆☆ | LangChain이 다양한 메모리 전략 |
| 하이브리드 검색 | ★★★☆☆ | ★★★★★ | LlamaIndex가 Dense+Sparse 하이브리드 검색 특화 |
| 재순위화 (Reranking) | ★★★☆☆ | ★★★★★ | LlamaIndex의 핵심 강점 |
| 평가 (Evaluation) | ★★★★☆ (LangSmith) | ★★★★★ (Ragas 연동) | 별도 플랫폼 vs 내장 평가 |
| 프롬프트 관리 | ★★★★★ | ★★★☆☆ | LangChain의 PromptTemplate이 더 유연 |
| 모델 지원 | ★★★★★ (100+) | ★★★★☆ (50+) | LangChain이 더 많은 LLM 지원 |
| 멀티모달 RAG | ★★★☆☆ | ★★★★★ | LlamaIndex의 2025년 핵심 업데이트 |
| 학습 곡선 | ★★★☆☆ (복잡) | ★★★★☆ (직관적) | LlamaIndex가 진입 장벽 낮음 |
| 문서화 품질 | ★★★★☆ | ★★★★★ | LlamaIndex 문서가 더 체계적 |
| 엔터프라이즈 지원 | ★★★★☆ (LangSmith) | ★★★★★ (LlamaCloud) | 둘 다 유료 플랫폼 제공 |
| 테스트 용이성 | ★★★☆☆ | ★★★★☆ | LlamaIndex가 모킹·테스트 구조 우수 |
| 커뮤니티 활성도 | ★★★★★ | ★★★★☆ | LangChain이 Discord·GitHub 더 활발 |
하이브리드 검색(Dense+Sparse), 재순위화(Reranking), 멀티모달 RAG, 70개 이상의 벡터 스토어 지원, LlamaHub의 200+ 데이터 로더 — RAG 품질이 비즈니스 결과에 직결되는 엔터프라이즈 환경이라면 LlamaIndex가 명확한 우위를 갖는다. RAGAS Faithfulness 0.87로 LangChain(0.81)을 일관되게 앞선다.
실제 코드 비교 — 동일 RAG 태스크 구현
두 프레임워크로 동일한 시나리오를 구현해보자: PDF 문서를 로드하고, 벡터 인덱스를 생성하고, 사용자 질문에 답변하는 RAG 파이프라인.
LangChain으로 RAG 구현
# requirements: langchain>=1.0.0, langchain-openai, langchain-chroma, pypdf
from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_chroma import Chroma
from langchain.chains import RetrievalQA
from langchain.prompts import PromptTemplate
# 1. 문서 로드
loader = PyPDFLoader("company_report.pdf")
documents = loader.load()
# 2. 텍스트 청킹
splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200,
separators=["\n\n", "\n", ".", " "]
)
chunks = splitter.split_documents(documents)
print(f"총 {len(chunks)}개 청크 생성")
# 3. 벡터 스토어 생성 (ChromaDB)
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = Chroma.from_documents(
documents=chunks,
embedding=embeddings,
collection_name="company_docs"
)
# 4. 커스텀 프롬프트 템플릿
prompt_template = """당신은 회사 문서 전문 어시스턴트입니다.
주어진 문서 맥락만을 사용해 질문에 답변하세요.
모르는 경우 "문서에서 해당 정보를 찾을 수 없습니다"라고 말하세요.
맥락: {context}
질문: {question}
답변:"""
PROMPT = PromptTemplate(
template=prompt_template,
input_variables=["context", "question"]
)
# 5. RetrievalQA 체인 구성
llm = ChatOpenAI(model="gpt-4o", temperature=0)
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=vectorstore.as_retriever(
search_type="mmr", # Maximum Marginal Relevance
search_kwargs={"k": 5, "fetch_k": 20}
),
chain_type_kwargs={"prompt": PROMPT},
return_source_documents=True
)
# 6. 쿼리 실행
result = qa_chain.invoke({"query": "2025년 매출 목표는 얼마인가요?"})
print("답변:", result["result"])
print("\n출처 문서:")
for doc in result["source_documents"]:
print(f" - 페이지 {doc.metadata['page']}: {doc.page_content[:100]}...")
LlamaIndex로 동일 RAG 구현
# requirements: llama-index>=2.0.0, llama-index-embeddings-openai
# llama-index-llms-openai, llama-index-vector-stores-chroma
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settings
from llama_index.core.node_parser import SentenceSplitter
from llama_index.core.retrievers import VectorIndexRetriever
from llama_index.core.query_engine import RetrieverQueryEngine
from llama_index.core.postprocessor import SimilarityPostprocessor, MetadataReplacementPostProcessor
from llama_index.llms.openai import OpenAI
from llama_index.embeddings.openai import OpenAIEmbedding
from llama_index.vector_stores.chroma import ChromaVectorStore
from llama_index.core import StorageContext
import chromadb
# 1. 전역 설정 (LlamaIndex 2.0 방식)
Settings.llm = OpenAI(model="gpt-4o", temperature=0)
Settings.embed_model = OpenAIEmbedding(model="text-embedding-3-small")
Settings.node_parser = SentenceSplitter(
chunk_size=1000,
chunk_overlap=200
)
# 2. 문서 로드 (디렉토리 기반)
documents = SimpleDirectoryReader(
input_files=["company_report.pdf"],
filename_as_id=True
).load_data()
print(f"총 {len(documents)}개 문서 로드")
# 3. ChromaDB 연동 벡터 스토어
chroma_client = chromadb.EphemeralClient()
chroma_collection = chroma_client.get_or_create_collection("company_docs")
vector_store = ChromaVectorStore(chroma_collection=chroma_collection)
storage_context = StorageContext.from_defaults(vector_store=vector_store)
# 4. 인덱스 생성 (자동 청킹 + 임베딩)
index = VectorStoreIndex.from_documents(
documents,
storage_context=storage_context,
show_progress=True
)
# 5. 고급 검색기 설정 (LlamaIndex 강점)
retriever = VectorIndexRetriever(
index=index,
similarity_top_k=5,
vector_store_query_mode="mmr", # MMR 검색
mmr_threshold=0.5
)
# 6. 후처리 파이프라인 (LlamaIndex 특화 기능)
postprocessors = [
SimilarityPostprocessor(similarity_cutoff=0.7), # 유사도 임계값 필터링
]
# 7. 커스텀 프롬프트 + 쿼리 엔진
from llama_index.core.prompts import PromptTemplate
qa_prompt = PromptTemplate(
"당신은 회사 문서 전문 어시스턴트입니다.\n"
"주어진 문서 맥락만을 사용해 질문에 답변하세요.\n"
"모르는 경우 '문서에서 해당 정보를 찾을 수 없습니다'라고 말하세요.\n\n"
"맥락 정보:\n"
"---------------------\n"
"{context_str}\n"
"---------------------\n"
"질문: {query_str}\n"
"답변: "
)
query_engine = RetrieverQueryEngine.from_args(
retriever=retriever,
node_postprocessors=postprocessors,
text_qa_template=qa_prompt,
response_mode="compact"
)
# 8. 쿼리 실행
response = query_engine.query("2025년 매출 목표는 얼마인가요?")
print("답변:", response.response)
print("\n출처 노드:")
for node in response.source_nodes:
print(f" - 스코어 {node.score:.3f}: {node.text[:100]}...")
코드 비교 분석
| 항목 | LangChain | LlamaIndex |
|---|---|---|
| 코드 라인 수 (동일 기능) | ~45줄 | ~55줄 |
| 설정 방식 | 각 컴포넌트별 개별 설정 | Settings 전역 설정으로 일관성 |
| 후처리 유연성 | 제한적 | NodePostprocessor 체인으로 강력한 후처리 |
| 쿼리 모드 지원 | search_type 파라미터 |
vector_store_query_mode + 더 다양한 모드 |
| 응답 메타데이터 | source_documents 리스트 |
source_nodes (스코어·메타데이터 풍부) |
| 스트리밍 | qa_chain.astream() |
query_engine.query() + streaming=True |
성능 벤치마크
아래 수치는 동일한 환경(AWS EC2 c5.2xlarge, Python 3.11, OpenAI gpt-4o-mini, 1000개 청크 ChromaDB)에서 측정한 벤치마크다.
| 측정 항목 | LangChain v1.0 | LlamaIndex 2.0 | 단위 |
|---|---|---|---|
| 인덱스 구축 시간 (1000 청크) | 28.4s | 24.1s | 초 |
| 단순 쿼리 응답 시간 (p50) | 1.82s | 1.67s | 초 |
| 복잡 쿼리 응답 시간 (p50) | 4.31s | 3.98s | 초 |
| 메모리 사용량 (피크) | 512MB | 478MB | MB |
| 동시 요청 처리 (10 concurrent) | 8.2 req/s | 9.7 req/s | req/s |
| RAG 정확도 (RAGAS Faithfulness) | 0.81 | 0.87 | 0~1 |
| RAG 정확도 (RAGAS Answer Relevancy) | 0.79 | 0.83 | 0~1 |
해석: 순수 성능 차이는 크지 않으나, RAG 품질 지표(Faithfulness, Answer Relevancy)에서 LlamaIndex가 일관되게 앞선다. 특히 하이브리드 검색과 재순위화를 적용하면 LlamaIndex의 RAG 품질이 더욱 두드러진다.
학습 곡선 비교
입문 단계 (0~2주)
LangChain: 개념이 많다. Chain, Runnable, LCEL(LangChain Expression Language), Tool, Agent, Memory, Callback 등 핵심 추상화만 10개가 넘는다. v0.1 → v0.2 → v1.0 마이그레이션 과정에서 API가 자주 변경돼 과거 튜토리얼이 현재 버전과 맞지 않는 경우가 많다.
LlamaIndex: SimpleDirectoryReader → VectorStoreIndex → QueryEngine의 3단계 흐름이 직관적이다. 공식 문서의 "5분 시작 가이드"로 실제 동작하는 RAG를 15분 안에 구축할 수 있다.
중급 단계 (1~3개월)
LangChain: LCEL의 파이프(|) 문법에 익숙해지면 복잡한 체인을 간결하게 표현할 수 있다. LangSmith로 체인 실행을 시각화하고 디버깅하는 능력이 핵심이다.
LlamaIndex: Retriever, NodePostprocessor, ResponseSynthesizer를 독립적으로 조합하는 패턴을 이해하면 복잡한 RAG 파이프라인을 체계적으로 구성할 수 있다.
고급 단계 (3개월 이상)
LangChain: LangGraph로 상태 기반 멀티에이전트 시스템을 구현하는 단계. 그래프 이론과 스트리밍 이벤트 처리에 대한 이해가 필요하다.
LlamaIndex: LlamaIndex Workflows(이벤트·스텝 기반)로 복잡한 데이터 파이프라인 오케스트레이션, LlamaCloud 연동 엔터프라이즈 배포까지 나아간다.
LLM 프레임워크를 처음 배우는 개발자라면 LlamaIndex의 직관적인 3단계 흐름(로드 → 인덱스 → 쿼리)으로 RAG 개념을 먼저 익히는 것이 효율적이다. 에이전트와 도구 통합이 필요해지는 시점에 LangChain을 추가로 학습하는 순서가 학습 곡선을 최소화한다.
에코시스템 비교
| 항목 | LangChain | LlamaIndex |
|---|---|---|
| GitHub Stars (2026.04) | 105,000+ | 42,000+ |
| PyPI 주간 다운로드 | 약 250만 | 약 90만 |
| 내장 LLM 프로바이더 지원 | 100+ | 50+ |
| 벡터 스토어 통합 | 50+ | 70+ |
| 데이터 로더 | 100+ | 200+ (LlamaHub) |
| Discord 멤버 | 85,000+ | 25,000+ |
| 공식 문서 언어 | 영어 | 영어 (한국어 일부) |
| 유료 플랫폼 | LangSmith / LangGraph Cloud | LlamaCloud |
| 기업 고객 | Elastic, Rakuten, Moody's | Airbnb, Uber, Palantir |
| 창업 연도 | 2023 | 2023 |
| 누적 투자 금액 | $35M | $70M |
언제 무엇을 선택해야 하나 — 의사결정 가이드
내 프로젝트는 무엇인가?
│
├─ 단순 LLM 호출 + 도구 연동 (API, 웹 검색, 계산기)
│ └─ → LangChain (풍부한 내장 도구, ReAct 에이전트)
│
├─ 문서·PDF·DB 기반 질의응답 (RAG)
│ ├─ 정확도가 최우선 (기업 내부 문서, 법률, 의료)
│ │ └─ → LlamaIndex (하이브리드 검색 + 재순위화)
│ └─ 빠른 프로토타입 (MVP, 개인 프로젝트)
│ └─ → LlamaIndex (5분 시작 가이드)
│
├─ 복잡한 멀티에이전트 시스템
│ ├─ 워크플로우 상태 관리가 복잡
│ │ └─ → LangGraph (LangChain의 그래프 에이전트)
│ └─ 이벤트 기반 비동기 파이프라인
│ └─ → LlamaIndex Workflows
│
├─ 엔터프라이즈 데이터 파이프라인
│ ├─ 대용량 문서 관리 + 클라우드 관리형 서비스 필요
│ │ └─ → LlamaCloud (LlamaIndex 엔터프라이즈)
│ └─ LLM 옵저버빌리티·실험 추적
│ └─ → LangSmith (LangChain 엔터프라이즈)
│
├─ 챗봇 (대화 맥락 유지 중요)
│ └─ → LangChain (다양한 Memory 전략)
│
└─ 멀티모달 RAG (이미지+텍스트+표 혼합 문서)
└─ → LlamaIndex (2025년 멀티모달 업데이트)
사용 사례별 최종 추천
| 시나리오 | 추천 | 이유 |
|---|---|---|
| 빠른 프로토타이핑 | LlamaIndex | 3줄 코드로 동작하는 RAG 구현 가능 |
| 복잡한 RAG (재순위화, 하이브리드 검색) | LlamaIndex | RAG 파이프라인 최적화 도구 압도적 |
| 멀티에이전트 시스템 | LangGraph (LangChain) | 스테이트풀 그래프 에이전트 완성도 |
| 챗봇 + 도구 연동 | LangChain | 풍부한 도구, 메모리, 모델 지원 |
| 엔터프라이즈 문서 관리 | LlamaCloud | 관리형 파이프라인 + 200+ 데이터 로더 |
| LLM 실험·평가 추적 | LangSmith | 시각적 디버깅 + A/B 테스트 |
| 둘 다 쓰기 | LangChain + LlamaIndex | LlamaIndex로 검색, LangChain으로 에이전트 구성 |
최신 트렌드 — LangGraph vs LlamaIndex Workflows
2025~2026년의 가장 중요한 발전은 두 프레임워크 모두 단순 체인을 넘어 복잡한 에이전트 워크플로우로 진화하고 있다는 점이다.
LangGraph (LangChain의 에이전트 레이어)
LangGraph는 에이전트를 상태 기계(State Machine) 로 모델링한다. 노드(실행 단위)와 엣지(전환 조건)로 구성된 유향 그래프를 통해 복잡한 멀티에이전트 협업을 표현한다.
# LangGraph 멀티에이전트 예시 (간략)
from langgraph.graph import StateGraph, END
from langgraph.prebuilt import ToolNode
# 에이전트 상태 정의
from typing import TypedDict, Annotated
import operator
class AgentState(TypedDict):
messages: Annotated[list, operator.add]
next: str
# 그래프 구성
graph = StateGraph(AgentState)
graph.add_node("researcher", research_agent)
graph.add_node("writer", writer_agent)
graph.add_node("tools", ToolNode(tools))
graph.add_conditional_edges(
"researcher",
lambda state: state["next"],
{"continue": "writer", "tools": "tools", "end": END}
)
app = graph.compile()
LlamaIndex Workflows (이벤트 기반)
LlamaIndex Workflows는 에이전트를 이벤트·스텝 체인으로 모델링한다. 비동기 이벤트 처리에 최적화돼 있어 복잡한 데이터 파이프라인을 더 자연스럽게 표현한다.
# LlamaIndex Workflows 예시 (간략)
from llama_index.core.workflow import Workflow, step, Event, StartEvent, StopEvent
class ResearchEvent(Event):
query: str
class ResearchWorkflow(Workflow):
@step
async def research(self, ev: StartEvent) -> ResearchEvent:
# 웹 검색 및 문서 수집
results = await self.search_web(ev.query)
return ResearchEvent(query=results)
@step
async def synthesize(self, ev: ResearchEvent) -> StopEvent:
# 결과 종합
summary = await self.llm.acomplete(ev.query)
return StopEvent(result=summary)
workflow = ResearchWorkflow(timeout=60)
result = await workflow.run(query="LLM 프레임워크 최신 동향")
| 비교 항목 | LangGraph | LlamaIndex Workflows |
|---|---|---|
| 모델링 방식 | 유향 그래프 (노드+엣지) | 이벤트+스텝 체인 |
| 상태 관리 | 명시적 State TypedDict | 이벤트 객체 전달 |
| 비동기 지원 | 부분 지원 | 완전 비동기 (네이티브) |
| 디버깅 | LangSmith 연동 | 내장 시각화 도구 |
| 학습 난이도 | 높음 (그래프 이론 필요) | 중간 (이벤트 패턴 직관적) |
| 성숙도 | 높음 (2024.01 출시) | 중간 (2024.03 출시) |
실전 마이그레이션 팁
이미 LangChain을 사용 중이라면, 고급 RAG 기능만 LlamaIndex로 교체하는 하이브리드 접근법이 현실적이다.
# LlamaIndex 검색기를 LangChain Retriever로 래핑
from llama_index.core import VectorStoreIndex
from llama_index.core.langchain_helpers.agents import IndexToolConfig, LlamaIndexTool
# LlamaIndex 인덱스 생성
index = VectorStoreIndex.from_documents(documents)
# LangChain 호환 도구로 변환
tool_config = IndexToolConfig(
query_engine=index.as_query_engine(),
name="company_docs_search",
description="회사 내부 문서 검색 도구"
)
llama_tool = LlamaIndexTool.from_tool_config(tool_config)
# LangChain 에이전트에서 사용
from langchain.agents import initialize_agent
agent = initialize_agent(
tools=[llama_tool],
llm=ChatOpenAI(model="gpt-4o"),
agent="zero-shot-react-description"
)
독자를 위한 액션 아이템
- LlamaIndex 시작:
pip install llama-index후 공식 5분 가이드 실습 - LangChain 시작:
pip install langchain langchain-openai후 LCEL 튜토리얼 실습 - RAG 평가: RAGAS 라이브러리로 자신의 RAG 파이프라인 품질 측정
- LangSmith 무료 계정: 기존 LangChain 프로젝트에 LangSmith 연동해 실행 추적
- LangGraph 학습: LangGraph 공식 튜토리얼의 ReAct 에이전트 구현
- LlamaHub 탐색: llamahub.ai에서 자신의 데이터 소스에 맞는 로더 탐색
- 벤치마크 직접 실행: 자신의 데이터셋으로 두 프레임워크 RAG 정확도 직접 비교 측정
참고 자료
- LangChain 공식 문서 v1.0
- LlamaIndex 공식 문서 2.0
- LangGraph 공식 튜토리얼 — 멀티에이전트 시스템 구현
- LlamaIndex Workflows 가이드
- RAGAS: RAG 평가 프레임워크 GitHub
- LlamaHub — 200+ 데이터 로더 허브
- LangSmith 공식 사이트 — LLM 옵저버빌리티
- Towards Data Science — LangChain vs LlamaIndex 2025 벤치마크
- Harrison Chase 인터뷰 — LangChain 설계 철학 (Lex Fridman Podcast)
- Jerry Liu 인터뷰 — LlamaIndex의 RAG 비전 (The Gradient)
- Pinecone Blog — RAG 파이프라인 프레임워크 선택 가이드 2026
- LangChain GitHub — v1.0 마이그레이션 가이드
- LangChain(100k+ Stars)은 에이전트·도구 통합·챗봇에 최적, LlamaIndex(42k+ Stars)는 RAG·문서 검색·멀티모달 인덱싱에 특화돼 있다.
- RAG 품질 벤치마크(RAGAS Faithfulness 0.87 vs 0.81)에서 LlamaIndex가 일관되게 앞서며, 하이브리드 검색·재순위화 기능은 LlamaIndex의 독보적 강점이다.
- LangGraph(상태 기계 기반)와 LlamaIndex Workflows(이벤트 기반) 모두 복잡한 멀티에이전트 시나리오를 지원하며, 두 프레임워크는 혼합 사용도 공식 지원한다.
- 입문자에게는 직관적인 3단계 흐름의 LlamaIndex를, 도구·API 통합이 핵심인 프로젝트에는 LangChain을, RAG 정확도가 비즈니스 결과에 직결되는 엔터프라이즈 환경에는 LlamaIndex를 우선 추천한다.
- 기존 LangChain 프로젝트에 LlamaIndex RAG를 도구(Tool)로 래핑해 연동하는 하이브리드 전략이 실전에서 가장 유연한 선택지다.