Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Uyarı
Qdrant Vektör Deposu işlevi önizleme aşamasındadır ve yayınlanmadan önce sınırlı durumlarda önemli değişiklik gerektiren iyileştirmeler yine de gerçekleşebilir.
Uyarı
Semantik Çekirdek Vektör Deposu işlevselliği önizleme aşamasındadır ve sürümden önce sınırlı koşullarda kırıcı değişiklikler gerektiren iyileştirmeler yine de gerçekleşebilir.
Uyarı
Semantik Çekirdek Vektör Deposu işlevselliği önizleme aşamasındadır ve sürümden önce sınırlı koşullarda kırıcı değişiklikler gerektiren iyileştirmeler yine de gerçekleşebilir.
Genel bakış
Qdrant Vektör Deposu bağlayıcısı, Qdrant'taki verilere erişmek ve verileri yönetmek için kullanılabilir. Bağlayıcı aşağıdaki özelliklere sahiptir.
Özellik Alanı | Destek |
---|---|
Koleksiyon eşlemeleri | Filtrelenebilir veri alanları için yük dizinlerine sahip Qdrant koleksiyonu |
Desteklenen anahtar özellik türleri |
|
Desteklenen veri özelliği türleri |
|
Desteklenen vektör özelliği türleri |
|
Desteklenen dizin türleri | Hnsw |
Desteklenen uzaklık işlevleri |
|
Desteklenen filtre yan tümceleri |
|
Bir kayıtta birden çok vektör destekler | Evet (yapılandırılabilir) |
Indexed destekleniyor mu? | Evet |
IsFullTextIndexed destekleniyor mu? | Evet |
StorageName destekleniyor mu? | Evet |
HybridSearch destekleniyor mu? | Evet |
Özellik Alanı | Destek |
---|---|
Koleksiyon eşlemeleri | Filtrelenebilir veri alanları için yük dizinlerine sahip Qdrant koleksiyonu |
Desteklenen anahtar özellik türleri |
|
Desteklenen veri özelliği türleri |
|
Desteklenen vektör özelliği türleri |
|
Desteklenen dizin türleri | Hnsw |
Desteklenen uzaklık işlevleri |
|
Desteklenen filtre yan tümceleri |
|
Bir kayıtta birden çok vektör destekler | Evet (yapılandırılabilir) |
Filtrelenebilir mi destekleniyor? | Evet |
IsFullTextSearchable destekleniyor mu? | Evet |
StorageName destekleniyor mu? | Evet |
Desteklenmiyor
Şu anda desteklenmiyor.
Başlarken: İlk Adımlar
Projenize Qdrant Vektör Deposu bağlayıcısı NuGet paketini ekleyin.
dotnet add package Microsoft.SemanticKernel.Connectors.Qdrant --prerelease
Semantic Kernel tarafından sağlanan uzantı yöntemlerini kullanarak KernelBuilder
bağımlılık enjeksiyonu kapsayıcısına veya IServiceCollection
üzerinde kullanılabilen bağımlılık enjeksiyonu kapsayıcısına vektör deposunu ekleyebilirsiniz.
using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;
// Using Kernel Builder.
var kernelBuilder = Kernel
.CreateBuilder();
kernelBuilder.Services
.AddQdrantVectorStore("localhost");
using Microsoft.Extensions.DependencyInjection;
// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddQdrantVectorStore("localhost");
Parametre almayan uzantı yöntemleri de sağlanır. Bunlar, sınıfın bir örneğinin Qdrant.Client.QdrantClient
bağımlılık ekleme kapsayıcısına ayrı olarak kaydedilmesini gerektirir.
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.Services.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();
Doğrudan bir Qdrant Vektör Deposu örneği oluşturabilirsiniz.
using Microsoft.SemanticKernel.Connectors.Qdrant;
using Qdrant.Client;
var vectorStore = new QdrantVectorStore(new QdrantClient("localhost"), ownsClient: true);
Adlandırılmış bir koleksiyona doğrudan başvuru oluşturmak mümkündür.
using Microsoft.SemanticKernel.Connectors.Qdrant;
using Qdrant.Client;
var collection = new QdrantCollection<ulong, Hotel>(
new QdrantClient("localhost"),
"skhotels",
ownsClient: true);
Veri eşleme
Qdrant bağlayıcısı, veri modelinden depolamaya veri eşlerken varsayılan bir eşleyici sağlar. Qdrant özelliklerin kimlik, veri yükü ve vektör gruplandırmalarına eşlenmesi gerekir. Varsayılan eşleyici, her özelliğin türünü belirlemek ve bu eşlemeyi yapmak için model ek açıklamalarını veya kayıt tanımını kullanır.
- Anahtar olarak işaretlenen veri modeli özelliği, Qdrant noktası kimliğiyle eşlenir.
- Veri olarak ek açıklanan veri modeli özellikleri, Qdrant noktası yük nesnesine eşlenecektir.
- Vektör olarak belirtilen veri modeli özellikleri Qdrant vektör nesnesine eşlenir.
Özellik adı geçersiz kılma
Veri özellikleri ve vektör özellikleri için (adlandırılmış vektörler modu kullanılıyorsa), veri modelindeki özellik adlarından farklı depolama alanında kullanmak üzere geçersiz kılma alanı adları sağlayabilirsiniz. Qdrant'ta bir anahtarın sabit bir adı olduğu için bu, anahtarlar için desteklenmez. Vektör sabit bir ad altında depolandığından, tek bir adlandırılmamış vektör modundaki vektörler için de desteklenmez.
Özellik adı geçersiz kılma işlemi, StorageName
seçeneği veri modeli öznitelikleri veya kayıt tanımı aracılığıyla ayarlanarak yapılır.
Öznitelikleri ve Qdrant'ta nasıl gösterileceğine ilişkin bir veri modeli StorageName
örneği aşağıda verilmiştir.
using Microsoft.Extensions.VectorData;
public class Hotel
{
[VectorStoreKey]
public ulong HotelId { get; set; }
[VectorStoreData(IsIndexed = true, StorageName = "hotel_name")]
public string HotelName { get; set; }
[VectorStoreData(IsFullTextIndexed = true, StorageName = "hotel_description")]
public string Description { get; set; }
[VectorStoreVector(4, DistanceFunction = DistanceFunction.CosineSimilarity, IndexKind = IndexKind.Hnsw, StorageName = "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],
}
}
Başlarken: İlk Adımlar
Qdrant eklentilerini, qdrant istemcisi dahil olmak üzere, içeren semantik çekirdeği yükleyin.
pip install semantic-kernel[qdrant]
Daha sonra sınıfını QdrantStore
kullanarak bir vektör deposu örneği oluşturabilirsiniz; bu, , QDRANT_URL
QDRANT_API_KEY
, , QDRANT_HOST
QDRANT_PORT
ve ortam değişkenlerini QDRANT_GRPC_PORT
QDRANT_PATH
QDRANT_LOCATION
kullanarak bir AsyncQdrantClient oluşturur ve QDRANT_PREFER_GRPS
Qdrant örneğine bağlanmak için bu değerler doğrudan da sağlanabilir. Hiçbir şey sağlanmazsa, location=:memory:
varsayılan değerine geri döner.
from semantic_kernel.connectors.qdrant import QdrantStore
vector_store = QdrantStore()
Ayrıca kendi qdrant istemci örneğinizle vektör deposu da oluşturabilirsiniz.
from qdrant_client.async_qdrant_client import AsyncQdrantClient
from semantic_kernel.connectors.qdrant import QdrantStore
client = AsyncQdrantClient(host='localhost', port=6333)
vector_store = QdrantStore(client=client)
Doğrudan bir koleksiyon da oluşturabilirsiniz.
from semantic_kernel.connectors.qdrant import QdrantCollection
collection = QdrantCollection(collection_name="skhotels", record_type=hotel)
Serileştirme
Qdrant bağlayıcısı, mağazayı okumak ve yazmak için PointStruct
adlı bir model kullanır. Bu, from qdrant_client.models import PointStruct
uygulamasından aktarılabilir. Serileştirme yöntemleri, PointStruct nesnelerinin listesinin çıkışını bekler ve seri durumdan çıkarma yöntemi PointStruct nesnelerinin listesini alır.
Bunun adlandırılmış veya adlandırılmamış vektörlerle ilgili bazı özel noktaları vardır, aşağıya bakın.
Bu kavram hakkında daha fazla ayrıntı için serileştirme belgelerine bakın.
Qdrant vektör modları
Qdrant vektör depolama için iki modu destekler ve varsayılan eşleyici ile Qdrant Bağlayıcısı her iki modu da destekler. Varsayılan mod, tek bir adlandırılmamış vektördür.
Tek bir adlandırılmamış vektör
Bu seçenekle bir koleksiyon yalnızca tek bir vektör içerebilir ve Qdrant'taki depolama modelinde adlandırılmamış olur. Tek bir adlandırılmamış vektör modu kullanılırken bir nesnenin Qdrant'ta nasıl temsil edildiklerine bir örnek aşağıda verilmiştir:
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 vektör modları
Qdrant vektör depolama için iki modu destekler ve varsayılan eşleyici ile Qdrant Bağlayıcısı her iki modu da destekler. Varsayılan mod, tek bir adlandırılmamış vektördür.
Tek bir adlandırılmamış vektör
Bu seçenekle bir koleksiyon yalnızca tek bir vektör içerebilir ve Qdrant'taki depolama modelinde adlandırılmamış olur. Tek bir adlandırılmamış vektör modu kullanılırken bir nesnenin Qdrant'ta nasıl temsil edildiklerine bir örnek aşağıda verilmiştir:
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],
)
Adlandırılmış vektörler
Adlandırılmış vektörler modunu kullanıyorsanız, bir koleksiyondaki her nokta birden fazla vektör içerebilir ve her biri adlandırılmış olur. Adlandırılmış vektörler modu kullanılırken bir nesnenin Qdrant'ta nasıl temsil edildiğinden bir örnek aşağıda verilmiştir :
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],
}
}
Adlandırılmış vektörler
Adlandırılmış vektörler modunu kullanıyorsanız, bir koleksiyondaki her nokta birden fazla vektör içerebilir ve her biri adlandırılmış olur. Adlandırılmış vektörler modu kullanılırken bir nesnenin Qdrant'ta nasıl temsil edildiğinden bir örnek aşağıda verilmiştir :
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],
},
)
Adlandırılmış vektör modunu etkinleştirmek için bir Vektör Deposu veya koleksiyonu oluştururken bunu bir seçenek olarak geçirin. Sağlanan bağımlılık ekleme kapsayıcı uzantısı yöntemlerinden herhangi birine de aynı seçenekler geçirilebilir.
using Microsoft.SemanticKernel.Connectors.Qdrant;
using Qdrant.Client;
var vectorStore = new QdrantVectorStore(
new QdrantClient("localhost"),
ownsClient: true,
new() { HasNamedVectors = true });
var collection = new QdrantCollection<ulong, Hotel>(
new QdrantClient("localhost"),
"skhotels",
ownsClient: true,
new() { HasNamedVectors = true });
Adlandırılmış vektör modunu etkinleştirmek için bir Vektör Deposu veya koleksiyonu oluştururken bunu bir seçenek olarak geçirin. Sağlanan bağımlılık ekleme kapsayıcı uzantısı yöntemlerinden herhangi birine de aynı seçenekler geçirilebilir.
Python'da için named_vectors
varsayılan değer True'dur, ancak bunu aşağıda gösterildiği gibi devre dışı bırakabilirsiniz.
from semantic_kernel.connectors.memory.qdrant import QdrantCollection
collection = QdrantCollection(
collection_name="skhotels",
record_type=Hotel,
named_vectors=False,
)