Delen via


De Weaviate Vector Store-connector gebruiken (preview)

Waarschuwing

De functionaliteit van de Semantic Kernel Vector Store is in preview, en verbeteringen die ingrijpende wijzigingen vereisen, kunnen in beperkte omstandigheden nog steeds plaatsvinden voordat de release plaatsvindt.

Overzicht

De Weaviate Vector Store-connector kan worden gebruikt voor toegang tot en beheer van gegevens in Weaviate. De verbindingslijn heeft de volgende kenmerken.

Functiegebied Ondersteuning
Verzameling komt overeen met Weaviate Collectie
Ondersteunde typen sleuteleigenschappen Guid
Ondersteunde gegevenseigenschapstypen
  • tekenreeks
  • byte
  • kort
  • int
  • lang
  • dubbel
  • zweven
  • decimaal
  • bool
  • Datum en tijd
  • DateTimeOffset
  • Guid
  • en opsommingstypen voor elk van deze soorten
Ondersteunde vectoreigenschappentypen
  • ReadOnlyMemory<float>
  • ReadOnlyMemory<double>
Ondersteunde indextypen
  • Hnsw
  • Plat
  • Dynamisch
Ondersteunde afstandsfuncties
  • CosineDistance
  • NegativeDotProductSimilarity
  • Euclidische Kwadratische Afstand
  • Hamming
  • ManhattanDistance
Ondersteunde filtervoorwaarden
  • AnyTagEqualTo
  • EqualTo
Ondersteunt meerdere vectoren in een record Ja
Wordt Filterable ondersteund? Ja
WordtFullTextSearchable ondersteund? Ja
Wordt StoragePropertyName ondersteund? Nee, gebruik JsonSerializerOptions en JsonPropertyNameAttribute in plaats daarvan. Zie hier voor meer informatie.
HybridSearch ondersteund? Ja
Functiegebied Ondersteuning
Verzameling komt overeen met Weaviate Collectie
Ondersteunde belangrijkste eigenschapstypen Guid
Ondersteunde gegevenseigenschapstypen
  • tekenreeks
  • byte
  • kort
  • int
  • lang
  • dubbel
  • zwevend
  • decimaal
  • bool
  • en iterables van elk van deze typen
Ondersteunde vectoreigenschappentypen
  • lijst[float]
  • list[int]
  • ndarray
Ondersteunde indextypen
  • Hnsw
  • Plat
  • Dynamisch
Ondersteunde afstandsfuncties
  • CosineDistance
  • NegativeDotProductSimilarity
  • EuclideanSquaredDistance
  • Hamming
  • ManhattanDistance
Ondersteunde filtervoorwaarden
  • AnyTagEqualTo
  • EqualTo
Ondersteunt meerdere vectoren in een record Ja
Wordt Filterable ondersteund? Ja
WordtFullTextSearchable ondersteund? Ja

Binnenkort beschikbaar.

Beperkingen

Belangrijke beperkingen voor de functionaliteit van de Weaviate-connector.

Functiegebied Tijdelijke oplossing
Het gebruik van de eigenschap Vector voor objecten met één vector wordt niet ondersteund Het gebruik van de eigenschap vectoren wordt in plaats daarvan ondersteund.

Waarschuwing

Voor Weaviate moeten verzamelingsnamen beginnen met een hoofdletter. Als u geen verzamelingsnaam met een hoofdletter opgeeft, retourneert Weaviate een fout wanneer u uw verzameling probeert te maken. De fout die u ziet, is Cannot query field "mycollection" on type "GetObjectsObj". Did you mean "Mycollection"? waar mycollection de naam van uw verzameling is. In dit voorbeeld wordt de fout opgelost als u de naam van uw verzameling wijzigt in Mycollection.

Aan de slag

Voeg het NuGet-pakket van de Weaviate Vector Store-connector toe aan uw project.

dotnet add package Microsoft.SemanticKernel.Connectors.Weaviate --prerelease

U kunt de vectoropslag toevoegen aan de beschikbare container voor afhankelijkheidsinjectie op KernelBuilder of aan de IServiceCollection container voor afhankelijkheidsinjectie met extensiemethoden die worden geleverd door de Semantic Kernel. De Weaviate vector store maakt gebruik van een HttpClient om te communiceren met de Weaviate service. Er zijn twee opties voor het opgeven van de URL/het eindpunt voor de Weaviate-service. Het kan worden opgegeven via opties of door het basisadres van de HttpClient in te stellen.

In dit eerste voorbeeld ziet u hoe u de service-URL instelt via opties. Houd er ook rekening mee dat met deze methoden een HttpClient exemplaar wordt opgehaald voor het aanroepen naar de Weaviate-service van de provider van de afhankelijkheidsinjectieservice.

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/") });

Overbelastingen waarbij u uw eigen HttpClient kunt opgeven, zijn ook beschikbaar. In dit geval is het mogelijk om de service-URL in te stellen via de HttpClientBaseAddress optie.

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);

U kunt ook rechtstreeks een Weaviate Vector Store-exemplaar maken.

using System.Net.Http;
using Microsoft.SemanticKernel.Connectors.Weaviate;

var vectorStore = new WeaviateVectorStore(
    new HttpClient { BaseAddress = new Uri("http://localhost:8080/v1/") });

Het is mogelijk om een directe verwijzing naar een benoemde verzameling te maken.

using System.Net.Http;
using Microsoft.SemanticKernel.Connectors.Weaviate;

var collection = new WeaviateVectorStoreRecordCollection<Hotel>(
    new HttpClient { BaseAddress = new Uri("http://localhost:8080/v1/") },
    "Skhotels");

Indien nodig is het mogelijk om een API-sleutel als optie door te geven bij gebruik van een van de bovenstaande mechanismen, bijvoorbeeld

using Microsoft.SemanticKernel;

var kernelBuilder = Kernel
    .CreateBuilder()
    .AddWeaviateVectorStore(options: new() { Endpoint = new Uri("http://localhost:8080/v1/"), ApiKey = secretVar });

Datamapping

De Weaviate Vector Store-connector biedt een standaardomzetter bij het omzetten van het gegevensmodel naar opslag. Weaviate vereist dat eigenschappen worden toegewezen aan id-, nettolading- en vectorgroepen. De standaardmapper gebruikt de modelaantekeningen of recorddefinitie om het type van elke eigenschap te bepalen en om dit mappingproces uit te voeren.

  • De eigenschap van het gegevensmodel die als sleutel wordt geannoteerd, wordt toegewezen aan de eigenschap Weaviate id .
  • De eigenschappen van het gegevensmodel die zijn geannoteerd als gegevens, worden toegewezen aan het Weaviate-object properties .
  • De eigenschappen van het gegevensmodel die zijn geannoteerd als vectoren, worden toegewezen aan het Weaviate-object vectors .

De standaard mapper gebruikt System.Text.Json.JsonSerializer om te converteren naar het opslagschema. Dit betekent dat het gebruik van het JsonPropertyNameAttribute bestand wordt ondersteund als een andere opslagnaam voor de naam van de gegevensmodeleigenschap is vereist.

Hier volgt een voorbeeld van een gegevensmodel met JsonPropertyNameAttribute een set en hoe dat wordt weergegeven in 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],
    }
}

::: zone-end

Aan de slag komen

Voeg de afhankelijkheden van de Weaviate Vector Store-connector toe aan uw project.

pip install semantic-kernel[weaviate]

U kunt vervolgens de vectoropslag maken; deze gebruikt omgevingsinstellingen om verbinding te maken.

Voor het gebruik van Weaviate Cloud:

  • URL: WEAVIATE_URL
  • api_key: WEAVIATE_API_KEY

Voor het gebruik van Weaviate Local (dat wil zeggen Weaviate in een Docker-container):

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

Als u ingebouwde functionaliteit wilt gebruiken:

  • use_embed: WEAVIATE_USE_EMBED

Deze moeten uitsluitend worden ingesteld, dus slechts één set van de bovenstaande is aanwezig, anders wordt er een uitzondering gegenereerd.

from semantic_kernel.connectors.memory.weaviate import WeaviateStore

store = WeaviateStore()

U kunt ook uw eigen MongoDB-client doorgeven als u meer controle wilt hebben over het bouwen van de client.

import weaviate
from semantic_kernel.connectors.memory.weaviate import WeaviateStore

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

U kunt ook rechtstreeks een verzameling maken zonder de store.

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
)

Serialisatie

De Weaviate-client retourneert zijn eigen objecten die worden geparseerd en omgezet in dicts, in de standaard stroom. Zie de serialisatiedocumentatievoor meer informatie over dit concept.

Binnenkort beschikbaar

Binnenkort meer informatie.