본문 바로가기

명사 美 비격식 (무리 중에서) 아주 뛰어난[눈에 띄는] 사람[것]

이론

Vector Database: [LangChain] FAISS, Chroma, Milvus, Qdrant, Pinecone, Weaviate, Elasticsearch, OpenSearch, LanceDB

vector database

회사에 제품설명서, 업무 메뉴얼, 사내규정, 환불정책, 고객 faq, 기술문서, 계약서 등 수백개에서 수천개까지 존재해 이 문서를 잘게 나눠 chunking 임베딩 embedding하면 엄청난 양의 벡터가 만들어진다. 이를 단순한 numpy 검색으로 처리하기 어려워지며 vector database를 사용한다.

vector db는 텍스트, 이미지, 음성등을 벡터 embedding 형태로 저장하고 유사도 검색을 수행하는 데이터베이스  많은 문서를 빠르게 검색하기 위한 전용 데이터 베이스

FAISS, Chroma, Milvus, Qdrant, Pinecone, Weaviate, Elasticsearch, OpenSearch, LanceDB가 있다. 

AI 및 RAG 학습에는 FAISS, pdf 기반 챗봇은 CHroma, 기업용 RAG서비스에는 Qdran, 초대규모 데이터에는 Milvus, 서버관리없이 빠른구축에는 Pinecone, 키워드 및 의미검색 통합에는 Elasticsearch와 Opensearch를 사용한다

이름 형태 특징 추천 용도
FAISS 라이브러리 가장 빠른 벡터 검색 RAG, 로컬 AI
Chroma Vector DB 메타데이터 관리 쉬움 PDF 챗봇
Milvus 분산 DB 초대규모 데이터 기업 AI
Qdrant Vector DB 메타데이터 필터링 강력 기업 RAG
Pinecone Cloud DB 서버 관리 없음 SaaS
Weaviate Vector DB GraphQL, Hybrid Search AI 플랫폼
Elasticsearch 검색엔진 키워드+벡터 검색 기업 검색
OpenSearch 검색엔진 Elasticsearch 오픈소스 AWS
LanceDB 파일기반 DB 매우 가볍고 빠름 로컬 AI

https://standout.tistory.com/1876

 

RAG(Retrieval-Augmented Generation)와 LLM의 Hallucination(환각): 외부 문서를 검색한 후 검색 결과를 바탕으

RAG(Retrieval-Augmented Generation)기업은 범용 언어모델을 그대로 사용하는 것이 아니라 사내 문서, 정보, 고객데이터 등을 추가해 기업전용 AI시스템을 구축하며 LLM은 이때 존재하지않는 정보를 생성

standout.tistory.com

https://standout.tistory.com/1834

 

문장을 숫자로 바꾸기 워드임베딩, 단어의 의미 벡터(embedding)를 데이터로부터 학습하는 신경망

빈도분석문장을 숫자로 바꾸는 가장 기초 방법은 빈도기반 방법이있다. 문장을 숫자로 바꾸는 가장 기초 방법은 빈도기반 방법이있다. Count, Frequency, Binary occurrence.https://standout.tistory.com/1833 빈도

standout.tistory.com

https://standout.tistory.com/1898

 

Chunking과 Embedding: Fixed Size / Recursive / Overlap Chunking

Chunk1제품의 배터리는 후면 커버를 제거한 후 교체할 수 있습니다.배터리 교체 후에는Chunk2배터리 교체 후에는 반드시 전원을 다시 켜야 합니다.A/S 기간은 구매일 기준 1년입니다.Chunking과 Embedding

standout.tistory.com

 

 

 

 

각기 코드들은 거의 비슷하며 이것이 LangChain의 가장 큰 장점 예전에는 Vector DB마다 API가 모두 달랐지만, LangChain이 공통 인터페이스를 제공하면서 사용하는 코드가 거의 동일해졌다.

LangChain 은 LLM 애플리케이션을 쉽게 개발하기 위한 오픈소스 프레임워크
OpenAI, Gemini, Claude 같은 LLM과 PDF, Vector DB, 데이터베이스, 검색엔진 등을 쉽게 연결해 주는 라이브러리

 

 

 

FAISS

Facebook AI Similarity Search

엄밀히 말하면 DBMS라기 보다 고성능 벡터 검색 라이브러리에 가깝다 .

FAISS meta 즉 facebook 에서 개발한 벡터 검색 라이브러리로 매우 빠르고 가볍고 파일저장이 쉬운 대규모 검색 성능이 뛰어나다. 대부분의 RAG 시스템은 FAISS로만으로도 충분한다.

다양한 ANN 알고리즘을 지원하나 사용자 관리기능이 거의 없고 메타데이터 기능이 제한적이며 서버 기능이 없다는 단점이 있다. .

from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings

embedding = OpenAIEmbeddings()

vectorstore = FAISS.from_documents(
    documents,
    embedding
)

vectorstore.save_local("faiss_index")

vectorstore = FAISS.load_local(
    "faiss_index",
    embedding,
    allow_dangerous_deserialization=True
)

docs = vectorstore.similarity_search(
    "환불 정책 알려줘",
    k=3
)

https://standout.tistory.com/1897

 

ANN 알고리즘이란? HNSW, IVF, PQ, DiskANN

ANN 알고리즘 Approximate Nearest Neighbor 근사 최근접 이웃일반적인 검색이 벡터 100, 000개를 모두 비교해 정확하지만 시간이 오래걸린다면, ANN검색은 가까울 가능성이 높은 후보만 선택해 후보끼리만

standout.tistory.com

 

 

 

Chroma

Chroma에서 개발했다. LLM 과 RAG를 쉽게 구축하기 위한 Vector Database

Chroma 메타데이터를 함께 관리하거나 다양한 필터링 기능이 필요한 경우 사용한다. 특정문서, 특정날짜, 특정 카테고리 등으로 검색 범위를 제한할 수 있다.  persist_directory를 지정하면 자동영속화로 자동으로 저장되어 save()를 호출할 필요가없으며 여러종류 문서를 따로 관리할 수 있다. 다만 초대규모 데이터에서는 FAISS보다 느릴 수 있다 .

정책문서 전체검색이라면 FAISS가 될것이고, 멤버십 정책안에서만 검색을 해야한다면 Chroma를 사용할 것이다.

from langchain_chroma import Chroma
from langchain_openai import OpenAIEmbeddings

embedding = OpenAIEmbeddings()

vectorstore = Chroma.from_documents(
    documents,
    embedding,
    persist_directory="./chroma_db"
)

docs = vectorstore.similarity_search(
    "환불 정책",
    k=3
)

docs = vectorstore.similarity_search(
    "환불 정책",
    k=3,
    filter={"category":"policy"}
)

 

 

Milvus

Zilliz에서 만든 수억~ 수십억개 벡터 검색 목적으로의 기업용 분산 Vector Database

여러서버 - 데이터분산 - 병렬 검색이 가능하다. gpu를 지원하고 분산처리고 고성능 ANN이 장점이나 설치가 어렵고 운영서버가 필요하다는 단점이있어 대기업,검색서비스, 추천시스템, 이미지 검색에 이용된다 .

from langchain_milvus import Milvus

vectorstore = Milvus.from_documents(
    documents,
    embedding,
    connection_args={
        "host":"localhost",
        "port":"19530"
    }
)

docs = vectorstore.similarity_search(
    "배터리 교체",
    k=5
)

 

 

Qdrant

Qdrant에서 만든 현재 기업에서 RAG 용으로 매우 많이 사용하는 DB로 메타 데이터 필터링이 매우 강력하다. RESTapi에 Docker를 지원하고 Rust기반이라 빠르며 MEtadata Filter가 매우 강력하고 HNSW를 기본 지원해 기업 RAG, 문서검색, 사내 AI로 많이 사용한다 .

from langchain_qdrant import QdrantVectorStore

vectorstore = QdrantVectorStore.from_documents(
    documents,
    embedding,
    url="http://localhost:6333",
    collection_name="policy"
)

docs = vectorstore.similarity_search(
    "환불 정책",
    k=3
)

docs = vectorstore.similarity_search(
    "환불",
    filter={
        "category":"policy"
    }
)

 

 

Pinecone

Cloud 기반 Vector Database로 서버를 직접 운영하지않는다.  모든것을 클라우드에서관리하며 설치가 불필요, 자동확장, api제공, 관리가 쉽다는 장점이있지만 유료다 . 빠른 MVP와 SaaS서비스.

스타트업에서 추천된다.

from langchain_pinecone import PineconeVectorStore

vectorstore = PineconeVectorStore.from_documents(
    documents,
    embedding,
    index_name="company-docs"
)

docs = vectorstore.similarity_search(
    "계약서",
    k=3
)

 

Weaviate

AI 기능이 매우 많은 vector database

GraphQL을 지원하고 Hybrid search, Knowledge Graph, Module구조이다.

벡터검색, 키워드검색, Graph검색이 동시에 가능하며  Ai기능이 풍부하다는 장점이있어 AI 플랫폼, 지식 그래프, 복합검색에 사용한다.

from langchain_weaviate import WeaviateVectorStore

vectorstore = WeaviateVectorStore.from_documents(
    documents,
    embedding
)

docs = vectorstore.similarity_search(
    "회원가입",
    k=3
)

 

Elasticsearch

원래는 검색엔진으로 예전에 키워드 검색만 지원했다 .최근에는 키워드와 vector search를 하메 지원하여 기존 검색 시스템을 활용하고 로그 분석과 검색을 함께 수행하는 등의 하이브리드 검색을 지원해 쇼핑몰검색, 기업검색, 문서검색 드에 사용한다.

from langchain_elasticsearch import ElasticsearchStore

vectorstore = ElasticsearchStore.from_documents(
    documents,
    embedding,
    index_name="docs"
)

docs = vectorstore.similarity_search(
    "환불 정책"
)

 

OpenSearch

Amazon 이 Elesticsearch를 기반으로 만든 오픈소스 검색엔진 기능은 매우 비슷하다. 

aws연동이 가능하고 vector searc, hybrid search와 dashboard를 제공해 aws환경에서 추천되며 기업검색, 로그분석 등에 사용된다 .

from langchain_community.vectorstores import OpenSearchVectorSearch

vectorstore = OpenSearchVectorSearch(
    index_name="docs",
    embedding_function=embedding,
    opensearch_url="http://localhost:9200"
)

docs = vectorstore.similarity_search(
    "배송 정책"
)

 

LanceDB

최근 인기가 높아진 파일기반 vector database이다. apache lane 파일 포맷을 사용하며 파일 하나에 벡터, 메타데이터, 인덱스를 함께 저장한다. 매우 가볍고 설치가 쉬우면 Python에 친화적이고 로컬 ai개발에 적합하다. 대규모 분산 서비스에는 Milvus나 Qdrant보다 기능이 적다는 단점이 있다. 개인프로젝트나 데이터분석, jupyter notebook, 로컬 RAG에 사용된다.

from langchain_community.vectorstores import LanceDB

vectorstore = LanceDB.from_documents(
    documents,
    embedding,
    uri="./lancedb"
)

docs = vectorstore.similarity_search(
    "회원가입",
    k=3
)

 

 

개인 RAG 학습 FAISS
PDF 기반 챗봇 Chroma
메타데이터 필터링이 많은 기업 문서 검색 Qdrant
수억 개 이상의 벡터를 다루는 초대규모 서비스 Milvus
서버를 직접 운영하기 싫은 SaaS·MVP Pinecone
벡터 검색과 키워드 검색을 함께 사용 Elasticsearch / OpenSearch
GraphQL·지식 그래프 기반 AI 서비스 Weaviate
로컬 파일 기반 개발, 실험, 데이터 분석 LanceDB

 

 

 

 

 

 

실무에서의 사용 경향
학습·개인 프로젝트: FAISS가 가장 많이 사용된다. 구조가 단순하고 성능이 뛰어나 RAG의 원리를 익히기에 적합
문서 기반 RAG: Chroma와 Qdrant가 많이 선택. 특히 문서의 출처, 날짜, 부서 등 메타데이터를 함께 관리해야 하는 경우
대규모 서비스: Milvus, Pinecone, Weaviate가 많이 사용. 분산 처리, 클라우드 운영, 확장성 등 운영 측면의 기능이 풍부하다.
기존 검색 시스템과 통합: 이미 Elasticsearch나 OpenSearch를 사용 중인 기업이라면 벡터 검색 기능을 추가하여 키워드 검색과 의미 검색을 함께 사용하는 사례가 많다.