포스트

[Qdrant] Qdrant 란?

문서를 저장하는 예시로 VectorDB Qdrant 사용해보기


Qdrant 란?

  • 벡터 유사도 검색(Vecotr Similarity Search) 및 벡터 데이터 관리를 위한 오픈소스 데이터 베이스이다.
  • 높은 성능과 확장성을 제공하면서도 사용자 친화적인 API를 통해 쉽게 설정 및 실행할 수 있고, Python SDK와 FASTAPI 와의 통합으로 AI/ML 프로젝트에서 효율적으로 사용할 수 있다.

Qdrant 서버 생성 및 실행행

1
2
3
4
5
6
7
# Dockerhub 에서 qdrant image pull
docker pull qdrant/qdrant

# Server 실행
docker run -p 6333:6333 \
    -v $(pwd)/qdrant_storage:/qdrant/storage:z" \
    qdrant/qdrant

Qdrant 클라이언트 생성

1
2
3
from qdrant_client import QdrantClient

client = QdrantClient(host='localhost', port=6333) # localhost 일경우 설정

임베딩 모델 설정

1
2
3
from langchain_huggingface import HuggingFaceEmbeddings

embed_model = HuggingFaceEmbeddings(model_name="BAAI/bge-m3")

Qdrant 문서 삽입 Collection 생성

1
2
3
4
5
6
7
from qdrant_client.http.models import Distance, VectorParams

collection_name = "pdf_read_test_collection"
clinet.create_collection(
	collection_name=collection_name,
	vectors_config=VectorParams(size=1024, distance=Distance.COSINE)
)

Qdrant 문서 삽입

문서 load

1
2
3
4
5
from langchain_community.document_loaders import PDFPlumberLoader

loader = PDFPlumberLoader('pdf file path')

docs = loader.load()

Qdrant 에 저장할 point 생성

1
2
3
4
5
6
7
8
from qdrant_client.http.models import PointStruct

points = []

for i, doc in enumerate(docs):
	text = doc.page_content
	vector = embed_model.embed_query(text)
	points.append(PointStruct(id=i, vector=vector, payload={'text' : text}))

만들어진 point 삽입

1
2
3
4
client.upsert(
	collection_name=collection_name,
	points=points
)

Qdrant DB 내 Collection 문서 확인

1
2
client.scroll(collection_name=collection_name, with_vectors=True)
# with_vectors 를 True 로 놓으면 embedding vector 값들을 return

Qdrant 검색

1
2
3
4
5
6
7
8
9
query_vector = embed_model.embed_query('삼성전자가 만든 AI 이름은?)

results = client.query_points(
	collection_name=collection_name,
	query=query_vector,
	limit=1.
)

print(f"Search Results : {results}")
1
Search Results : points=[ScoredPoint(id=12, version=1, score=0.63743854, payload={'text': 'SPRi AI Brief |\n2023-12월호\n삼성전자, 자체 개발 생성 AI ‘삼성 가우스’ 공개\nKEY Contents\nn 삼성전자가 온디바이스에서 작동 가능하며 언어, 코드, 이미지의 3개 모델로 구성된 자체 개발 생성\nAI 모델 ‘삼성 가우스’를 공개\nn 삼성전자는 삼성 가우스를 다양한 제품에 단계적으로 탑재할 계획으로, 온디바이스 작동이 가능한\n삼성 가우스는 외부로 사용자 정보가 유출될 위험이 없다는 장점을 보유\n£언어, 코드, 이미지의 3개 모델로 구성된 삼성 가우스, 온디바이스 작동 지원\nn 삼성전자가 2023년 11월 8일 열린 ‘삼성 AI 포럼 2023’ 행사에서 자체 개발한 생성 AI 모델\n‘삼성 가우스’를 최초 공개\n∙ 정규분포 이론을 정립한 천재 수학자 가우스(Gauss)의 이름을 본뜬 삼성 가우스는 다양한 상황에\n최적화된 크기의 모델 선택이 가능\n∙ 삼성 가우스는 라이선스나 개인정보를 침해하지 않는 안전한 데이터를 통해 학습되었으며,\n온디바이스에서 작동하도록 설계되어 외부로 사용자의 정보가 유출되지 않는 장점을 보유\n∙ 삼성전자는 삼성 가우스를 활용한 온디바이스 AI 기술도 소개했으며, 생성 AI 모델을 다양한 제품에\n단계적으로 탑재할 계획\nn 삼성 가우스는 △텍스트를 생성하는 언어모델 △코드를 생성하는 코드 모델 △이미지를 생성하는\n이미지 모델의 3개 모델로 구성\n∙ 언어 모델은 클라우드와 온디바이스 대상 다양한 모델로 구성되며, 메일 작성, 문서 요약, 번역 업무의\n처리를 지원\n∙ 코드 모델 기반의 AI 코딩 어시스턴트 ‘코드아이(code.i)’는 대화형 인터페이스로 서비스를 제공하며\n사내 소프트웨어 개발에 최적화\n∙ 이미지 모델은 창의적인 이미지를 생성하고 기존 이미지를 원하는 대로 바꿀 수 있도록 지원하며\n저해상도 이미지의 고해상도 전환도 지원\nn IT 전문지 테크리퍼블릭(TechRepublic)은 온디바이스 AI가 주요 기술 트렌드로 부상했다며,\n2024년부터 가우스를 탑재한 삼성 스마트폰이 메타의 라마(Llama)2를 탑재한 퀄컴 기기 및 구글\n어시스턴트를 적용한 구글 픽셀(Pixel)과 경쟁할 것으로 예상\n☞ 출처 : 삼성전자, ‘삼성 AI 포럼’서 자체 개발 생성형 AI ‘삼성 가우스’ 공개, 2023.11.08.\n삼성전자, ‘삼성 개발자 콘퍼런스 코리아 2023’ 개최, 2023.11.14.\nTechRepublic, Samsung Gauss: Samsung Research Reveals Generative AI, 2023.11.08.\n10\n'}, vector=None, shard_key=None, order_value=None)]

다양한 distance 계산 방법을 이용해서 Sparse 혹은 Dense Retriever 와 연동시킬 수있는 방법을 알아봐야겠다.

Google AdSense — Post Ad
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

Comments powered by Disqus.