Aracılığıyla paylaş


Weaviate Vector Store bağlayıcısını kullanma (Önizleme)

Uyarı

Weaviate Vector Store işlevselliği önizleme aşamasındadır ve mevcut işlevselliği bozan değişiklikler gerektiren iyileştirmeler, yayınlanmadan önce sınırlı koşullarda yine de gerçekleşebilir.

Uyarı

Semantic Kernel Vektör Depolama işlevselliği önizleme sürümündedir ve büyük değişiklikler gerektiren iyileştirmeler, sürümden önce sınırlı koşullarda gerçekleştirilebilir.

Uyarı

Semantic Kernel Vektör Depolama işlevselliği önizleme sürümündedir ve büyük değişiklikler gerektiren iyileştirmeler, sürümden önce sınırlı koşullarda gerçekleştirilebilir.

Genel bakış

Weaviate Vektör Deposu bağlayıcısı, Weaviate'deki verilere erişmek ve verileri yönetmek için kullanılabilir. Bağlayıcı aşağıdaki özelliklere sahiptir.

Özellik Alanı Destek
Koleksiyon şu ile eşleştirilir Weaviate Koleksiyonu
Desteklenen anahtar özellik türleri GUID
Desteklenen veri özelliği türleri
  • Dize
  • bayt
  • kısa
  • Int
  • uzun
  • çift
  • kayan noktalı sayı
  • ondalık
  • boole
  • TarihSaat
  • TarihSaatOfseti
  • GUID
  • ve bu türlerden her birinin numaralandırılabilirleri
Desteklenen vektör özelliği türleri
  • Sadece Okunabilir Bellek<float>
  • Float ekleme<>
  • float[]
Desteklenen dizin türleri
  • Hnsw
  • Düz
  • Dinamik
Desteklenen uzaklık işlevleri
  • CosineDistance
  • Negatif Nokta Çarpımı Benzerliği
  • Öklidyen Karesel Mesafe
  • Hamming Mesafesi
  • ManhattanDistance
Desteklenen filtre yan tümceleri
  • AnyTagEqualTo
  • EqualTo
Bir kayıtta birden çok vektör destekler Evet
Indexed destekleniyor mu? Evet
IsFullTextIndexed destekleniyor mu? Evet
StorageName destekleniyor mu? Hayır, bunun yerine JsonSerializerOptions ve JsonPropertyNameAttribute kullanın. Daha fazla bilgi için buraya bakın.
HybridSearch destekleniyor mu? Evet
Özellik Alanı Destek
Koleksiyon şu ile eşleştirilir Weaviate Koleksiyonu
Desteklenen anahtar özellik türleri GUID
Desteklenen veri özelliği türleri
  • Dize
  • bayt
  • kısa
  • Int
  • uzun
  • çift
  • kayan noktalı sayı
  • ondalık
  • boole
  • Bu türlerin her birinin ve yinelenebilirlik
Desteklenen vektör özelliği türleri
  • liste[float]
  • liste[int]
  • ndarray
Desteklenen dizin türleri
  • Hnsw
  • Düz
  • Dinamik
Desteklenen uzaklık işlevleri
  • CosineDistance
  • Negatif Nokta Çarpımı Benzerliği
  • Öklidyen Karesel Mesafe
  • Hamming
  • ManhattanDistance
Desteklenen filtre yan tümceleri
  • AnyTagEqualTo
  • EqualTo
Bir kayıtta birden çok vektör destekler Evet
Filtrelenebilir destekleniyor mu? Evet
IsFullTextSearchable destekleniyor mu? Evet

Çok yakında.

Sınırlamalar

Önemli Weaviate bağlayıcısı işlevsellik sınırlamaları.

Özellik Alanı Geçici çözüm
Tek vektör nesneleri için 'vector' özelliğinin kullanılması desteklenmez Bunun yerine 'vectors' özelliğinin kullanılması desteklenir.

Uyarı

Weaviate'de koleksiyon adlarının büyük harfle başlaması gerekir. Büyük harf içeren bir koleksiyon adı sağlamazsanız, koleksiyonunuzu oluşturmaya çalıştığınızda Weaviate bir hata döndürür. Göreceğiniz hata, Cannot query field "mycollection" on type "GetObjectsObj". Did you mean "Mycollection"? olup, mycollection sizin koleksiyon adınızdır. Bu örnekte, bunun yerine koleksiyon adınızı Mycollection olarak değiştirirseniz, bu hata düzeltilir.

Başlarken

Weaviate Vector Store bağlayıcısı NuGet paketini projenize ekleyin.

dotnet add package Microsoft.SemanticKernel.Connectors.Weaviate --prerelease

KernelBuilder veya IServiceCollection üzerindeki bağımlılık enjeksiyon kapsayıcısına Semantic Kernel tarafından sağlanan uzantı yöntemlerini kullanarak vektör deposunu ekleyebilirsiniz. Weaviate vektör deposu, Weaviate hizmetiyle iletişim kurmak için bir HttpClient kullanır. Weaviate hizmeti için URL/uç nokta sağlamaya yönelik iki seçenek vardır. Seçenekler aracılığıyla veya HttpClient'nin temel adresini ayarlayarak sağlanabilir.

Bu ilk örnekte, seçenekler aracılığıyla hizmet URL'sinin nasıl ayarlanacağı gösterilmektedir. Ayrıca bu yöntemlerin bağımlılık ekleme hizmet sağlayıcısından Weaviate hizmetine çağrı yapmak için bir HttpClient örnek alacağını unutmayın.

using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;

// Using Kernel Builder.
var kernelBuilder = Kernel
    .CreateBuilder();
kernelBuilder.Services
    .AddWeaviateVectorStore(new Uri("http://localhost:8080/v1/"), apiKey: null);
using Microsoft.Extensions.DependencyInjection;

// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddWeaviateVectorStore(new Uri("http://localhost:8080/v1/"), apiKey: null);

Kendi HttpClient öğesini belirtebileceğiniz aşırı yüklemeler de sağlanır. Bu durumda, hizmet URL'sini seçeneği aracılığıyla HttpClientBaseAddress ayarlamak mümkündür.

using System.Net.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;

// Using Kernel Builder.
var kernelBuilder = Kernel.CreateBuilder();
using HttpClient client = new HttpClient { BaseAddress = new Uri("http://localhost:8080/v1/") };
kernelBuilder.Services.AddWeaviateVectorStore(_ => client);
using System.Net.Http;
using Microsoft.Extensions.DependencyInjection;

// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
using HttpClient client = new HttpClient { BaseAddress = new Uri("http://localhost:8080/v1/") };
builder.Services.AddWeaviateVectorStore(_ => client);

Doğrudan bir Weaviate Vektör Deposu örneği de oluşturabilirsiniz.

using System.Net.Http;
using Microsoft.SemanticKernel.Connectors.Weaviate;

var vectorStore = new WeaviateVectorStore(
    new HttpClient { BaseAddress = new Uri("http://localhost:8080/v1/") });

Adlandırılmış bir koleksiyona doğrudan başvuru oluşturmak mümkündür.

using System.Net.Http;
using Microsoft.SemanticKernel.Connectors.Weaviate;

var collection = new WeaviateCollection<Guid, Hotel>(
    new HttpClient { BaseAddress = new Uri("http://localhost:8080/v1/") },
    "Skhotels");

Gerekirse, yukarıda belirtilen mekanizmalardan herhangi birini kullanırken bir api anahtarını bir seçenek olarak geçirmek mümkündür, örneğin.

using Microsoft.SemanticKernel;

var kernelBuilder = Kernel
    .CreateBuilder();
kernelBuilder.Services
    .AddWeaviateVectorStore(new Uri("http://localhost:8080/v1/"), secretVar);

Veri eşleme

Weaviate Vector Store bağlayıcısı, veri modelinden depolamaya eşlenirken varsayılan bir eşleyici sağlar. Weaviate, özelliklerin kimlik, yük verileri ve vektör gruplandırmalarına eşlenmesini gerektirir. 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 açıklanan veri modeli özelliği Weaviate id özelliğiyle eşlenir.
  • Veri olarak etiketlenmiş veri modeli özellikleri Weaviate properties nesnesine eşlenir.
  • Vektör olarak açıklanan veri modeli özellikleri Weaviate vectors nesnesine eşlenir.

Varsayılan eşleyici, depolama şemasına dönüştürmek için kullanır System.Text.Json.JsonSerializer . Bu, veri modeli özellik adından farklı bir depolama adı gerekiyorsa JsonPropertyNameAttribute kullanımının desteklendiği anlamına gelir.

Aşağıda, JsonPropertyNameAttribute set edilerek bir veri modeli örneği ve bunun Weaviate'de nasıl temsil edileceği gösterilmektedir.

using System.Text.Json.Serialization;
using Microsoft.Extensions.VectorData;

public class Hotel
{
    [VectorStoreKey]
    public Guid HotelId { get; set; }

    [VectorStoreData(IsIndexed = true)]
    public string HotelName { get; set; }

    [VectorStoreData(IsFullTextIndexed = true)]
    public string Description { get; set; }

    [JsonPropertyName("HOTEL_DESCRIPTION_EMBEDDING")]
    [VectorStoreVector(4, DistanceFunction = DistanceFunction.CosineDistance, IndexKind = IndexKind.QuantizedFlat)]
    public ReadOnlyMemory<float>? DescriptionEmbedding { get; set; }
}
{
    "id": "11111111-1111-1111-1111-111111111111",
    "properties": { "HotelName": "Hotel Happy", "Description": "A place where everyone can be happy." },
    "vectors": {
        "HOTEL_DESCRIPTION_EMBEDDING": [0.9, 0.1, 0.1, 0.1],
    }
}

Başlangıç Yapmak

Projenize Weaviate Vector Store bağlayıcı bağımlılıklarını ekleyin.

pip install semantic-kernel[weaviate]

Daha sonra vektör depoyu oluşturabilirsiniz; bu depo, bağlanmak için ortam ayarlarını kullanır:

Weaviate Cloud'ı kullanmak için:

  • url: WEAVIATE_URL
  • api_key: WEAVIATE_API_KEY

Weaviate Local (Docker kapsayıcısında Weaviate) kullanmak için:

  • local_host: WEAVIATE_LOCAL_HOST
  • local_port: WEAVIATE_LOCAL_PORT
  • local_grpc_port: WEAVIATE_LOCAL_GRPC_PORT (Yerel gRPC bağlantı noktası ayarı)

Gömülü öğeyi kullanmak istiyorsanız:

  • use_embed: WEAVIATE_USE_EMBED

Bunlar yalnızca bir defada ayarlanmalıdır, böylece yukarıdakilerden yalnızca bir set bulunur; aksi takdirde bir istisna oluşur.

from semantic_kernel.connectors.weaviate import WeaviateStore

store = WeaviateStore()

Alternatif olarak, istemci yapısı üzerinde daha fazla denetim sahibi olmak istiyorsanız kendi MongoDB istemcinizi geçirebilirsiniz.

import weaviate
from semantic_kernel.connectors.weaviate import WeaviateStore

client = weaviate.WeaviateAsyncClient(...)
store = WeaviateStore(async_client=client)

Ayrıca, mağaza olmadan doğrudan bir koleksiyon da oluşturabilirsiniz.

from semantic_kernel.connectors.weaviate import WeaviateCollection

# `hotel` is a class created with the @vectorstoremodel decorator
collection = WeaviateCollection(
    collection_name="my_collection",
    record_type=hotel
)

Seri -leştirme

Weaviate istemcisi, standart akışta ayrıştırılıp sözlüklere dönüştürülen kendi nesnelerini döndürür. Bu kavram hakkında daha fazla bilgi için serileştirme belgelerine bakın.

Yakında

Daha fazla bilgi yakında sunulacaktır.