Tutorial Lengkap Qdrant: Vector Database untuk Aplikasi AI
Qdrant adalah vector database performa tinggi yang dirancang untuk similarity search dan aplikasi AI. Library ini menyediakan penyimpanan dan retrieval vector embeddings yang efisien, menjadikannya ideal untuk membangun sistem rekomendasi, semantic search, dan aplikasi RAG.
Mengapa Qdrant?
Keunggulan Qdrant:- Performa tinggi: Engine berbasis Rust untuk kecepatan
- Rich filtering: Kombinasikan vector search dengan filter metadata
- Scalable: Mode terdistribusi untuk dataset besar
- Mudah digunakan: REST dan gRPC APIs
- Cloud native: Siap Docker dan Kubernetes
- Semantic search
- Sistem rekomendasi
- RAG (Retrieval-Augmented Generation)
- Image similarity search
- Anomaly detection
Instalasi
# Python client
pip install qdrant-client
Jalankan Qdrant dengan Docker
docker run -p 6333:6333 -p 6334:6334 \
-v $(pwd)/qdrantstorage:/qdrant/storage:z \
qdrant/qdrant
Verify
python -c "from qdrantclient import QdrantClient; print('Qdrant client ready')"
Quick Start
1. Koneksi ke Qdrant
from qdrantclient import QdrantClient
Instance lokal
client = QdrantClient("localhost", port=6333)
In-memory (untuk testing)
client = QdrantClient(":memory:")
Qdrant Cloud
client = QdrantClient(
url="https://xxx-xxx.us-east-1-0.aws.cloud.qdrant.io",
api
key="your-api-key"
)
Cek koneksi
print(client.getcollections())
2. Buat Collection
from qdrantclient import QdrantClient
from qdrantclient.models import Distance, VectorParams
client = QdrantClient("localhost", port=6333)
Buat collection
client.createcollection(
collectionname="mycollection",
vectorsconfig=VectorParams(size=384, distance=Distance.COSINE)
)
List collections
collections = client.getcollections()
print(collections)
3. Insert Vectors
from qdrantclient.models import PointStruct
Insert points
client.upsert(
collection
name="mycollection",
points=[
PointStruct(
id=1,
vector=[0.1, 0.2, 0.3, ...], # vektor 384-dim
payload={"title": "Dokumen 1", "category": "tech"}
),
PointStruct(
id=2,
vector=[0.4, 0.5, 0.6, ...],
payload={"title": "Dokumen 2", "category": "science"}
)
]
)
4. Search Vectors
# Search
results = client.search(
collectionname="mycollection",
queryvector=[0.1, 0.2, 0.3, ...],
limit=5
)
for result in results:
print(f"ID: {result.id}, Score: {result.score}")
print(f"Payload: {result.payload}")
Bekerja dengan Embeddings
1. Menggunakan Sentence Transformers
from qdrantclient import QdrantClient
from qdrant
client.models import Distance, VectorParams, PointStruct
from sentencetransformers import SentenceTransformer
Initialize
client = QdrantClient("localhost", port=6333)
model = SentenceTransformer("all-MiniLM-L6-v2")
Buat collection
client.recreatecollection(
collectionname="documents",
vectorsconfig=VectorParams(size=384, distance=Distance.COSINE)
)
Siapkan dokumen
documents = [
{"id": 1, "text": "Machine learning sangat menarik", "category": "tech"},
{"id": 2, "text": "Natural language processing", "category": "tech"},
{"id": 3, "text": "Resep masakan untuk pemula", "category": "food"},
]
Generate embeddings dan insert
points = []
for doc in documents:
embedding = model.encode(doc["text"]).tolist()
points.append(PointStruct(
id=doc["id"],
vector=embedding,
payload={"text": doc["text"], "category": doc["category"]}
))
client.upsert(collectionname="documents", points=points)