Freigeben über


Verwenden des Weaviate Vector Store-Connectors (Vorschau)

Warnung

Die Weaviate Vector Store-Funktionalität befindet sich in der Vorschau, und Verbesserungen, die breaking changes erfordern, können unter begrenzten Umständen noch vor der Veröffentlichung auftreten.

Warnung

Die Funktionalität des Semantischen Kernel-Vector-Stores befindet sich in der Vorschau, und Verbesserungen, die Änderungen erfordern, die wichtige Anpassungen bedingen, können in begrenzten Fällen vor der Freigabe noch auftreten.

Warnung

Die Funktionalität des Semantischen Kernel-Vector-Stores befindet sich in der Vorschau, und Verbesserungen, die Änderungen erfordern, die wichtige Anpassungen bedingen, können in begrenzten Fällen vor der Freigabe noch 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
Zuweisungen der Sammlungen Weaviate Sammlung
Unterstützte Schlüsseleigenschaftentypen Leitfaden
Unterstützte Dateneigenschaftstypen
  • Zeichenfolge
  • Byte
  • kurz
  • INT
  • lang
  • doppelt
  • Schweben
  • Dezimal
  • Boolesch
  • DatumUhrzeit
  • DateTimeOffset (Datum/Uhrzeit mit Offset)
  • Leitfaden
  • und Aufzählungen für jede dieser Typen
Unterstützte Typen von Vektoreigenschaften
  • ReadOnlyMemory<float>
  • Einbetten von<Float>
  • float[]
Unterstützte Indextypen
  • Hnsw
  • Flach
  • Dynamisch
Unterstützte Entfernungsfunktionen
  • CosineDistance
  • Negatives Skalarprodukt-Ähnlichkeit
  • Euklidische quadratische Distanz
  • Hamming-Abstand
  • ManhattanDistance
Unterstützte Filterklauseln
  • AnyTagEqualTo
  • EqualTo
Unterstützt mehrere Vektoren in einem Datensatz Ja
Wird Indized unterstützt? Ja
WirdFullTextIndexed unterstützt? Ja
Wird StorageName unterstützt? Nein, verwenden JsonSerializerOptions Und JsonPropertyNameAttribute stattdessen. Weitere Informationen finden Sie hier.
HybridSearch wird unterstützt? Ja
Featurebereich Unterstützung
Zuweisungen der Sammlungen Weaviate Sammlung
Unterstützte Schlüsseleigenschaftentypen Leitfaden
Unterstützte Dateneigenschaftstypen
  • Zeichenfolge
  • Byte
  • kurz
  • INT
  • lang
  • doppelt
  • Schweben
  • Dezimal
  • Boolesch
  • und Iterables von jedem dieser Typen
Unterstützte Typen von Vektoreigenschaften
  • Liste[float]
  • list[int]
  • ndarray
Unterstützte Indextypen
  • Hnsw
  • Flach
  • Dynamisch
Unterstützte Entfernungsfunktionen
  • CosineDistance
  • Negatives Skalarprodukt-Ähnlichkeit
  • Euklidische quadratische Distanz
  • Hamming
  • ManhattanDistance
Unterstützte Filterklauseln
  • AnyTagEqualTo
  • EqualTo
Unterstützt mehrere Vektoren in einem Datensatz Ja
IstFilterbar unterstützt? Ja
WirdFullTextSearchable unterstützt? Ja

Demnächst.

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.

Warnung

Weaviate erfordert, dass Sammlungsnamen mit einem Großbuchstaben beginnen. Wenn Sie keinen Sammlungsnamen mit einem Großbuchstaben angeben, gibt Weaviate einen Fehler zurück, wenn Sie versuchen, Ihre Sammlung zu erstellen. Der Fehler, den Sie sehen, ist Cannot query field "mycollection" on type "GetObjectsObj". Did you mean "Mycollection"?, wobei mycollection der Name der Sammlung ist. Wenn Sie in diesem Beispiel stattdessen den Sammlungsnamen in Mycollection ändern, wird der Fehler behoben.

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 verfügbaren Abhängigkeitsinjektionscontainer für KernelBuilder hinzufügen oder dem IServiceCollection Abhängigkeitsinjektionscontainer mithilfe der vom Semantischen Kernel bereitgestellten Erweiterungsmethoden hinzufügen. Der Weaviate-Vektorspeicher verwendet eine HttpClient zur Kommunikation mit dem Weaviate-Dienst. Es gibt zwei Optionen für die Bereitstellung der URL/des Endpunkts für den Weaviate-Dienst. Die Bereitstellung kann über Optionen oder durch Festlegen der Basisadresse des HttpClient erfolgen.

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.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;

// Using Kernel Builder.
var kernelBuilder = Kernel
    .CreateBuilder();
kernelBuilder.Services
    .AddWeaviateVectorStore(new Uri("http://localhost:8080/v1/"), apiKey: null);
using Microsoft.Extensions.DependencyInjection;

// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddWeaviateVectorStore(new Uri("http://localhost:8080/v1/"), apiKey: null);

Überladungen, bei denen Sie eigene HttpClient angeben können, sind ebenfalls verfügbar. In diesem Fall ist es möglich, die Dienst-URL über die HttpClientBaseAddress Option festzulegen.

using System.Net.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;

// Using Kernel Builder.
var kernelBuilder = Kernel.CreateBuilder();
using HttpClient client = new HttpClient { BaseAddress = new Uri("http://localhost:8080/v1/") };
kernelBuilder.Services.AddWeaviateVectorStore(_ => client);
using System.Net.Http;
using Microsoft.Extensions.DependencyInjection;

// 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 WeaviateCollection<Guid, 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();
kernelBuilder.Services
    .AddWeaviateVectorStore(new Uri("http://localhost:8080/v1/"), secretVar);

Datenzuordnung

Der Weaviate Vector Store-Connector stellt beim Zuordnen vom Datenmodell zum Speicher einen Standard-Mapper bereit. Weaviate erfordert, dass Eigenschaften in die Gruppierungen id, Nutzlast und Vektoren 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.

Der Standard-Mapper verwendet System.Text.Json.JsonSerializer, um in das Speicherschema zu konvertieren. Dies bedeutet, dass die Verwendung von JsonPropertyNameAttribute unterstützt wird, wenn ein anderer Speichername benötigt wird als der Name der Eigenschaft im Datenmodell.

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
{
    [VectorStoreKey]
    public Guid HotelId { get; set; }

    [VectorStoreData(IsIndexed = true)]
    public string HotelName { get; set; }

    [VectorStoreData(IsFullTextIndexed = true)]
    public string Description { get; set; }

    [JsonPropertyName("HOTEL_DESCRIPTION_EMBEDDING")]
    [VectorStoreVector(4, DistanceFunction = DistanceFunction.CosineDistance, IndexKind = IndexKind.QuantizedFlat)]
    public ReadOnlyMemory<float>? DescriptionEmbedding { get; set; }
}
{
    "id": "11111111-1111-1111-1111-111111111111",
    "properties": { "HotelName": "Hotel Happy", "Description": "A place where everyone can be happy." },
    "vectors": {
        "HOTEL_DESCRIPTION_EMBEDDING": [0.9, 0.1, 0.1, 0.1],
    }
}

Erste Schritte

Fügen Sie Ihrem Projekt die Verbindungsabhängigkeiten des Weaviate Vector Store hinzu.

pip install semantic-kernel[weaviate]

Anschließend können Sie den Vektorspeicher erstellen, er verwendet Umgebungseinstellungen, um eine Verbindung herzustellen:

Für die Verwendung von Weaviate Cloud:

  • url: WEAVIATE_URL
  • api_key: WEAVIATE_API_KEY

Zur Verwendung von Weaviate Local (d. h. Weaviate in einem Docker-Container):

  • local_host: WEAVIATE_LOCAL_HOST
  • local_port: WEAVIATE_LOCAL_PORT
  • local_grpc_port: WEAVIATE_LOCAL_GRPC_PORT

Wenn Sie eingebettete Anwendungen verwenden möchten:

  • use_embed: WEAVIATE_USE_EMBED

Diese sollten ausschließlich festgelegt werden, sodass nur eine Gruppe der obigen Elemente vorhanden ist, andernfalls wird eine Ausnahme ausgelöst.

from semantic_kernel.connectors.weaviate import WeaviateStore

store = WeaviateStore()

Alternativ können Sie auch Ihren eigenen MongoDB-Client übergeben, wenn Sie mehr Kontrolle über die Konstruktion des Clients haben möchten.

import weaviate
from semantic_kernel.connectors.weaviate import WeaviateStore

client = weaviate.WeaviateAsyncClient(...)
store = WeaviateStore(async_client=client)

Sie können auch eine Sammlung direkt ohne das Geschäft erstellen.

from semantic_kernel.connectors.weaviate import WeaviateCollection

# `hotel` is a class created with the @vectorstoremodel decorator
collection = WeaviateCollection(
    collection_name="my_collection",
    record_type=hotel
)

Serialisierung

Der Weaviate-Client gibt seine eigenen Objekte zurück, die analysiert und in Diktaten im regulären Fluss umgewandelt werden, weitere Details zu diesem Konzept finden Sie in der Serialisierungsdokumentation.

In Kürze verfügbar

Weitere Informationen werden in Kürze verfügbar sein.