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 |
|
Egenskapstyper för vektorer som stöds |
|
Indextyper som stöds |
|
Avståndsfunktioner som stöds |
|
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.