Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Waarschuwing
nl-NL: De Semantische Kernel Vector Store-functionaliteit is in preview, en verbeteringen die ingrijpende wijzigingen vereisen, kunnen nog steeds in beperkte omstandigheden plaatsvinden vóór de implementatie.
Overzicht
De Qdrant Vector Store-connector kan worden gebruikt voor toegang tot en beheer van gegevens in Qdrant. De verbindingslijn heeft de volgende kenmerken.
Functiegebied | Ondersteuning |
---|---|
Verzameling koppelt aan | Een Qdrant-verzameling met payloadindexen voor filterbare gegevensvelden. |
Ondersteunde sleuteleigenschapstypen |
|
Ondersteunde gegevenseigenschapstypen |
|
Ondersteunde vectoreigenschappentypen | ReadOnlyMemory<float> |
Ondersteunde indextypen | Hnsw |
Ondersteunde afstandsfuncties |
|
Ondersteunde filterclausules |
|
Ondersteunt meerdere vectoren in een record | Ja (configureerbaar) |
Wordt Filterable ondersteund? | Ja |
WordtFullTextSearchable ondersteund? | Ja |
Wordt StoragePropertyName ondersteund? | Ja |
HybridSearch ondersteund? | Ja |
Functiegebied | Ondersteuning |
---|---|
Komt overeen met | Qdrant-collectie met payloadindexen voor filterbare gegevensvelden |
Ondersteunde sleuteleigenschapstypen |
|
Ondersteunde gegevenseigenschapstypen |
|
Ondersteunde vectoreigenschappentypen |
|
Ondersteunde indextypen | Hnsw |
Ondersteunde afstandsfuncties |
|
Ondersteunde filterclausules |
|
Ondersteunt meerdere vectoren in een record | Ja (configureerbaar) |
Wordt Filterable ondersteund? | Ja |
WordtFullTextSearchable ondersteund? | Ja |
Wordt de StoragePropertyName ondersteund? | Ja |
Niet ondersteund
Momenteel niet ondersteund.
Aan de slag
Voeg het NuGet-pakket Qdrant Vector Store-connector toe aan uw project.
dotnet add package Microsoft.SemanticKernel.Connectors.Qdrant --prerelease
U kunt de vectorwinkel toevoegen aan de afhankelijkheidsinjectiecontainer die beschikbaar is op KernelBuilder
of aan de IServiceCollection
afhankelijkheidsinjectiecontainer met behulp van extensiemethoden die worden geleverd door de Semantic Kernel.
using Microsoft.SemanticKernel;
// Using Kernel Builder.
var kernelBuilder = Kernel
.CreateBuilder()
.AddQdrantVectorStore("localhost");
using Microsoft.SemanticKernel;
// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddQdrantVectorStore("localhost");
Extensiemethoden waarvoor geen parameters worden gebruikt, worden ook opgegeven. Hiervoor moet een exemplaar van de Qdrant.Client.QdrantClient
klasse afzonderlijk worden geregistreerd bij de container voor afhankelijkheidsinjectie.
using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;
using Qdrant.Client;
// Using Kernel Builder.
var kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.Services.AddSingleton<QdrantClient>(sp => new QdrantClient("localhost"));
kernelBuilder.AddQdrantVectorStore();
using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;
using Qdrant.Client;
// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSingleton<QdrantClient>(sp => new QdrantClient("localhost"));
builder.Services.AddQdrantVectorStore();
U kunt rechtstreeks een Qdrant Vector Store-exemplaar maken.
using Microsoft.SemanticKernel.Connectors.Qdrant;
using Qdrant.Client;
var vectorStore = new QdrantVectorStore(new QdrantClient("localhost"));
Het is mogelijk om een directe verwijzing naar een benoemde verzameling te maken.
using Microsoft.SemanticKernel.Connectors.Qdrant;
using Qdrant.Client;
var collection = new QdrantVectorStoreRecordCollection<Hotel>(
new QdrantClient("localhost"),
"skhotels");
Datamapping
De Qdrant-connector biedt een standaardmapper bij het overzetten van gegevens van het gegevensmodel naar opslag. Qdrant vereist dat eigenschappen worden toegewezen aan id-, nettolading- en vectorgroepen. De standaardmapper gebruikt modelaantekeningen of de recorddefinitie om het type van elke eigenschap te bepalen en om deze mapping uit te voeren.
- De eigenschap van het gegevensmodel die als sleutel is geannoteerd, wordt toegewezen aan de Qdrant punt-ID.
- De eigenschappen van het datamodel die zijn geannoteerd als data, worden toegewezen aan het payloadobject van het Qdrant-punt.
- De eigenschappen van het gegevensmodel die zijn geannoteerd als vectoren, worden toegewezen aan het Qdrant-puntvectorobject.
Eigenschapsnaam overschrijven
Voor gegevenseigenschappen en vectoreigenschappen (als u de modus benoemde vectoren gebruikt), kunt u veldnamen overschrijven die moeten worden gebruikt in de opslag die verschilt van de eigenschapsnamen in het gegevensmodel. Dit wordt niet ondersteund voor sleutels, omdat een sleutel een vaste naam heeft in Qdrant. Het wordt ook niet ondersteund voor vectoren in enkele niet-benoemde vectormodus , omdat de vector wordt opgeslagen onder een vaste naam.
De eigenschapsnaam wordt overschreven door de StoragePropertyName
optie in te stellen via de kenmerken van het gegevensmodel of de recorddefinitie.
Hier is een voorbeeld van een gegevensmodel waarbij StoragePropertyName
op zijn attributen is ingesteld en hoe dat in Qdrant wordt weergegeven.
using Microsoft.Extensions.VectorData;
public class Hotel
{
[VectorStoreRecordKey]
public ulong HotelId { get; set; }
[VectorStoreRecordData(IsFilterable = true, StoragePropertyName = "hotel_name")]
public string HotelName { get; set; }
[VectorStoreRecordData(IsFullTextSearchable = true, StoragePropertyName = "hotel_description")]
public string Description { get; set; }
[VectorStoreRecordVector(4, DistanceFunction.CosineSimilarity, IndexKind.Hnsw, StoragePropertyName = "hotel_description_embedding")]
public ReadOnlyMemory<float>? DescriptionEmbedding { get; set; }
}
{
"id": 1,
"payload": { "hotel_name": "Hotel Happy", "hotel_description": "A place where everyone can be happy." },
"vector": {
"hotel_description_embedding": [0.9, 0.1, 0.1, 0.1],
}
}
Aan de slag
Installeer semantische kernel met de qdrant-extra's, waaronder de qdrant-client.
pip install semantic-kernel[qdrant]
Vervolgens kunt u een exemplaar van een vectorarchief maken met behulp van de QdrantStore
klasse. Hiermee maakt u een AsyncQdrantClient met behulp van de omgevingsvariabelenQDRANT_URL
, QDRANT_API_KEY
, QDRANT_HOST
, QDRANT_PORT
, en QDRANT_GRPC_PORT
QDRANT_PATH
QDRANT_LOCATION
QDRANT_PREFER_GRPS
om verbinding te maken met het Qdrant-exemplaar, kunnen deze waarden ook rechtstreeks worden opgegeven. Als er niets wordt geleverd, valt het terug op location=:memory:
.
from semantic_kernel.connectors.memory.qdrant import QdrantStore
vector_store = QdrantStore()
U kunt ook het vectorarchief maken met uw eigen exemplaar van de qdrant-client.
from qdrant_client.async_qdrant_client import AsyncQdrantClient
from semantic_kernel.connectors.memory.qdrant import QdrantStore
client = AsyncQdrantClient(host='localhost', port=6333)
vector_store = QdrantStore(client=client)
U kunt ook rechtstreeks een verzameling maken.
from semantic_kernel.connectors.memory.qdrant import QdrantCollection
collection = QdrantCollection(collection_name="skhotels", data_model_type=hotel)
Serialisatie
De Qdrant-connector maakt gebruik van een model dat wordt aangeroepen PointStruct
voor lezen en schrijven naar de store. Dit kan worden geïmporteerd uit from qdrant_client.models import PointStruct
. De serialisatiemethoden verwachten een uitvoer van een lijst met PointStruct-objecten en de deserialisatiemethode ontvangt een lijst met PointStruct-objecten.
Er zijn enkele speciale overwegingen die te maken hebben met benoemde of niet-benoemde vectoren, zie hieronder.
Zie de serialisatiedocumentatie voor meer informatie over dit concept.
Qdrant-vectormodi
Qdrant ondersteunt twee modi voor vectoropslag en de Qdrant-connector met standaard mapper ondersteunt beide modi. De standaardmodus is één niet-benoemde vector.
Enkele ongeïdentificeerde vector
Met deze optie mag een verzameling slechts één vector bevatten en wordt deze niet genoemd in het opslagmodel in Qdrant. Hier volgt een voorbeeld van hoe een object wordt weergegeven in Qdrant wanneer u één niet-benoemde vectormodus gebruikt:
new Hotel
{
HotelId = 1,
HotelName = "Hotel Happy",
Description = "A place where everyone can be happy.",
DescriptionEmbedding = new float[4] { 0.9f, 0.1f, 0.1f, 0.1f }
};
{
"id": 1,
"payload": { "HotelName": "Hotel Happy", "Description": "A place where everyone can be happy." },
"vector": [0.9, 0.1, 0.1, 0.1]
}
Qdrant-vectormodi
Qdrant ondersteunt twee modi voor vectoropslag en de Qdrant-connector met standaard mapper ondersteunt beide modi. De standaardmodus is één niet-benoemde vector.
Eén niet-benoemde vector
Met deze optie mag een verzameling slechts één vector bevatten en wordt deze niet genoemd in het opslagmodel in Qdrant. Hier volgt een voorbeeld van hoe een object wordt weergegeven in Qdrant wanneer u één niet-benoemde vectormodus gebruikt:
Hotel(
hotel_id = 1,
hotel_name = "Hotel Happy",
description = "A place where everyone can be happy.",
description_embedding = [0.9f, 0.1f, 0.1f, 0.1f],
)
from qdrant_client.models import PointStruct
PointStruct(
id=1,
payload={ "hotel_name": "Hotel Happy", "description": "A place where everyone can be happy." },
vector=[0.9, 0.1, 0.1, 0.1],
)
Benoemde vectoren
Als u de modus benoemde vectoren gebruikt, betekent dit dat elk punt in een verzameling meer dan één vector kan bevatten en dat elk punt een naam krijgt. Hier volgt een voorbeeld van hoe een object wordt weergegeven in Qdrant wanneer u de modus benoemde vectoren gebruikt:
new Hotel
{
HotelId = 1,
HotelName = "Hotel Happy",
Description = "A place where everyone can be happy.",
HotelNameEmbedding = new float[4] { 0.9f, 0.5f, 0.5f, 0.5f }
DescriptionEmbedding = new float[4] { 0.9f, 0.1f, 0.1f, 0.1f }
};
{
"id": 1,
"payload": { "HotelName": "Hotel Happy", "Description": "A place where everyone can be happy." },
"vector": {
"HotelNameEmbedding": [0.9, 0.5, 0.5, 0.5],
"DescriptionEmbedding": [0.9, 0.1, 0.1, 0.1],
}
}
Benoemde vectoren
Als u de modus benoemde vectoren gebruikt, betekent dit dat elk punt in een verzameling meer dan één vector kan bevatten en dat elk punt een naam krijgt. Hier volgt een voorbeeld van hoe een object wordt weergegeven in Qdrant wanneer u de modus benoemde vectoren gebruikt:
Hotel(
hotel_id = 1,
hotel_name = "Hotel Happy",
description = "A place where everyone can be happy.",
hotel_name_embedding = [0.9f, 0.5f, 0.5f, 0.5f],
description_embedding = [0.9f, 0.1f, 0.1f, 0.1f],
)
from qdrant_client.models import PointStruct
PointStruct(
id=1,
payload={ "hotel_name": "Hotel Happy", "description": "A place where everyone can be happy." },
vector={
"hotel_name_embedding": [0.9, 0.5, 0.5, 0.5],
"description_embedding": [0.9, 0.1, 0.1, 0.1],
},
)
Om de modus voor benoemde vectoren in te schakelen, geeft u dit op als optie bij het aanmaken van een Vector Store of verzameling. Dezelfde opties kunnen ook worden doorgegeven aan een van de opgegeven extensiemethoden voor afhankelijkheidsinjectiecontainers.
using Microsoft.SemanticKernel.Connectors.Qdrant;
using Qdrant.Client;
var vectorStore = new QdrantVectorStore(
new QdrantClient("localhost"),
new() { HasNamedVectors = true });
var collection = new QdrantVectorStoreRecordCollection<Hotel>(
new QdrantClient("localhost"),
"skhotels",
new() { HasNamedVectors = true });
Als u de modus voor benoemde vectoren wilt inschakelen, geeft u dit op als een optie bij het maken van een Vector Store of verzameling. Dezelfde opties kunnen ook worden doorgegeven aan een van de opgegeven extensiemethoden voor afhankelijkheidsinjectiecontainers.
In Python is de standaardwaarde named_vectors
ingesteld op True, maar u kunt dit ook uitschakelen, zoals hieronder wordt weergegeven.
from semantic_kernel.connectors.memory.qdrant import QdrantCollection
collection = QdrantCollection(
collection_name="skhotels",
data_model_type=Hotel,
named_vectors=False,
)