Použití konektoru Postgres 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 Postgres Vector Store lze použít pro přístup k datům v Postgres a jejich správě. Konektor má následující charakteristiky.
Oblast funkcí | Podpora |
---|---|
Kolekce mapuje na | Tabulka Postgres |
Podporované typy klíčových vlastností |
|
Podporované typy datových vlastností |
|
Podporované typy vektorových vlastností | ReadOnlyMemory<float> |
Podporované typy indexů | Hnsw |
Podporované funkce vzdálenosti |
|
Podporované klauzule filtru |
|
Podporuje více vektorů v záznamu. | Ano |
Je podporováno Filtrování? | Ne |
Podporuje se IsFullTextSearchable? | Ne |
StoragePropertyName se podporuje? | Ano |
Začínáme
Přidejte do svého projektu balíček NuGet pro konektor Postgres Vector Store.
dotnet add package Microsoft.SemanticKernel.Connectors.Postgres --prerelease
Vektorové úložiště můžete přidat do kontejneru injektáže závislostí IServiceCollection
pomocí rozšiřujících metod poskytovaných sémantickým jádrem.
V tomto případě se u kontejneru zaregistruje také instance třídy Npgsql.NpgsqlDataSource
, která má povolené vektorové schopnosti.
using Microsoft.SemanticKernel;
// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddPostgresVectorStore("Host=localhost;Port=5432;Username=postgres;Password=example;Database=postgres;");
K dispozici jsou také metody rozšíření, které nepoužívají žádné parametry. Vyžadují samostatnou registraci instance třídy Npgsql.NpgsqlDataSource
v kontejneru pro injektování závislostí.
using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;
using Npgsql;
// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSingleton<NpgsqlDataSource>(sp =>
{
NpgsqlDataSourceBuilder dataSourceBuilder = new("Host=localhost;Port=5432;Username=postgres;Password=example;Database=postgres;");
dataSourceBuilder.UseVector();
return dataSourceBuilder.Build();
});
builder.Services.AddPostgresVectorStore();
Instanci Postgres Vector Store můžete vytvořit přímo.
using Microsoft.SemanticKernel.Connectors.Postgres;
using Npgsql;
NpgsqlDataSourceBuilder dataSourceBuilder = new("Host=localhost;Port=5432;Username=postgres;Password=example;Database=postgres;");
dataSourceBuilder.UseVector();
var dataSource = dataSourceBuilder.Build();
var connection = new PostgresVectorStore(dataSource);
Je možné vytvořit přímý odkaz na pojmenovanou kolekci.
using Microsoft.SemanticKernel.Connectors.Postgres;
using Npgsql;
NpgsqlDataSourceBuilder dataSourceBuilder = new("Host=localhost;Port=5432;Username=postgres;Password=example;Database=postgres;");
dataSourceBuilder.UseVector();
var dataSource = dataSourceBuilder.Build();
var collection = new PostgresVectorStoreRecordCollection<string, Hotel>(dataSource, "skhotels");
Mapování dat
Konektor Postgres Vector Store poskytuje při mapování z datového modelu do úložiště výchozí mapovač. Tento mapovač provede přímý převod seznamu vlastností datového modelu na sloupce v Postgresu.
Je také možné upravit výchozí chování mapperu poskytnutím vlastního mapperu prostřednictvím vlastnosti PostgresVectorStoreRecordCollectionOptions<TRecord>.DictionaryCustomMapper
.
Nastavení vlastního názvu vlastnosti
Názvy vlastností můžete určit jiné pro použití v úložišti než názvy vlastností v datovém modelu.
Přepsání názvu vlastnosti se provádí nastavením možnosti StoragePropertyName
pomocí atributů vlastností datového modelu nebo definice záznamu.
Tady je příklad datového modelu s atributy nastavenými na StoragePropertyName
a způsob, jakým bude reprezentován v dotazu v Postgresu.
using Microsoft.Extensions.VectorData;
public class Hotel
{
[VectorStoreRecordKey]
public ulong HotelId { get; set; }
[VectorStoreRecordData(StoragePropertyName = "hotel_name")]
public string? HotelName { get; set; }
[VectorStoreRecordData(StoragePropertyName = "hotel_description")]
public string? Description { get; set; }
[VectorStoreRecordVector(Dimensions: 4, DistanceFunction.CosineDistance)]
public ReadOnlyMemory<float>? DescriptionEmbedding { get; set; }
}
CREATE TABLE public."Hotels" (
"HotelId" INTEGER NOT NULL,
"hotel_name" TEXT ,
"hotel_description" TEXT ,
"DescriptionEmbedding" VECTOR(4) ,
PRIMARY KEY ("HotelId")
);
Již brzy
Další informace budou brzy k dispozici.
JDBC
Konektor JDBC se dá použít k připojení k Postgresu.