Partager via


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
  • string
  • byte
  • short
  • int
  • long
  • double
  • virgule flottante
  • decimal
  • bool
  • Date/Heure
  • DateTimeOffset
  • Guid
  • et énumérables de chacun de ces types
Types de propriétés vectorielles pris en charge
  • Float ReadOnlyMemory<>
  • ReadOnlyMemory<double>
Types d’index pris en charge
  • Hnsw
  • Plat
  • Dynamique
Fonctions de distance prises en charge
  • CosineDistance
  • DotProductSimilarity
  • EuclideanSquaredDistance
  • Hamming
  • ManhattanDistance
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.