
핵심 구성 요소 & 역할
| 블록 | LangChain 대표 컴포넌트 | 핵심 역할 | 설계 포인트 |
|---|---|---|---|
| Document Loader | DirectoryLoader, WebBaseLoader, PyPDFLoader, 등 | 원천 데이터 수집 | 가능한 한 원문 메타데이터(제목, URL, 섹션) 보존 |
| Text Splitter | RecursiveCharacterTextSplitter, MarkdownHeaderTextSplitter | 문서 → 청크화 | chunk_size/overlap을 질의 길이/도메인에 맞게 튜닝 (코드/표/제목 경계 고려) |
| Embeddings | HuggingFaceEmbeddings(예: BAAI/bge-m3) 또는 OpenAIEmbeddings | 의미 벡터화 | 한국어/도메인 맞춤 임베딩 선택, 정규화 권장 |
| Vector Store | Chroma, FAISS, Milvus, Pinecone, Weaviate, Qdrant | 벡터 색인/근접검색 | 규모·비용·지연 시간 기준 선택, 필드 인덱스/필터링 활용 |
| Retriever | as_retriever(search_type="mmr"/"similarity") | 쿼리 → 관련 청크 Top-k | k, fetch_k, MMR(다양성), 메타필터; 필요 시 Hybrid(BM25+벡터) |
| Query Transform(선택) | MultiQueryRetriever, HyDE, Step-back | 질의 재작성 | 다의성/부족한 키워드 보완, Recall↑ |
| Reranker/Compression(선택) | ContextualCompressionRetriever + LLMChainExtractor 또는 Cross-Encoder 재랭크 | 장황한 컨텍스트를 가볍게·정확하게 | 노이즈↓, 프롬프트 길이 관리, Latency vs Quality 트레이드오프 |
| Prompt Template | ChatPromptTemplate | 지침·컨텍스트·질문을 구조화 | “출처 인용”, “근거 중심 답변” 지시어 명시 |
| LLM | ChatOpenAI, ChatAnthropic, ChatOllama 등 | 근거기반 답변 생성 | 비용/지연/성능 균형, JSON 모드/구조화 출력 가능 |
| Chains (LCEL) | create_stuff_documents_chain + create_retrieval_chain | 검색 → 생성 파이프라인 | LCEL로 투명한 파이프라인(디버그/재조합 쉬움) |
| Memory(대화형) | ConversationBufferMemory 등 | 사용자 맥락 유지 | 질의 응답 근거는 항상 문서에서—기억과 분리 |
| Observability/Cache | LangSmith(트레이싱), InMemoryCache/Redis | 성능/오류 추적, 비용↓ | 프롬프트/임베딩 캐시로 응답속도 향상 |
| Evaluation | RAGAS, LangChain Eval | 품질 측정/회귀테스트 | Hit@k, nDCG, Faithfulness 등 자동 지표 |