Utilisation du connecteur Weaviate Vector Store (préversion)
Avertissement
La fonctionnalité de magasin de vecteurs du noyau sémantique est en aperçu, et des améliorations nécessitant des modifications importantes peuvent encore intervenir dans des circonstances limitées avant la sortie officielle.
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 des fonctionnalités | Support |
---|---|
Correspondances 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 |
|
Clauses de filtre prises en charge |
|
Prend en charge plusieurs vecteurs dans un enregistrement | Oui |
IsFilterable est-il pris en charge ? | Oui |
IsFullTextSearchable est-il pris en charge ? | Oui |
Le "StoragePropertyName" est-il pris en charge ? | Non, utilisez JsonSerializerOptions et JsonPropertyNameAttribute à la place.
Pour plus d’informations, voir ici. |
HybridSearch est-il pris en charge ? | Oui |
Zone de Fonctionnalité | Soutien |
---|---|
Correspondance des collections à | 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 |
|
Clauses de filtre prises en charge |
|
Prend en charge plusieurs vecteurs dans un enregistrement | Oui |
"La fonctionnalité IsFilterable est-elle prise en charge ?" | Oui |
La prise en charge d’IsFullTextSearchable est-elle assurée ? | Oui |
À venir.
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 supportée à la place. |
Avertissement
Weaviate exige que les noms de collection commencent par une lettre majuscule. Si vous ne fournissez pas de nom de collection avec une lettre majuscule, Weaviate renvoie une erreur lorsque vous essayez de créer votre collection. L’erreur que vous verrez est Cannot query field "mycollection" on type "GetObjectsObj". Did you mean "Mycollection"?
où mycollection
est votre nom de collection. Dans cet exemple, si vous remplacez le nom de votre collection par Mycollection
, cela corrige l’erreur.
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
, ou bien au IServiceCollection
, en utilisant les méthodes d’extension fournies par le noyau sémantique.
Le magasin vectoriel Weaviate utilise un HttpClient
pour communiquer 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/") });
Des surcharges vous permettant de spécifier vos propres HttpClient
sont également disponibles.
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.CosineDistance, 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],
}
}
::: fin de zone
Pour commencer
Ajoutez les dépendances du connecteur Weaviate Vector Store à votre projet.
pip install semantic-kernel[weaviate]
Vous pouvez ensuite créer le magasin vectoriel, il utilise les paramètres d’environnement pour se connecter :
Pour utiliser Weaviate Cloud :
- url : WEAVIATE_URL
- api_key : WEAVIATE_API_KEY
Pour utiliser Weaviate Local (par exemple, Weaviate dans un conteneur Docker) :
- local_host : WEAVIATE_LOCAL_HOST
- local_port : WEAVIATE_LOCAL_PORT
- local_grpc_port : WEAVIATE_LOCAL_GRPC_PORT
Si vous souhaitez utiliser intégré, procédez comme suit :
- use_embed : WEAVIATE_USE_EMBED
Ceux-ci doivent être définis exclusivement, de sorte qu’un seul ensemble de ce qui précède est présent, sinon il déclenchera une exception.
from semantic_kernel.connectors.memory.weaviate import WeaviateStore
store = WeaviateStore()
Vous pouvez également passer votre propre client MongoDB si vous souhaitez avoir plus de contrôle sur la construction du client.
import weaviate
from semantic_kernel.connectors.memory.weaviate import WeaviateStore
client = weaviate.WeaviateAsyncClient(...)
store = WeaviateStore(async_client=client)
Vous pouvez également créer une collection directement, sans le magasin.
from semantic_kernel.connectors.memory.weaviate import WeaviateCollection
# `hotel` is a class created with the @vectorstoremodel decorator
collection = WeaviateCollection(
collection_name="my_collection",
data_model_type=hotel
)
Sérialisation
Le client Weaviate retourne ses propres objets qui sont analysés et transformés en dictes dans le flux normal, pour plus d’informations sur ce concept, consultez la documentation de sérialisation .
Bientôt disponible
Plus d’informations prochainement.