Dela via


Använda weaviate Vector Store-anslutningsappen (förhandsversion)

Varning

Funktionen Semantic Kernel Vector Store är i förhandsversion, och förbättringar som kräver icke-bakåtkompatibla ändringar kan fortfarande ske under begränsade omständigheter före lanseringen.

Översikt

Weaviate Vector Store-anslutningsappen kan användas för att komma åt och hantera data i Weaviate. Anslutningsappen har följande egenskaper.

Funktionsområde Support
Samlingskartor till Weaviate-samling
Nyckelegenskapstyper som stöds GUID
Dataegenskapstyper som stöds
  • sträng
  • byte
  • short
  • heltal
  • lång
  • dubbel
  • flyttal
  • decimal
  • bool
  • Datum/tid
  • DateTimeOffset
  • GUID
  • och uppräkningar av var och en av dessa typer
Egenskapstyper för vektorer som stöds
  • ReadOnlyMemory-flyttal<>
  • ReadOnlyMemory<dubbel>
Indextyper som stöds
  • Hnsw
  • Förenklat
  • Dynamisk
Avståndsfunktioner som stöds
  • CosineDistance
  • DotProductSimilarity
  • EuclideanSquaredDistance
  • Hamming
  • ManhattanDistance
Stöder flera vektorer i en post Ja
Stöds IsFilterable? Ja
Stöds IsFullTextSearchable? Ja
Stöds StoragePropertyName? Nej, använd JsonSerializerOptions och JsonPropertyNameAttribute i stället. Mer information finns här.

Begränsningar

Anmärkningsvärda begränsningar för funktioner för Weaviate-anslutningsprogram.

Funktionsområde Lösning
Det går inte att använda egenskapen "vektor" för enskilda vektorobjekt Användning av egenskapen "vektorer" stöds i stället.

Komma igång

Lägg till NuGet-paketet för Weaviate Vector Store-anslutningsappen i projektet.

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

Du kan lägga till vektorlagret i den beroendeinmatningscontainer som är tillgänglig i containern KernelBuilder eller till containern för IServiceCollection beroendeinmatning med hjälp av tilläggsmetoder som tillhandahålls av semantisk kernel. Weaviate-vektorarkivet använder en HttpClient för att kommunicera med weaviate-tjänsten. Det finns två alternativ för att ange URL:en/slutpunkten för weaviate-tjänsten. Det kan anges via alternativ eller genom att ange basadressen för HttpClient.

Det här första exemplet visar hur du anger tjänstens URL via alternativ. Observera också att dessa metoder hämtar en HttpClient instans för att göra anrop till weaviate-tjänsten från providern för beroendeinmatningstjänsten.

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

Överlagringar där du kan ange dina egna HttpClient tillhandahålls också. I det här fallet är det möjligt att ange tjänst-URL:en via alternativet HttpClient BaseAddress .

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

Du kan också skapa en Weaviate Vector Store-instans direkt.

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

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

Det går att skapa en direktreferens till en namngiven samling.

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

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

Om det behövs är det möjligt att skicka en API-nyckel, som ett alternativ, när du använder någon av ovan nämnda mekanismer, t.ex.

using Microsoft.SemanticKernel;

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

Mappning av data

Weaviate Vector Store-anslutningsappen tillhandahåller en standardmappare vid mappning från datamodellen till lagring. Weaviate kräver att egenskaper mappas till grupperingar för ID, nyttolast och vektorer. Standardmapparen använder modellanteckningarna eller postdefinitionen för att fastställa typen av varje egenskap och för att utföra den här mappningen.

  • Datamodellegenskapen som kommenteras som en nyckel mappas till egenskapen Weaviate id .
  • Datamodellegenskaperna som kommenteras som data mappas till weaviate-objektet properties .
  • Datamodellegenskaperna som kommenteras som vektorer mappas till weaviate-objektet vectors .

Standardmapparen använder System.Text.Json.JsonSerializer för att konvertera till lagringsschemat. Det innebär att användning av JsonPropertyNameAttribute stöds om ett annat lagringsnamn än datamodellens egenskapsnamn krävs.

Här är ett exempel på en datamodell med JsonPropertyNameAttribute uppsättning och hur den kommer att representeras i 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],
    }
}

Kommer snart

Mer information kommer snart.

Kommer snart

Mer information kommer snart.