Este capítulo apresenta o início rápido do banco de dados de vetores Qdrant e como operar o banco de dados de vetores com base na API RESTful.

Instalando Qdrant

Nota: Este tutorial é baseado na instalação do banco de dados Qdrant usando o Docker. Por favor, instale o Docker antes de prosseguir.

Faça o download da imagem do qdrant

docker pull qdrant/qdrant

Inicie o serviço de banco de dados de vetores qdrant

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

Por padrão, mapeamos o diretório de arquivos local para o contêiner, e todos os dados são armazenados no diretório ./qdrant_storage.

Agora é possível acessar o Qdrant via localhost:6333.

O banco de dados de vetores Qdrant suporta a API RESTful para operações de banco de dados, bem como SDKs para linguagens de programação como Python, Go, etc. Este tutorial foca principalmente em explicar o uso da API RESTful.

Exemplo de acesso à API

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

Qdrant Web UI

Acesse a interface web através do endereço http://localhost:6333/dashboard

Qdrant web ui

Criando Coleções

O conceito de coleções no banco de dados de vetores Qdrant pode ser comparado à estrutura de tabela do MYSQL, usada para armazenar de forma uniforme o mesmo tipo de dados de vetor. Cada dado armazenado na coleção, referido como pontos no Qdrant, tem um significado semelhante aos pontos no espaço geométrico matemático, representando a representação do vetor no espaço geométrico (apenas trate-o como um pedaço de dados).

PUT /collections/{collection_name}

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

Explicação dos Parâmetros:

Parâmetro Descrição
collection_name Nome da coleção (obrigatório)
vectors Definição de parâmetros de vetor (obrigatório)
vectors.size Representa o tamanho do vetor (ou dimensão do vetor)
vectors.distance Representa o algoritmo de similaridade de vetores, incluindo principalmente três algoritmos: "Cosseno", "Euclidiano", "Ponto"

Adicionando Vetores (Pontos)

Após criar uma coleção, podemos adicionar dados de vetor à coleção. No Qdrant, os dados de vetor são representados usando pontos, onde cada dado de ponto inclui três partes: id, payload (dados associados) e dados de vetor.

Exemplo

PUT /collections/{collection_name}/points

{
    "points": [
        {
            "id": "5c56c793-69f3-4fbf-87e6-c4bf54c28c26", // id
            "payload": {"color": "red"}, // Dados de atributos associados, geralmente atributos comerciais relacionados, como: ID do pedido, ID do produto, título, etc.
            "vector": [0.9, 0.1, 0.1] // Dados de vetor representando as características dos dados comerciais atuais
        }
    ]
}

Busca de Vetores

Após adicionar dados de vetor, podemos realizar uma busca de similaridade semântica usando vetores.

Exemplo

// collection_name - nome da coleção
POST /collections/{collection_name}/points/search

{
    "vector": [0.2, 0.1, 0.9, 0.7], // parâmetro de vetor
    "limit": 3 // Retornar os 3 principais dados com a maior similaridade
}

Descrição dos Parâmetros:

  • vector: Parâmetro de vetor usado para buscar conteúdo similar a este vetor. Por exemplo: É possível converter as palavras-chave que os usuários precisam buscar em vetores e, em seguida, buscar conteúdo relacionado à entrada do usuário.

Filtro de Atributos

Ao buscar dados, além de realizar buscas de similaridade usando vetores, às vezes também queremos executar filtragem de atributos semelhante à cláusula WHERE do SQL para filtrar alguns atributos. O Qdrant suporta consultas de filtro para filtrar atributos associados à carga útil do ponto.

Exemplo

// collection_name - nome da coleção
POST /collections/{collection_name}/points/search

{
    "filter": { // Isso é usado principalmente para filtrar os atributos associados à carga útil, e o formato geral de sintaxe é semelhante à sintaxe do Elasticsearch. Este parâmetro é opcional.
        "must": [ // Filtrar dados de ponto com cor=vermelho
            {
                "key": "color",
                "match": {
                    "value": "red"
                }
            }
        ]
    },
    "vector": [0.2, 0.1, 0.9, 0.7], // Parâmetro de vetor
    "limit": 3
}

Para tutoriais mais detalhados, consulte os capítulos seguintes.