Sdílet prostřednictvím


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í
  • krátký
  • Int
  • dlouhý
  • řetězec
  • identifikátor GUID
Podporované typy datových vlastností
  • bool
  • krátký
  • Int
  • dlouhý
  • plout
  • dvojitý
  • desetinné číslo
  • řetězec
  • DatumČas
  • DateTimeOffset
  • GUID
  • byte[]
  • bool – výčty
  • krátké výčty
  • int Výčty
  • dlouhé výčty
  • Float – výčty
  • dvojnásobné Enumerables
  • desetinné výčty
  • Řetězcové výčty
  • Výčty data a času
  • Výčtovatelné DateTimeOffset
  • Výčty guid
Podporované typy vektorových vlastností ReadOnlyMemory<float>
Podporované typy indexů Hnsw
Podporované funkce vzdálenosti
  • KosineDistance
  • KosineSimilarita
  • DotProductSimilarity
  • EuclideanDistance
  • ManhattanDistance
Podporované klauzule filtru
  • AnyTagEqualTo
  • EqualTo
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.