Freigeben über


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
  • Zeichenfolge
  • Byte
  • short
  • int
  • long
  • double
  • float
  • Decimal
  • bool
  • DateTime
  • DateTimeOffset
  • Guid
  • und Aufzählungen dieser Typen
Unterstützte Vektoreigenschaftentypen
  • ReadOnlyMemory<float>
  • ReadOnlyMemory<Double>
Unterstützte Indextypen
  • Hnsw
  • Flach
  • Dynamisch
Unterstützte Entfernungsfunktionen
  • CosineDistance
  • DotProductSimilarity
  • EuclideanSquaredDistance
  • Hamming
  • ManhattanDistance
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.