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í |
|
Podporované typy vektorových vlastností |
|
Podporované typy indexů |
|
Podporované funkce vzdálenosti |
|
Podporované klauzule filtru |
|
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í |
|
Podporované typy vektorových vlastností |
|
Podporované typy indexů |
|
Podporované funkce vzdálenosti |
|
Podporované klauzule filtru |
|
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 HttpClient
BaseAddress
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.