Sdílet prostřednictvím


Použití konektoru Weaviate Vector Store (Preview)

Varování

Funkce sémantického úložiště vektorů jádra je ve verzi Preview a vylepšení, která vyžadují zásadní změny, se můžou vyskytovat za omezených okolností před vydáním.

Přehled

Konektor Weaviate Vector Store se dá použít k přístupu k datům ve weaviate a správě dat. Konektor má následující charakteristiky.

Oblast funkcí Technická podpora
Kolekce mapuje na Kolekce weaviate
Podporované typy vlastností klíče Guid
Podporované typy datových vlastností
  • řetězec
  • byte
  • krátký
  • int
  • dlouhý
  • dvojitý
  • float (číslo s plovoucí řádovou čárkou)
  • desetinný
  • bool
  • Datum a čas
  • Datum a čas s posunem
  • Guid
  • a výčty každého z těchto typů
Podporované typy vektorových vlastností
  • Paměť pouze pro čtení<float>
  • Paměť pouze pro čtení<double>
Podporované typy indexů
  • Hnsw
  • Plochý
  • dynamický
Podporované funkce vzdálenosti
  • KosineDistance
  • Negativní podobnost skalárního součinu
  • Euklidovská kvadratická vzdálenost
  • Hamming
  • ManhattanDistance
Podporované klauzule filtru
  • AnyTagEqualTo
  • EqualTo
Podporuje více vektorů v záznamu. Ano
Je podporováno Filtrování? Ano
Podporuje se IsFullTextSearchable? Ano
StoragePropertyName se podporuje? Ne, použijte JsonSerializerOptions a JsonPropertyNameAttribute místo toho. Další informace najdete tady.
Podporuje se HybridSearch? Ano
Oblast funkcí Technická podpora
Kolekce odpovídá Kolekce weaviate
Podporované typy klíčových vlastností Guid
Podporované typy datových vlastností
  • řetězec
  • byte
  • krátký
  • int
  • dlouhý
  • dvojitý
  • float
  • desetinný
  • bool
  • a iterovatelné prvky každého z těchto typů
Podporované typy vektorových vlastností
  • seznam[float]
  • seznam[int]
  • ndarray
Podporované typy indexů
  • Hnsw
  • Plochý
  • dynamický
Podporované funkce vzdálenosti
  • KosineDistance
  • Negativní podobnost skalárního součinu
  • Euklidovská čtvercová vzdálenost
  • Hamming
  • ManhattanDistance
Podporované klauzule filtru
  • AnyTagEqualTo
  • EqualTo
Podporuje více vektorů v záznamu. Ano
Je podporováno Filtrování? Ano
Podporuje se IsFullTextSearchable? Ano

Již brzy.

Omezení

Významná omezení funkcí konektoru Weaviate.

Oblast funkcí Alternativní řešení
Použití vlastnosti vector pro objekty s jedním vektorem není podporováno. Místo toho se podporuje použití vlastnosti vektory.

Varování

Weaviate vyžaduje, aby názvy kolekcí začínaly velkým písmenem. Pokud nezadáte název kolekce velkým písmenem, weaviate při pokusu o vytvoření kolekce vrátí chybu. Chyba, která se zobrazí, je Cannot query field "mycollection" on type "GetObjectsObj". Did you mean "Mycollection"? kde mycollection je název vaší kolekce. Pokud v tomto příkladu změníte název kolekce na Mycollection místo toho, opraví se chyba.

Začínáme

Přidejte do projektu balíček NuGet konektoru Weaviate Vector Store.

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

Vektorové úložiště můžete přidat do kontejneru pro injektování závislostí, který je dostupný na KernelBuilder, nebo použít metody rozšíření poskytované sémantickým jádrem k přidání do kontejneru na IServiceCollection. Úložiště vektorů Weaviate používá HttpClient ke komunikaci se službou Weaviate. Existují dvě možnosti pro poskytnutí adresy URL/koncového bodu pro službu Weaviate. Lze ji poskytnout prostřednictvím možností nebo nastavením základní adresy HttpClient.

Tento první příklad ukazuje, jak nastavit adresu URL služby prostřednictvím možností. Všimněte si také, že tyto metody načtou HttpClient instanci pro volání služby Weaviate od poskytovatele služby injektáže závislostí.

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

K dispozici jsou také přetížení, kde můžete zadat vlastní HttpClient. V takovém případě je možné nastavit adresu URL služby prostřednictvím HttpClientBaseAddress možnosti.

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

Instanci Weaviate Vector Store můžete vytvořit také přímo.

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

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

Je možné vytvořit přímý odkaz na pojmenovanou kolekci.

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

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

V případě potřeby je možné klíč rozhraní API předat jako možnost při použití některého z výše uvedených mechanismů, např.

using Microsoft.SemanticKernel;

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

Mapování dat

Konektor Weaviate Vector Store poskytuje při mapování z datového modelu do úložiště výchozí mapovač. Weaviate vyžaduje, aby se vlastnosti mapovaly na seskupení ID, payloadu a vektorů. Výchozí mapovač používá k určení typu každé vlastnosti a k tomuto mapování poznámky modelu nebo definici záznamu.

  • Vlastnost datového modelu označená jako klíč se mapuje na vlastnost Weaviate id .
  • Vlastnosti datového modelu anotované jako data budou mapovány na objekt Weaviate properties .
  • Vlastnosti datového modelu anotované jako vektory budou mapovány na objekt Weaviate vectors .

Výchozí mapovač používá System.Text.Json.JsonSerializer k převodu na schéma úložiště. To znamená, že použití tohoto objektu JsonPropertyNameAttribute se podporuje, pokud se vyžaduje jiný název úložiště s názvem vlastnosti datového modelu.

Tady je příklad datového modelu se JsonPropertyNameAttribute sadou a způsobem, jak se bude reprezentovat ve 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

Začínáme

Přidejte do svého projektu závislosti konektoru Weaviate Vector Store.

pip install semantic-kernel[weaviate]

Pak můžete vytvořit vektorové úložiště, které používá nastavení prostředí pro připojení:

Používání služby Weaviate Cloud:

  • url: WEAVIATE_URL
  • api_key: WEAVIATE_API_KEY

Pro použití služby Weaviate Local (tj. Weaviate v kontejneru Dockeru):

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

Pokud chcete použít vložené:

  • use_embed: WEAVIATE_USE_EMBED

Měly by být nastaveny výhradně, takže existuje pouze jedna sada výše uvedených hodnot, jinak vyvolá výjimku.

from semantic_kernel.connectors.memory.weaviate import WeaviateStore

store = WeaviateStore()

Alternativně můžete použít svého vlastního klienta MongoDB, pokud chcete mít větší kontrolu nad konstrukcí klienta:

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

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

Můžete také vytvořit kolekci přímo, bez obchodu.

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
)

Serializace

Klient Weaviate vrací vlastní objekty, které jsou analyzovány a převedeny na slovníky v běžném procesu, další podrobnosti o tomto konceptu najdete v dokumentaci k serializaci .

Již brzy

Další informace budou brzy k dispozici.