Sdílet prostřednictvím


Použití konektoru Weaviate Vector Store (Preview)

Upozorňující

Funkce sémantického úložiště vektorů jádra je ve verzi Preview a vylepšení, která vyžadují zásadní změny, se můžou vyskytovat za omezených okolností před vydáním.

Přehled

Konektor Weaviate Vector Store se dá použít k přístupu k datům ve weaviate a správě dat. Konektor má následující charakteristiky.

Oblast funkcí Technická podpora
Kolekce map na Kolekce weaviate
Podporované typy vlastností klíče Guid
Podporované typy datových vlastností
  • string
  • byte
  • short
  • int
  • long
  • double
  • float (číslo s plovoucí řádovou čárkou)
  • decimal
  • bool
  • DateTime
  • DateTimeOffset
  • Guid
  • a výčty každého z těchto typů
Podporované typy vektorových vlastností
  • ReadOnlyMemory<float>
  • ReadOnlyMemory<double>
Podporované typy indexů
  • Hnsw
  • Plochý
  • dynamicky,
Podporované funkce vzdálenosti
  • KosineDistance
  • DotProductSimilarity
  • EuclideanSquaredDistance
  • Hammingova
  • ManhattanDistance
Podporuje více vektorů v záznamu. Ano
Je podporováno Filtrování? Ano
Podporuje se IsFullTextSearchable? Ano
StoragePropertyName se podporuje? Ne, použijte JsonSerializerOptions a JsonPropertyNameAttribute místo toho. Další informace najdete tady.

Omezení

Omezení funkcí konektoru se dají odlehčit.

Oblast funkcí Alternativní řešení
Použití vlastnosti vector pro objekty s jedním vektorem není podporováno. Místo toho se podporuje použití vlastnosti vektory.

Začínáme

Přidejte do projektu balíček NuGet konektoru Weaviate Vector Store.

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

Vektorové úložiště můžete přidat do kontejneru injektáže závislostí dostupného IServiceCollection v KernelBuilder kontejneru injektáže závislostí nebo do kontejneru injektáže závislostí pomocí rozšiřujících metod poskytovaných sémantickým jádrem. Úložiště vektorů Weaviate používá HttpClient ke komunikaci se službou Weaviate. Existují dvě možnosti pro poskytnutí adresy URL/koncového bodu pro službu Weaviate. Lze ji poskytnout prostřednictvím možností nebo nastavením základní adresy HttpClient.

Tento první příklad ukazuje, jak nastavit adresu URL služby prostřednictvím možností. Všimněte si také, že tyto metody načtou HttpClient instanci pro volání služby Weaviate od poskytovatele služby injektáže závislostí.

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

K dispozici jsou také přetížení, kde můžete zadat vlastní HttpClient . V takovém případě je možné nastavit adresu URL služby prostřednictvím HttpClient BaseAddress možnosti.

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

Instanci Weaviate Vector Store můžete vytvořit také přímo.

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

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

Je možné vytvořit přímý odkaz na pojmenovanou kolekci.

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

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

V případě potřeby je možné klíč rozhraní API předat jako možnost při použití některého z výše uvedených mechanismů, např.

using Microsoft.SemanticKernel;

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

Mapování dat

Konektor Weaviate Vector Store poskytuje při mapování z datového modelu do úložiště výchozí mapovač. Weaviate vyžaduje, aby se vlastnosti mapovaly na seskupení ID, datové části a vektorů. Výchozí mapovač používá k určení typu každé vlastnosti a k tomuto mapování poznámky modelu nebo definici záznamu.

  • Vlastnost datového modelu označená jako klíč se mapuje na vlastnost Weaviate id .
  • Vlastnosti datového modelu anotované jako data budou mapovány na objekt Weaviate properties .
  • Vlastnosti datového modelu anotované jako vektory budou mapovány na objekt Weaviate vectors .

Výchozí mapovač používá System.Text.Json.JsonSerializer k převodu na schéma úložiště. To znamená, že použití tohoto objektu JsonPropertyNameAttribute se podporuje, pokud se vyžaduje jiný název úložiště s názvem vlastnosti datového modelu.

Tady je příklad datového modelu se JsonPropertyNameAttribute sadou a způsobem, jak se bude reprezentovat ve 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],
    }
}

Již brzy

Další informace budou brzy k dispozici.

Již brzy

Další informace budou brzy k dispozici.