Utilisation du connecteur Weaviate Vector Store (préversion)
Avertissement
La fonctionnalité de magasin de vecteurs du noyau sémantique est en préversion et des améliorations nécessitant des modifications cassants peuvent toujours se produire dans des circonstances limitées avant la mise en production.
Vue d’ensemble
Le connecteur Weaviate Vector Store peut être utilisé pour accéder aux données et les gérer dans Weaviate. Le connecteur présente les caractéristiques suivantes.
Zone Fonctionnalités | Support |
---|---|
Mappages de collection à | Weaviate Collection |
Types de propriétés de clé pris en charge | Guid |
Types de propriétés de données pris en charge |
|
Types de propriétés vectorielles pris en charge |
|
Types d’index pris en charge |
|
Fonctions de distance prises en charge |
|
Prend en charge plusieurs vecteurs dans un enregistrement | Oui |
Est-il pris en charge ? | Oui |
IsFullTextSearchable pris en charge ? | Oui |
StoragePropertyName pris en charge ? | Non, utilisez et JsonPropertyNameAttribute à JsonSerializerOptions la place. Pour plus d’informations, voir ici. |
Limites
Limitations notables des fonctionnalités du connecteur Weaviate.
Zone Fonctionnalités | Solution de contournement |
---|---|
L’utilisation de la propriété « vector » pour les objets vectoriels uniques n’est pas prise en charge | L’utilisation de la propriété « vectors » est prise en charge à la place. |
Mise en route
Ajoutez le package NuGet du connecteur Weaviate Vector Store à votre projet.
dotnet add package Microsoft.SemanticKernel.Connectors.Weaviate --prerelease
Vous pouvez ajouter le magasin de vecteurs au conteneur d’injection de dépendances disponible sur le KernelBuilder
conteneur ou au conteneur d’injection de dépendances à l’aide IServiceCollection
de méthodes d’extension fournies par le noyau sémantique.
Le magasin vectoriel Weaviate utilise une HttpClient
communication avec le service Weaviate. Il existe deux options pour fournir l’URL/point de terminaison du service Weaviate.
Il peut être fourni via des options ou en définissant l’adresse de base du HttpClient
.
Ce premier exemple montre comment définir l’URL du service via des options.
Notez également que ces méthodes récupèrent une HttpClient
instance pour effectuer des appels au service Weaviate à partir du fournisseur de services d’injection de dépendances.
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/") });
Les surcharges dans lesquelles vous pouvez spécifier vos propres HttpClient
sont également fournies.
Dans ce cas, il est possible de définir l’URL du service via l’option 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);
Vous pouvez également construire une instance Weaviate Vector Store directement.
using System.Net.Http;
using Microsoft.SemanticKernel.Connectors.Weaviate;
var vectorStore = new WeaviateVectorStore(
new HttpClient { BaseAddress = new Uri("http://localhost:8080/v1/") });
Il est possible de construire une référence directe à une collection nommée.
using System.Net.Http;
using Microsoft.SemanticKernel.Connectors.Weaviate;
var collection = new WeaviateVectorStoreRecordCollection<Hotel>(
new HttpClient { BaseAddress = new Uri("http://localhost:8080/v1/") },
"skhotels");
Si nécessaire, il est possible de passer une clé API, comme option, lors de l’utilisation de l’un des mécanismes mentionnés ci-dessus, par exemple.
using Microsoft.SemanticKernel;
var kernelBuilder = Kernel
.CreateBuilder()
.AddWeaviateVectorStore(options: new() { Endpoint = new Uri("http://localhost:8080/v1/"), ApiKey = secretVar });
Mappage de données
Le connecteur Weaviate Vector Store fournit un mappeur par défaut lors du mappage du modèle de données au stockage. Weaviate exige que les propriétés soient mappées en regroupements id, charge utile et vecteurs. Le mappeur par défaut utilise les annotations de modèle ou la définition d’enregistrement pour déterminer le type de chaque propriété et effectuer ce mappage.
- La propriété de modèle de données annotée en tant que clé sera mappée à la propriété Weaviate
id
. - Les propriétés du modèle de données annotées en tant que données seront mappées à l’objet Weaviate
properties
. - Les propriétés du modèle de données annotées sous forme de vecteurs sont mappées à l’objet Weaviate
vectors
.
Le mappeur par défaut utilise System.Text.Json.JsonSerializer
pour convertir le schéma de stockage.
Cela signifie que l’utilisation de l’objet JsonPropertyNameAttribute
est prise en charge si un nom de stockage différent du nom de propriété du modèle de données est requis.
Voici un exemple de modèle de données avec JsonPropertyNameAttribute
ensemble et comment cela sera représenté dans 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],
}
}
Bientôt disponible
Plus d’informations prochainement.
Bientôt disponible
Plus d’informations prochainement.