Dela via


Att använda Weaviate Vector Store-kopplingen (förhandsversion)

Varning

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

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.

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 Stöd
Samlingskartor till Weaviate-samling
Nyckelegenskapstyper som stöds GUID
Dataegenskapstyper som stöds
  • sträng
  • byte
  • kort
  • heltal
  • lång
  • dubbel
  • flyttal
  • decimaltecken
  • Bool
  • Datum/tid
  • DateTimeOffset (DatumTidsförskjutning)
  • GUID
  • och uppräkningar av var och en av dessa typer
Egenskapstyper för vektorer som stöds
  • ReadOnlyMemory
  • Inbäddning<flyttal>
  • float[]
Indextyper som stöds
  • Hnsw
  • Platt
  • Dynamisk
Avståndsfunktioner som stöds
  • CosineDistance
  • Negativ skalärproduktlikhet
  • Euklidiskt kvadrerat avstånd
  • Hammingavstånd
  • ManhattanDistance
Filtersatser som stöds
  • NågonTagLikaMed
  • EqualTo
Stödjer flera vektorer i en post Ja
Stöds IsIndexed-funktionen? Ja
Stöds fulltextindexerad? Ja
Stöds StorageName? Nej, använd JsonSerializerOptions och JsonPropertyNameAttribute i stället. Mer information finns här.
Stöds HybridSearch? Ja
Funktionsområde Stöd
Samlingskartor till Weaviate-samling
Nyckelegenskapstyper som stöds GUID
Dataegenskapstyper som stöds
  • sträng
  • byte
  • kort
  • heltal
  • lång
  • dubbel
  • flyttal
  • decimaltecken
  • Bool
  • och iterbara objekt av var och en av dessa typer
Egenskapstyper för vektorer som stöds
  • lista[float]
  • lista[int]
  • ndarray
Indextyper som stöds
  • Hnsw
  • Platt
  • Dynamisk
Avståndsfunktioner som stöds
  • CosineDistance
  • Negativ skalärproduktlikhet
  • Euklidiskt kvadrerat avstånd
  • Hamming
  • ManhattanDistance
Filtersatser som stöds
  • NågonTagLikaMed
  • EqualTo
Stödjer flera vektorer i en post Ja
Stöds IsFilterable? Ja
Stöds IsFullTextSearchable? Ja

Kommer snart.

Begränsningar

Anmärkningsvärda begränsningar i Weaviate-anslutningens funktionalitet.

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.

Varning

Weaviate kräver att namnen på samlingar börjar med en versal bokstav. Om du inte anger ett samlingsnamn som börjar med en versal, kommer Weaviate att returnera ett fel när du försöker skapa samlingen. Felet som visas är Cannot query field "mycollection" on type "GetObjectsObj". Did you mean "Mycollection"? där mycollection är samlingsnamnet. Om du i det här exemplet ändrar samlingsnamnet till Mycollection i stället åtgärdas felet.

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 beroendeinjektionsleverantören.

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

Ö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 HttpClientBaseAddress .

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

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 WeaviateCollection<Guid, 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();
kernelBuilder.Services
    .AddWeaviateVectorStore(new Uri("http://localhost:8080/v1/"), 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. Standardmappare använder modellanteckningarna eller postdefinitionen för att bestämma typen av varje egenskap och för att utföra denna mappning.

  • Datamodellens egenskap som har annoterats som en nyckel kommer att mappas till Weaviate-egenskapen id.
  • Datamodellens egenskaper som annoterats som data mappas till Weaviate-objektet properties.
  • Datamodellegenskaperna som kommenteras som vektorer mappas till weaviate-objektet vectors .

Den standardmässiga mappern 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
{
    [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],
    }
}

Komma igång

Lägg till beroenden för Weaviate Vector Store-anslutning i ditt projekt.

pip install semantic-kernel[weaviate]

Du kan sedan skapa vektorarkivet, det använder miljöinställningar för att ansluta:

För användning av Weaviate Cloud:

  • url: WEAVIATE_URL
  • api_key: WEAVIATE_API_KEY

För användning av Weaviate Local (dvs. Weaviate i en Docker-container):

  • local_host: WEAVIATE_LOCAL_HOST
  • local_port: WEAVIATE_LOCAL_PORT
  • local_grpc_port: WEAVIATE_LOCAL_GRPC_PORT

Om du vill använda inbäddat innehåll:

  • use_embed: WEAVIATE_USE_EMBED

Dessa bör anges exklusivt, så endast en uppsättning av ovanstående finns, annars uppstår ett undantag.

from semantic_kernel.connectors.weaviate import WeaviateStore

store = WeaviateStore()

Du kan också skicka in din egen mongodb-klient om du vill ha mer kontroll över klientkonstruktionen:

import weaviate
from semantic_kernel.connectors.weaviate import WeaviateStore

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

Du kan också skapa en samling direkt, utan butiken.

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
)

Serialisering

Weaviate-klienten returnerar sina egna objekt som parsas och omvandlas till diktat i det vanliga flödet. Mer information om det här konceptet finns i dokumentationen serialisering.

Kommer snart

Mer information kommer snart.