Udostępnij za pośrednictwem


Korzystanie z łącznika Weaviate Vector Store (wersja zapoznawcza)

Ostrzeżenie

Funkcja semantycznego magazynu wektorów jądra jest dostępna w wersji zapoznawczej, a ulepszenia wymagające zmian powodujących niezgodność mogą nadal występować w ograniczonych okolicznościach przed wydaniem.

Omówienie

Łącznik Weaviate Vector Store może służyć do uzyskiwania dostępu do danych i zarządzania nimi w usłudze Weaviate. Łącznik ma następujące cechy.

Obszar funkcji Pomoc techniczna
Mapowania kolekcji na Kolekcja weaviate
Obsługiwane typy właściwości kluczy Identyfikator GUID
Obsługiwane typy właściwości danych
  • string
  • byte
  • short
  • int
  • długi
  • double
  • liczba zmiennoprzecinkowa
  • decimal
  • bool
  • DateTime
  • DateTimeOffset
  • Identyfikator GUID
  • i wyliczalne każdego z tych typów
Obsługiwane typy właściwości wektorów
  • ReadOnlyMemory<float>
  • ReadOnlyMemory<podwójnie>
Obsługiwane typy indeksów
  • Hnsw
  • Spłaszcz
  • Dynamiczny
Obsługiwane funkcje odległości
  • CosineDistance
  • DotProductSimilarity
  • EuclideanSquaredDistance
  • Hamminga
  • ManhattanDistance
Obsługuje wiele wektorów w rekordzie Tak
Czy filtrowanie jest obsługiwane? Tak
Czy jest obsługiwany element IsFullTextSearchable? Tak
Obsługiwana nazwa_właściwości_magazynu? Nie, użyj JsonSerializerOptions polecenia i JsonPropertyNameAttribute zamiast tego. Aby uzyskać więcej informacji, zobacz tutaj.

Ograniczenia

Istotne ograniczenia funkcjonalności łącznika Weaviate.

Obszar funkcji Rozwiązanie
Używanie właściwości "vector" dla pojedynczych obiektów wektorowych nie jest obsługiwane Zamiast tego jest obsługiwane użycie właściwości "vectors".

Wprowadzenie

Dodaj pakiet NuGet łącznika Weaviate Vector Store do projektu.

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

Magazyn wektorów można dodać do kontenera iniekcji zależności dostępnego w KernelBuilder kontenerze iniekcji zależności lub IServiceCollection przy użyciu metod rozszerzeń udostępnianych przez jądro semantyczne. Magazyn wektorów Weaviate używa elementu do HttpClient komunikowania się z usługą Weaviate. Istnieją dwie opcje udostępniania adresu URL/punktu końcowego dla usługi Weaviate. Można go udostępnić za pomocą opcji lub ustawiając podstawowy adres HttpClient.

W tym pierwszym przykładzie pokazano, jak ustawić adres URL usługi za pomocą opcji. Należy również pamiętać, że te metody pobierają HttpClient wystąpienie do wykonywania wywołań do usługi Weaviate od dostawcy usługi wstrzykiwania zależności.

using Microsoft.SemanticKernel;

// Using Kernel Builder.
var kernelBuilder = Kernel
    .CreateBuilder()
    .AddWeaviateVectorStore(options: new() { Endpoint = new Uri("http://localhost:8080/v1/") });
using Microsoft.SemanticKernel;

// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddWeaviateVectorStore(options: new() { Endpoint = new Uri("http://localhost:8080/v1/") });

Dostępne są również przeciążenia, w których można określić własne HttpClient . W takim przypadku można ustawić adres URL usługi za pośrednictwem HttpClient BaseAddress opcji .

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

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

// 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);

Możesz również skonstruować wystąpienie sklepu Weaviate Vector Store bezpośrednio.

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

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

Istnieje możliwość utworzenia bezpośredniego odwołania do nazwanej kolekcji.

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

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

W razie potrzeby można przekazać klucz interfejsu API jako opcję, używając dowolnego z wymienionych powyżej mechanizmów, np.

using Microsoft.SemanticKernel;

var kernelBuilder = Kernel
    .CreateBuilder()
    .AddWeaviateVectorStore(options: new() { Endpoint = new Uri("http://localhost:8080/v1/"), ApiKey = secretVar });

Mapowanie danych

Łącznik Weaviate Vector Store zapewnia domyślny maper podczas mapowania z modelu danych na magazyn. Weaviate wymaga mapowania właściwości na grupy identyfikatorów, ładunków i wektorów. Domyślny maper używa adnotacji modelu lub definicji rekordu, aby określić typ każdej właściwości i wykonać to mapowanie.

  • Właściwość modelu danych oznaczona adnotacją jako klucz zostanie zamapowana na właściwość Weaviate id .
  • Właściwości modelu danych oznaczone jako dane zostaną zamapowane na obiekt Weaviate properties .
  • Właściwości modelu danych oznaczone jako wektory zostaną zamapowane na obiekt Weaviate vectors .

Domyślny maper używa System.Text.Json.JsonSerializer metody do konwersji na schemat magazynu. Oznacza to, że użycie elementu JsonPropertyNameAttribute jest obsługiwane, jeśli wymagana jest inna nazwa magazynu dla nazwy właściwości modelu danych.

Oto przykład modelu danych z zestawem JsonPropertyNameAttribute i sposobem, w jaki będzie on reprezentowany w aplikacji Weaviate.

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

public class Hotel
{
    [VectorStoreRecordKey]
    public ulong HotelId { get; set; }

    [VectorStoreRecordData(IsFilterable = true)]
    public string HotelName { get; set; }

    [VectorStoreRecordData(IsFullTextSearchable = true)]
    public string Description { get; set; }

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

Wkrótce

Więcej informacji wkrótce.

Wkrótce

Więcej informacji wkrótce.