Dela via


Använda Postgres Vector Store-anslutningsappen (förhandsversion)

Varning

Funktionen Semantic Kernel Vector Store är i förhandsversion, och förbättringar som kräver icke-bakåtkompatibla ändringar kan fortfarande ske under begränsade omständigheter före lanseringen.

Överblick

Postgres Vector Store-anslutningsappen kan användas för att komma åt och hantera data i Postgres. Anslutningsappen har följande egenskaper.

Funktionsområde Supporttjänst
Samlingskartor till Postgres-tabell
Nyckelegenskapstyper som stöds
  • kort
  • Int
  • lång
  • sträng
  • GUID
Dataegenskapstyper som stöds
  • Bool
  • kort
  • Int
  • lång
  • flyta / sväva
  • dubbel
  • decimal
  • sträng
  • DatumTid
  • DateTimeOffset
  • Guide
  • byte[]
  • bool Uppräkningsbara
  • korta uppräkningsbara
  • int Enumerables
  • långa uppräkningsbara
  • float Uppräkningsbara
  • dubbla uppräkningsbara
  • decimala uppräkningsbara tecken
  • string Enumerables
  • DateTime-uppräkningar
  • DateTimeOffset Uppräkningar
  • Guid-uppräkningar
Egenskapstyper för vektorer som stöds ReadOnlyMemory<flyttal>
Indextyper som stöds Hnsw
Avståndsfunktioner som stöds
  • CosineDistance
  • CosineSimilarity
  • Punktproduktsimilaritet
  • EuclideanDistance
  • ManhattanDistance
Filtersatser som stöds
  • AnyTagEqualTo
  • EqualTo
Stöder flera vektorer i en registrering Ja
Stöds IsFilterable? Nej
Stöds IsFullTextSearchable? Nej
Stöds StoragePropertyName? Ja

Komma igång

Lägg till NuGet-paketet för Postgres Vector Store-anslutningsappen i projektet.

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

Du kan lägga till vektorlagret i beroendeinjektionscontainern IServiceCollection med hjälp av tilläggsmetoder som tillhandahålls av Semantic Kernel.

I det här fallet registreras även en instans av klassen Npgsql.NpgsqlDataSource, som har aktiverat vektorfunktioner, med containern.

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

Tilläggsmetoder som inte har några parametrar tillhandahålls också. Dessa kräver att en instans av klassen Npgsql.NpgsqlDataSource registreras separat med containern för beroendeinmatning.

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

Du kan skapa en Postgres Vector Store-instans direkt.

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

Det går att skapa en direktreferens till en namngiven samling.

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

Datakartläggning

Postgres Vector Store-anslutningsappen tillhandahåller en standardmappare vid mappning från datamodellen till lagring. Den här mapparen gör en direkt konvertering av listan med egenskaper i datamodellen till kolumnerna i Postgres.

Det går också att åsidosätta standardbeteendet för mappning genom att tillhandahålla en anpassad mappare via egenskapen PostgresVectorStoreRecordCollectionOptions<TRecord>.DictionaryCustomMapper.

Åsidosättning av egenskapsnamn

Du kan åsidosätta egenskapsnamn som ska användas i lagring som skiljer sig från egenskapsnamnen i datamodellen. Åsidosättningen av egenskapsnamnet görs genom att ange alternativet StoragePropertyName via egenskapsattributen för datamodellen eller postdefinitionen.

Här är ett exempel på en datamodell med StoragePropertyName inställt på dess attribut och hur den kommer att representeras i Postgres-frågan.

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

Kommer snart

Mer information kommer snart.

JDBC

Den JDBC--anslutningsappen kan användas för att ansluta till Postgres.