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 |
|
Dataegenskapstyper som stöds |
|
Egenskapstyper för vektorer som stöds | ReadOnlyMemory<flyttal> |
Indextyper som stöds | Hnsw |
Avståndsfunktioner som stöds |
|
Filtersatser som stöds |
|
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.