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 |
|
Ondersteunde vectoreigenschappentypen |
|
Ondersteunde indextypen |
|
Ondersteunde afstandsfuncties |
|
Ondersteunde filtervoorwaarden |
|
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 |
|
Ondersteunde vectoreigenschappentypen |
|
Ondersteunde indextypen |
|
Ondersteunde afstandsfuncties |
|
Ondersteunde filtervoorwaarden |
|
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 HttpClient
BaseAddress
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.