Verwenden des Weaviate Vector Store-Connectors (Vorschau)
Warnung
Die Funktionalität des semantischen Kernelvektorspeichers befindet sich in der Vorschau, und Verbesserungen, die fehlerhafte Änderungen erfordern, können unter begrenzten Umständen noch vor der Veröffentlichung auftreten.
Übersicht
Der Weaviate Vector Store-Connector kann verwendet werden, um auf Daten in Weaviate zuzugreifen und sie zu verwalten. Der Verbinder weist die folgenden Merkmale auf.
Featurebereich | Unterstützung |
---|---|
Auflistungszuordnungen | Weaviate Sammlung |
Unterstützte Schlüsseleigenschaftentypen | Guid |
Unterstützte Datentypen für Datentypen |
|
Unterstützte Vektoreigenschaftentypen |
|
Unterstützte Indextypen |
|
Unterstützte Entfernungsfunktionen |
|
Unterstützt mehrere Vektoren in einem Datensatz | Ja |
IstFilterbar unterstützt? | Ja |
WirdFullTextSearchable unterstützt? | Ja |
StoragePropertyName wird unterstützt? | Nein, verwenden JsonSerializerOptions Und JsonPropertyNameAttribute stattdessen. Weitere Informationen finden Sie hier. |
Begrenzungen
Wichtige Einschränkungen der Weaviate-Verbinderfunktionalität.
Featurebereich | Problemumgehung |
---|---|
Die Verwendung der Eigenschaft "vector" für einzelne Vektorobjekte wird nicht unterstützt. | Die Verwendung der Eigenschaft "vectors" wird stattdessen unterstützt. |
Erste Schritte
Fügen Sie das NuGet-Paket des Weaviate Vector Store-Connectors zu Ihrem Projekt hinzu.
dotnet add package Microsoft.SemanticKernel.Connectors.Weaviate --prerelease
Sie können den Vektorspeicher dem Container zum Einfügen von Abhängigkeiten hinzufügen, der für den KernelBuilder
Container für Abhängigkeitseinfügungen verfügbar ist, oder dem IServiceCollection
Container zum Einfügen von Abhängigkeiten mithilfe von Erweiterungsmethoden, die vom semantischen Kernel bereitgestellt werden.
Der Weaviate-Vektorspeicher verwendet eine HttpClient
Kommunikation mit dem Weaviate-Dienst. Es gibt zwei Optionen für die Bereitstellung der URL/des Endpunkts für den Weaviate-Dienst.
Sie kann über Optionen oder durch Festlegen der Basisadresse der HttpClient
.
In diesem ersten Beispiel wird gezeigt, wie die Dienst-URL über Optionen festgelegt wird.
Beachten Sie außerdem, dass diese Methoden eine HttpClient
Instanz für Aufrufe an den Weaviate-Dienst vom Anbieter für Abhängigkeitseinfügungen abrufen.
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/") });
Überladungen, in denen Sie Ihre eigenen HttpClient
angeben können, werden ebenfalls bereitgestellt.
In diesem Fall ist es möglich, die Dienst-URL über die HttpClient
BaseAddress
Option festzulegen.
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);
Sie können auch eine Weaviate Vector Store-Instanz direkt erstellen.
using System.Net.Http;
using Microsoft.SemanticKernel.Connectors.Weaviate;
var vectorStore = new WeaviateVectorStore(
new HttpClient { BaseAddress = new Uri("http://localhost:8080/v1/") });
Es ist möglich, einen direkten Verweis auf eine benannte Auflistung zu erstellen.
using System.Net.Http;
using Microsoft.SemanticKernel.Connectors.Weaviate;
var collection = new WeaviateVectorStoreRecordCollection<Hotel>(
new HttpClient { BaseAddress = new Uri("http://localhost:8080/v1/") },
"skhotels");
Bei Bedarf ist es möglich, einen API-Schlüssel als Option zu übergeben, wenn eines der oben genannten Mechanismen verwendet wird, z. B.
using Microsoft.SemanticKernel;
var kernelBuilder = Kernel
.CreateBuilder()
.AddWeaviateVectorStore(options: new() { Endpoint = new Uri("http://localhost:8080/v1/"), ApiKey = secretVar });
Datenzuordnung
Der Weaviate Vector Store-Connector stellt beim Zuordnen vom Datenmodell zum Speicher einen Standard-Mapper bereit. Weaviate erfordert, dass Eigenschaften in ID-, Nutzlast- und Vektorgruppierungen zugeordnet werden. Der Standardzuordnungs-Mapper verwendet die Modellanmerkungen oder die Datensatzdefinition, um den Typ jeder Eigenschaft zu bestimmen und diese Zuordnung auszuführen.
- Die als Schlüssel gekennzeichnete Datenmodelleigenschaft wird der Weaviate-Eigenschaft
id
zugeordnet. - Die Datenmodelleigenschaften, die als Daten gekennzeichnet sind, werden dem Weaviate-Objekt
properties
zugeordnet. - Die Als Vektoren gekennzeichneten Datenmodelleigenschaften werden dem Weaviate-Objekt
vectors
zugeordnet.
Die Standardzuordnung verwendet System.Text.Json.JsonSerializer
, um in das Speicherschema zu konvertieren.
Dies bedeutet, dass die Verwendung der JsonPropertyNameAttribute
Datenmodelleigenschaft unterstützt wird, wenn ein anderer Speichername für den Namen der Datenmodelleigenschaft erforderlich ist.
Hier ist ein Beispiel für ein Datenmodell mit JsonPropertyNameAttribute
Set und wie dies in Weaviate dargestellt wird.
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],
}
}
In Kürze verfügbar
Weitere Informationen werden in Kürze verfügbar sein.
In Kürze verfügbar
Weitere Informationen werden in Kürze verfügbar sein.