Condividi tramite


Uso del connettore Weaviate Vector Store (anteprima)

Avviso

La funzionalità Weaviate Vector Store è disponibile in anteprima e i miglioramenti che richiedono modifiche di rilievo possono comunque verificarsi in circostanze limitate prima del rilascio.

Avviso

La funzionalità di archiviazione vettoriale del kernel semantico è in anteprima e i miglioramenti che richiedono modifiche significative possono verificarsi ancora in circostanze limitate prima del rilascio.

Avviso

La funzionalità di archiviazione vettoriale del kernel semantico è in anteprima e i miglioramenti che richiedono modifiche significative possono verificarsi ancora in circostanze limitate prima del rilascio.

Panoramica

Il connettore Weaviate Vector Store può essere usato per accedere e gestire i dati in Weaviate. Il connettore presenta le caratteristiche seguenti.

Area delle funzionalità Supporto tecnico
La mappatura delle raccolte a Collezione Weaviate
Tipi di proprietà chiave supportati GUID
Tipi di proprietà dati supportati
  • corda
  • byte
  • breve
  • Int
  • lungo
  • doppio
  • galleggiante
  • decimale
  • Bool
  • Data e Ora
  • DateTimeOffset (struttura per gestire data e ora con fuso orario)
  • GUID
  • enumerabili di ciascuno di questi tipi
Tipi di proprietà vettoriali supportati
  • ReadOnlyMemory<float>
  • Incorporamento<float>
  • float[]
Tipi di indice supportati
  • Hnsw
  • Appartamento
  • Dinamico
Funzioni di distanza supportate
  • CosineDistance
  • Similarità del Prodotto Scalare Negativo
  • Distanza Euclidea Quadrata
  • Distanza di Hamming
  • ManhattanDistance
Clausole di filtro supportate
  • AnyTagEqualTo
  • EqualTo
Supporta più vettori in un record
Il supporto di IsIndexed è presente?
È supportato IsFullTextIndexed?
"StorageName è supportato?" No, usare JsonSerializerOptions e JsonPropertyNameAttribute invece. Per altre informazioni, vedi qui.
"HybridSearch è supportato?"
Area delle funzionalità Supporto tecnico
La mappatura delle raccolte a Collezione Weaviate
Tipi di proprietà chiave supportati GUID
Tipi di proprietà dati supportati
  • corda
  • byte
  • breve
  • Int
  • lungo
  • doppio
  • galleggiante
  • decimale
  • Bool
  • e iterabili di ciascuno di questi tipi
Tipi di proprietà vettoriali supportati
  • lista[float]
  • lista[int]
  • ndarray
Tipi di indice supportati
  • Hnsw
  • Appartamento
  • Dinamico
Funzioni di distanza supportate
  • CosineDistance
  • Similarità del Prodotto Scalare Negativo
  • Distanza Euclidea Quadrata
  • Hamming
  • ManhattanDistance
Clausole di filtro supportate
  • AnyTagEqualTo
  • EqualTo
Supporta più vettori in un record
IsFilterable è supportato?
IsFullTextSearchable è supportato?

Prossimamente.

Limiti

Limitazioni rilevanti della funzionalità del connettore Weaviate.

Area delle funzionalità Soluzione alternativa
L'uso della proprietà 'vector' per oggetti a vettore singolo non è supportato L'uso della proprietà 'vectors' è invece supportato.

Avviso

Weaviate richiede che i nomi delle raccolte inizino con una lettera maiuscola. Se non si specifica un nome di raccolta con una lettera maiuscola, Weaviate restituirà un errore quando si tenta di creare la raccolta. L'errore visualizzato è Cannot query field "mycollection" on type "GetObjectsObj". Did you mean "Mycollection"? dove mycollection è il nome della raccolta. In questo esempio, se si modifica il nome della raccolta in Mycollection, verrà risolto l'errore.

Per iniziare

Aggiungere il pacchetto NuGet del connettore di memoria vettoriale Weaviate al progetto.

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

È possibile aggiungere l'archivio vettoriale al contenitore di inserimento delle dipendenze disponibile in KernelBuilder o al IServiceCollection contenitore di inserimento delle dipendenze usando i metodi di estensione forniti dal kernel semantico. L'archivio vettoriale Weaviate utilizza un HttpClient per comunicare con il servizio Weaviate. Sono disponibili due opzioni per fornire l'URL/endpoint per il servizio Weaviate. Può essere fornito tramite opzioni o impostando l'indirizzo di base di HttpClient.

Questo primo esempio illustra come impostare l'URL del servizio tramite le opzioni. Si noti anche che questi metodi recupereranno un'istanza HttpClient per effettuare chiamate al servizio Weaviate dal provider di servizi di inserimento delle dipendenze.

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

Vengono forniti anche overload in cui è possibile specificare il proprio HttpClient. In questo caso è possibile impostare l'URL del servizio tramite l'opzione HttpClientBaseAddress .

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

È possibile costruire direttamente un'istanza del Vector Store Weaviate.

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

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

È possibile costruire un riferimento diretto a una raccolta denominata.

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

Se necessario, è possibile passare una chiave API, come opzione, quando si usa uno dei meccanismi indicati in precedenza, ad esempio

using Microsoft.SemanticKernel;

var kernelBuilder = Kernel
    .CreateBuilder();
kernelBuilder.Services
    .AddWeaviateVectorStore(new Uri("http://localhost:8080/v1/"), secretVar);

Mapping dei dati

Il connettore Weaviate Vector Store fornisce un mapper predefinito quando si esegue il mapping dal modello di dati all'archiviazione. Weaviate richiede che le proprietà vengano mappate in raggruppamenti id, payload e vettori. Il mapper predefinito usa le annotazioni del modello o la definizione di record per determinare il tipo di ogni proprietà e per eseguire questo mapping.

  • La proprietà del modello di dati annotata come chiave verrà mappata alla proprietà Weaviate id .
  • Le proprietà del modello di dati annotate come dati verranno mappate all'oggetto Weaviate properties .
  • Le proprietà del modello di dati annotate come vettori verranno mappate all'oggetto Weaviate vectors .

Il mapper predefinito usa System.Text.Json.JsonSerializer per eseguire la conversione nello schema di archiviazione. Ciò significa che l'utilizzo di JsonPropertyNameAttribute è supportato se è richiesto un nome di archiviazione diverso per il nome della proprietà del modello di dati.

Di seguito è riportato un esempio di modello di dati con JsonPropertyNameAttribute set e come verrà rappresentato in Weaviate.

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],
    }
}

Come iniziare

Aggiungere le dipendenze del connettore di archiviazione vettoriale di Weaviate al tuo progetto.

pip install semantic-kernel[weaviate]

È quindi possibile creare l'archivio vettoriale, che usa le impostazioni di ambiente per connettersi:

Per l'uso di Weaviate Cloud:

  • url: WEAVIATE_URL
  • api_key: WEAVIATE_API_KEY

Per l'uso di Weaviate Local (ad esempio Weaviate in un contenitore Docker):

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

Se si vuole usare embedded:

  • use_embed: WEAVIATE_USE_EMBED

Questi devono essere impostati esclusivamente, quindi è presente un solo set di elementi precedenti; in caso contrario, genererà un'eccezione.

from semantic_kernel.connectors.weaviate import WeaviateStore

store = WeaviateStore()

In alternativa, è anche possibile passare un client MongoDB personalizzato se si vuole avere un maggiore controllo sulla costruzione del client.

import weaviate
from semantic_kernel.connectors.weaviate import WeaviateStore

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

È anche possibile creare una raccolta direttamente, senza il negozio.

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
)

Serializzazione

Il client Weaviate restituisce i suoi propri oggetti, che vengono analizzati e trasformati in dizionari nel flusso regolare. Per altri dettagli su questo concetto, vedere la documentazione sulla serializzazione .

Presto disponibile

Altre informazioni saranno presto disponibili.