LangChain-Chroma vs 바닐라ChromaDB, Retriever
무엇이 다르고, 언제 무엇을 써야 할까?
sol-commits Oct 9, 2025
TL;DR
- LangChain-Chroma는 RAG 파이프라인과 자연스럽게 결합되는 벡터 스토어 래퍼
- LLM-친화 API 가 자엊ㅁ
- 바닐라 ChromaDB는 벡터DB 자체 기능(로컬 PersistentClient, 원격 HttpClient 등)에 완전한 접근을 줌
- 최신 기능 반영이 빠르고 세밀한 운영 제어가 강점
- 바닐라 ChromaDB
collection.query(... n_results=k)로 top-k 확보 → 직접 프롬프트에 삽입
- Langchain-Chroma
as_retriever()로 리트리버 객체 획득- 아래 셋 중 하나로 연결
- 수동:
retriever.get_relevant_documents()→ 프롬프트에 {context}로 주입 - LCEL 파이프라인:
{"context": retreiver} | prompt | llm - 툴/에이전트:
create_retriever_tool(...)→ LLM이 필요 시 자동 호출 - 검색(top-k) → 문맥 합성 → 프롬프트 → LLM까지를 표준 오케스트레이션으로 묶을 수 있음
search_type="mmr" | "similarity" | "similarity_score_threshold", filter, k등을 연결부에서 쉽게 튜닝- 메모리/평가/로깅과의 확장성이 매우 좋음
Langchain-Chroma 장점
Retriever
RAG(Retrieval-Augmented Generation) 시스템의 검색 엔진 역할을 하는 컴포넌트LLM은 외부 지식을 기억하지 않음 → Retriever가 문서 DB(Chroma, FAISS, Pinecone)에서 사용자 질문과 관련된 top-k 문서를 찾아 LLM에 전달
질문→임베딩→가까운 문서 검색→문서들을 LLM에 넘김이 과정을 자동화하는 모듈이 바로 Retriever
- LangChain 기준 인터페이스
- Retriever vs VectorStore
| ㅤ | 역할 |
| VectorStore(Chroma,FAISS) | 임베딩 저장·검색 기능 제공(=DB 그 자체) |
| Retriever | VectorStore를 LLM에 맞게 추상화한 인터페이스 |
- 연결 흐름 예시(LCEL 식)
- Retriever 유형
| 타입 | 설명 |
| VectorStore Retriever | 벡터 DB 유사도 검색(MMR, Threshold 지원) |
| MultiVector Retriever | 이미지 + 텍스트 혼합 검색 |
| ParentDocument Retriever | 작은 청크 검색 → 큰 본문 반환 |
| Contextual Compression Retriever | 검색결과를 요약해 LLM에 전달 |
| Ensemble Retriever | 여러 검색기(벡터 + BM25 등) 결합 |
| TimeWeighted Retriever | 최신 문서 우선 검색 |
- LCEL
- prompt의 출력이 llm의 입력으로 자동 전달됨
LangChain Expression LanguageLangChain에서 LLM 파이프라인을 선언형으로 구성할 수 있게 만든
연결 언어
프롬프트 -> LLM -> 출력 후처리이런 일련의 과정을 연결 연산자
|하나로 표현할 수 있게 해주는 표준 문법 체계