Qdrant орнату: алғашқы қолдану, Python және NestJS қосу
Qdrant-ты локалды іске қосып, бірінші коллекция құрып, оны Python және NestJS жобаларынан қолдану.
#Programming Qdrant Python / NestJS / Docker
Qdrant - эмбеддингтерді сақтауға және ұқсас векторларды іздеуге арналған векторлық дерекқор. Ол RAG, семантикалық іздеу, ұсыныс жүйелері және AI агенттеріндегі жады үшін қолданылады.
Негізгі ой: Qdrant мәтінді өзі түсінбейді. Мәтінді алдымен embedding векторына айналдырып, содан кейін сол векторды сақтайсыз немесе іздеуге жібересіз. 1Docker арқылы орнату
Ең жылдам жол - Qdrant контейнерін іске қосу. Docker орнатылған және іске қосылған болуы керек.
docker pull qdrant/qdrant
docker run -d --name qdrant -p 6333:6333 -v qdrant_storage:/qdrant/storage qdrant/qdrant
Тексеру үшін http://localhost:6333 ашыңыз. Dashboard керек болса: http://localhost:6333/dashboard.
curl http://localhost:6333/collections
2Алғашқы коллекция және іздеу
Коллекциядағы size embedding өлшемімен бірдей болуы керек. Мысалы, модель 384 өлшемді вектор берсе, Qdrant коллекциясында да size: 384 көрсетіледі. Мұнда түсінікті болу үшін 4 өлшемді тест векторлар қолданылды.
curl -X PUT http://localhost:6333/collections/demo_notes -H "Content-Type: application/json" -d '{"vectors":{"size":4,"distance":"Cosine"}}'
curl -X PUT http://localhost:6333/collections/demo_notes/points -H "Content-Type: application/json" -d '{"points":[{"id":1,"vector":[0.05,0.61,0.76,0.74],"payload":{"text":"Qdrant stores vectors"}},{"id":2,"vector":[0.19,0.81,0.75,0.11],"payload":{"text":"NestJS can call Qdrant"}}]}'
curl -X POST http://localhost:6333/collections/demo_notes/points/query -H "Content-Type: application/json" -d '{"query":[0.2,0.1,0.9,0.7],"limit":2,"with_payload":true}'
3Python арқылы қосылу
Python жобасында ресми клиентті орнатыңыз. Нағыз AI жобада тест вектордың орнына embedding model берген нақты вектор қолданылады.
pip install qdrant-client
from qdrant_client import QdrantClient
from qdrant_client.models import Distance, PointStruct, VectorParams
client = QdrantClient(url="http://localhost:6333")
collection = "python_notes"
if not client.collection_exists(collection):
client.create_collection(
collection_name=collection,
vectors_config=VectorParams(size=4, distance=Distance.COSINE),
)
client.upsert(
collection_name=collection,
points=[
PointStruct(id=1, vector=[0.05, 0.61, 0.76, 0.74], payload={"text": "Python connects to Qdrant"}),
PointStruct(id=2, vector=[0.19, 0.81, 0.75, 0.11], payload={"text": "Qdrant is useful for RAG"}),
],
)
result = client.query_points(
collection_name=collection,
query=[0.2, 0.1, 0.9, 0.7],
limit=2,
with_payload=True,
)
for point in result.points:
print(point.score, point.payload)
4NestJS арқылы қосылу
NestJS немесе TypeScript жобасында ресми REST клиентін қолданыңыз. URL мәнін .env ішінде сақтау ыңғайлы.
npm install @qdrant/js-client-rest
QDRANT_URL=http://localhost:6333
import { Injectable, OnModuleInit } from '@nestjs/common';
import { QdrantClient } from '@qdrant/js-client-rest';
@Injectable()
export class VectorStoreService implements OnModuleInit {
private readonly collection = 'nestjs_notes';
private readonly client = new QdrantClient({
url: process.env.QDRANT_URL || 'http://localhost:6333',
});
async onModuleInit() {
const collections = await this.client.getCollections();
const exists = collections.collections.some((item) => item.name === this.collection);
if (!exists) {
await this.client.createCollection(this.collection, {
vectors: { size: 4, distance: 'Cosine' },
});
}
}
async addDemoPoints() {
await this.client.upsert(this.collection, {
points: [
{ id: 1, vector: [0.05, 0.61, 0.76, 0.74], payload: { text: 'NestJS service uses Qdrant' } },
{ id: 2, vector: [0.19, 0.81, 0.75, 0.11], payload: { text: 'Vector search for AI apps' } },
],
});
}
async search(queryVector: number[]) {
const result = await this.client.query(this.collection, {
query: queryVector,
limit: 2,
with_payload: true,
});
return result.points;
}
}
5Жиі кездесетін қателер
- Connection refused: контейнер іске қосылғанын және
6333порты бос екенін тексеріңіз. - Wrong vector size: коллекция
sizeмәні embedding өлшемімен бірдей болуы керек. - Дерек жоғалды: контейнерді volume-сыз іске қоспаңыз. Мысалда
qdrant_storagevolume қолданылды. - Production: API key, reverse proxy, TLS және backup жоспарынсыз ашық интернетке шығармаңыз.
Қосымша ресми материалдар: Qdrant installation, Qdrant quickstart, Python client, JavaScript/TypeScript client.