<- Жазбалар мен мақалаларға оралу Qdrant орнату: алғашқы қолдану, Python және NestJS қосу

Qdrant-ты локалды іске қосып, бірінші коллекция құрып, оны Python және NestJS жобаларынан қолдану.

#Programming Qdrant Python / NestJS / Docker
Qdrant installation article cover

Qdrant - эмбеддингтерді сақтауға және ұқсас векторларды іздеуге арналған векторлық дерекқор. Ол RAG, семантикалық іздеу, ұсыныс жүйелері және AI агенттеріндегі жады үшін қолданылады.

Негізгі ой: Qdrant мәтінді өзі түсінбейді. Мәтінді алдымен embedding векторына айналдырып, содан кейін сол векторды сақтайсыз немесе іздеуге жібересіз. 1

Docker арқылы орнату

Ең жылдам жол - 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}'
3

Python арқылы қосылу

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)
4

NestJS арқылы қосылу

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_storage volume қолданылды.
  • Production: API key, reverse proxy, TLS және backup жоспарынсыз ашық интернетке шығармаңыз.

Қосымша ресми материалдар: Qdrant installation, Qdrant quickstart, Python client, JavaScript/TypeScript client.