Este capítulo presenta el inicio rápido de la base de datos de vectores Qdrant y cómo operar la base de datos de vectores basada en la API RESTful.

Instalación de Qdrant

Nota: Este tutorial se basa en la instalación de la base de datos Qdrant usando Docker. Por favor, instale Docker antes de continuar.

Descargar la imagen de qdrant

docker pull qdrant/qdrant

Iniciar el servicio de la base de datos de vectores qdrant

docker run -p 6333:6333 \
    -v $(pwd)/qdrant_storage:/qdrant/storage:z \
    qdrant/qdrant

De forma predeterminada, mapeamos el directorio de archivos local al contenedor, y todos los datos se almacenan en el directorio ./qdrant_storage.

Ahora puede acceder a Qdrant a través de localhost:6333.

La base de datos de vectores de Qdrant es compatible con la API RESTful para operaciones de base de datos, así como con SDK para lenguajes de programación como Python, Go, etc. Este tutorial se centra principalmente en explicar el uso de la API RESTful.

Ejemplo de acceso a la API

curl -X PUT 'http://localhost:6333/collections/test_collection' \
  -H 'Content-Type: application/json' \
  --data-raw '{
    "vectors": {
      "size": 4,
      "distance": "Dot"
    }
  }'

Interfaz web de Qdrant

Acceda a la interfaz web a través de la dirección http://localhost:6333/dashboard

Interfaz web de Qdrant

Creación de Colecciones

El concepto de colecciones en la base de datos de vectores de Qdrant se puede comparar con la estructura de tabla de MYSQL, utilizada para almacenar de manera uniforme el mismo tipo de datos vectoriales. Cada dato almacenado en la colección, referido como puntos en Qdrant, tiene un significado similar a los puntos en el espacio geométrico matemático, representando la representación del vector en el espacio geométrico (simplemente trátelo como un conjunto de datos).

PUT /collections/{collection_name}

{
    "vectors": {
      "size": 300,
      "distance": "Cosine"
    }
}

Explicación de Parámetros:

Parámetro Descripción
collection_name Nombre de la colección (obligatorio)
vectors Definición de parámetros vectoriales (obligatorio)
vectors.size Representa el tamaño del vector (o dimensión del vector)
vectors.distance Representa el algoritmo de similitud de vectores, principalmente incluyendo tres algoritmos: "Coseno", "Euclidiano", "Punto"

Adición de Vectores (Puntos)

Después de crear una colección, podemos agregar datos vectoriales a la colección. En Qdrant, los datos vectoriales se representan utilizando puntos, donde cada dato de punto incluye tres partes: id, carga útil (datos asociados) y datos vectoriales.

Ejemplo

PUT /collections/{collection_name}/points

{
    "points": [
        {
            "id": "5c56c793-69f3-4fbf-87e6-c4bf54c28c26", // id
            "payload": {"color": "red"}, // Datos atributivos asociados, generalmente relacionados con atributos comerciales, como: ID de pedido, ID de producto, título, etc.
            "vector": [0.9, 0.1, 0.1] // Datos vectoriales que representan las características de los datos comerciales actuales
        }
    ]
}

Búsqueda de Vectores

Después de agregar datos vectoriales, podemos realizar una búsqueda de similitud semántica utilizando vectores.

Ejemplo

// collection_name - nombre de la colección
POST /collections/{collection_name}/points/search

{
    "vector": [0.2, 0.1, 0.9, 0.7], // parámetro vector
    "limit": 3 // Devolver los 3 datos con mayor similitud
}

Descripción de Parámetros:

  • vector: Parámetro vectorial utilizado para buscar contenido similar a este vector. Por ejemplo: puede convertir las palabras clave que los usuarios necesitan buscar en vectores y luego buscar contenido relacionado con la entrada del usuario.

Filtrado de Atributos

Al buscar datos, además de realizar búsquedas de similitud utilizando vectores, a veces también queremos ejecutar un filtrado de atributos similar a la cláusula WHERE de SQL para filtrar algunos atributos. Qdrant admite consultas de filtro para filtrar atributos asociados a la carga útil de puntos.

Ejemplo

// collection_name - nombre de la colección
POST /collections/{collection_name}/points/search

{
    "filter": { // Esto se utiliza principalmente para filtrar los atributos asociados de la carga útil, y el formato de sintaxis general es similar a la sintaxis de Elasticsearch. Este parámetro es opcional.
        "must": [ // Filtrar datos de puntos con color=rojo
            {
                "key": "color",
                "match": {
                    "value": "rojo"
                }
            }
        ]
    },
    "vector": [0.2, 0.1, 0.9, 0.7], // Parámetro de vector
    "limit": 3
}

Para obtener tutoriales más detallados, consulte los capítulos siguientes.