사내 AI 에이전트 PoC를 진행하면서 RAG(Retrieval-Augmented Generation) 파이프라인 구축이 필요했습니다. LangChain과 LlamaIndex 중 어느 쪽이 우리 팀에 맞을지 2주간 직접 사용해 봤습니다.
테스트 환경
| 항목 | 설정 |
|---|---|
| LLM | GPT-4o, Claude 3.5 Sonnet |
| 벡터 DB | Pinecone, Chroma |
| 데이터 | 내부 기술 문서 1,200페이지 |
| 평가 기준 | 개발 속도, 유지보수성, 성능 |
LangChain 사용 후기
장점
- 생태계가 압도적: 공식/커뮤니티 통합이 500개 이상
- 빠른 프로토타입:
LCEL문법으로 체인 구성이 직관적 - 도구 확장: 웹 검색, DB 쿼리, API 호출을 하나의 체인으로 묶기 쉬움
단점
- 버전 호환성: v0.1 → v0.2 마이그레이션 때 API가 크게 바뀜
- 추상화 과다: 내부 동작을 파악하기 어려워 디버깅 시간 ↑
LlamaIndex 사용 후기
장점
- 데이터 인덱싱 전문: 문서 청킹, 임베딩, 쿼리 엔진이 기본적으로 잘 설계됨
- 검색 품질: ReAct 에이전트 없이도 단순 RAG에서 더 높은 정확도
- 관찰가능성: 쿼리 과정을 step-by-step으로 시각화하는 도구 내장
단점
- 에이전트 기능: LangChain보다 도구 연동이 덜 유연함
- 학습 곡선: “데이터 중심” 설계라 컨셉을 이해하는 데 시간 필요
직접 비교한 코드
# LangChain: LCEL 체인 구성
from langchain import hub
from langchain.schema import StrOutputParser
prompt = hub.pull("rlm/rag-prompt")
chain = (
{"context": retriever, "question": RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()
)
# LlamaIndex: 쿼리 엔진 구성
from llama_index.core import VectorStoreIndex
index = VectorStoreIndex.from_documents(docs)
query_engine = index.as_query_engine(similarity_top_k=5)
response = query_engine.query("질문 내용")
팀 결정: LlamaIndex 선택
이유 3가지:
- 우리 핵심 문제는 “데이터 검색 품질” → LlamaIndex의 강점
- 에이전트 도구 연동은 필요 없음
- LangChain의 버전 불안정성이 운영 리스크로 판단
현재 상태
LlamaIndex로 구축한 RAG 파이프라인을 내부 문서 검색 챗봇으로 운영 중입니다. 정확도는 78% → 91%로 향상됐습니다.
참고: 두 프레임워크 모두 활발히 업데이트되고 있으니, 본 후기는 2025년 6월 기준입니다.