728x90
SMALL
이전 qdrant라는 vectorDB에 대해 알아보았다.
https://pleasestudy-alswldi.tistory.com/326
[VectorDB] Qdrant
🐹 Qdrant란?벡터 유사도 검색(Vector Similarity Search) 및 벡터 데이터 관리를 위한 오픈소스 데이터베이스이다.높은 성능과 확장성을 제공하면서도 사용자 친화적인 API를 통해 쉽게 설정 및 실행할
pleasestudy-alswldi.tistory.com
이제 실제 데이터를 올리고 테스트해보자.
qdrant 접속 확인
- qdrant 클라이언트 초기화
pip install qdrant_client
# Qdrant 클라이언트 생성
from qdrant_client import QdrantClient
client = QdrantClient(host="IP", port=6333)
- 테스트 컬렉션 생성
from qdrant_client.http.models import Distance, VectorParams
# 테스트 컬렉션 생성
collection_name = "test_collection"
client.create_collection(
collection_name=collection_name,
vectors_config=VectorParams(size=4, distance=Distance.COSINE)
)
- 테스트 컬렉션 정보 확인
# 컬렉션 정보 확인
collection_info = client.get_collection(collection_name)
print("Collection Info:", collection_info)
Collection Info: status=<CollectionStatus.GREEN: 'green'> optimizer_status=<OptimizersStatusOneOf.OK: 'ok'> vectors_count=None indexed_vectors_count=0 points_count=0 segments_count=8 config=CollectionConfig(params=CollectionParams(vectors=VectorParams(size=4, distance=<Distance.COSINE: 'Cosine'>, hnsw_config=None, quantization_config=None, on_disk=None, datatype=None, multivector_config=None), shard_number=1, sharding_method=None, replication_factor=1, write_consistency_factor=1, read_fan_out_factor=None, on_disk_payload=True, sparse_vectors=None), hnsw_config=HnswConfig(m=16, ef_construct=100, full_scan_threshold=10000, max_indexing_threads=0, on_disk=False, payload_m=None), optimizer_config=OptimizersConfig(deleted_threshold=0.2, vacuum_min_vector_number=1000, default_segment_number=0, max_segment_size=None, memmap_threshold=None, indexing_threshold=20000, flush_interval_sec=5, max_optimization_threads=None), wal_config=WalConfig(wal_capacity_mb=32, wal_segments_ahead=0), quantization_config=None) payload_schema={}
벡터 저장 및 검색 기능 확인한다.
test scenario
- 4차원 벡터 [0.1, 0.2, 0.3, 0.4]를 테스트 데이터로 Qdrant에 저장
- 동일한 벡터 [0.1, 0.2, 0.3, 0.4]를 검색 쿼리로 사용
- 검색 결과를 확인하여 저장한 데이터가 정확히 검색되는지 확인
- 테스트 데이터 포인터 삽입
- 벡터 [0.1,0.2,0.3,0.4] 생성
- 메타 데이터로 “text”:”Test point”라는 페이로드를 벡터와 같이 저장
- 고유 식별자로 ID 1 부여
- # 테스트 포인트 삽입 client.upsert( collection_name=collection_name, points=[ {"id": 1, "vector": [0.1, 0.2, 0.3, 0.4], "payload": {"text": "Test point"}}, ] )
- 검색 수행
# 검색 테스트
search_result = client.search(
collection_name=collection_name,
query_vector=[0.1, 0.2, 0.3, 0.4],
limit=1
)
print("Search Result:", search_result)
Search Result: [ScoredPoint(id=1, version=0, score=1.0, payload={'text': 'Test point'}, vector=None, shard_key=None, order_value=None)]
qdrant에 문서 올리기
- 임베딩 모델 설정
# 설정
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
embed_model = HuggingFaceEmbedding(model_name="BAAI/bge-m3")
- rag 테스트 컬렉션 생성
from qdrant_client.http.models import Distance, VectorParams
# 테스트 컬렉션 생성
collection_name = "pdf_read_test_collection"
client.create_collection(
collection_name=collection_name,
vectors_config=VectorParams(size=1024, distance=Distance.COSINE) # 임베딩 모델의 dimension으로 설정
)
- pdf에서 텍스트 추출
from PyPDF2 import PdfReader
reader = PdfReader("../data/test_file.pdf")
text = ""
for page in reader.pages:
page_text = page.extract_text()
if page_text:
text += page_text + "\\n"
- 코드를 텍스트 벡터로 변환하여 qdrant에 저장할 포인트 생성
from qdrant_client.http.models import PointStruct
points=[]
if text.strip():
vector = embed_model.get_text_embedding(text)
points.append(PointStruct(id=2024, vector=vector, payload={"text": text}))
- 만들어진 포인트 삽입
client.upsert(
collection_name="pdf_read_test_collection",
points=points
)
- sample query로 검색 확인
query_vector = embed_model.get_text_embedding(query_text)
results = client.search(
collection_name="pdf_read_test_collection",
query_vector=query_vector,
limit=1,
)
print("Search Results:")
for result in results:
print(f"Score: {result.score}")
🐹 issue
ValueError: "ChatResponse" object has no field "usage”
—> python version error
커널의 python 버전 3.11에서 발생했다
버전을 3.10으로 조정하니 해결
728x90
LIST
'Internship' 카테고리의 다른 글
| [RAG프로젝트] Vector DB -milvus (0) | 2025.03.13 |
|---|---|
| RAG 시스템 검색 엔진 정리 (0) | 2025.03.13 |
| RAG 프로젝트 - OpenWebUI 검색 사용 (0) | 2025.03.13 |
| RAG 프로젝트 - Google Search agent (0) | 2025.03.13 |
| OpenWebUI & pipeline 서비스 구성 (0) | 2025.03.13 |