De Postgres Vector Store-connector gebruiken (preview)
Waarschuwing
De functionaliteit van de Semantische Kernel Vector Store is in preview, en verbeteringen die ingrijpende wijzigingen vereisen, kunnen nog steeds in beperkte gevallen voorkomen voordat ze worden uitgebracht.
Overzicht
De Postgres Vector Store-connector kan worden gebruikt voor toegang tot en beheer van gegevens in Postgres. De verbindingslijn heeft de volgende kenmerken.
Functiegebied | Ondersteuning |
---|---|
Verzamelingstoewijzingen aan | Postgres-tabel |
Ondersteunde eigenschapstypen |
|
Ondersteunde gegevenseigenschapstypen |
|
Ondersteunde vectoreigenschappentypen | ReadOnlyMemory<float> |
Ondersteunde indextypen | Hnsw |
Ondersteunde afstandsfuncties |
|
Ondersteunde filtervoorwaarden |
|
Ondersteunt meerdere vectoren in een record | Ja |
Wordt Filterable ondersteund? | Nee |
WordtFullTextSearchable ondersteund? | Nee |
Wordt StoragePropertyName ondersteund? | Ja |
Aan de slag
Voeg het NuGet-pakket van de Postgres Vector Store-connector toe aan uw project.
dotnet add package Microsoft.SemanticKernel.Connectors.Postgres --prerelease
U kunt het vectorarchief toevoegen aan de IServiceCollection
afhankelijkheidsinjectiecontainer met behulp van extensiemethoden die worden geleverd door Semantische kernel.
In dit geval wordt een exemplaar van de Npgsql.NpgsqlDataSource
-klasse, waarvoor vectormogelijkheden zijn ingeschakeld, ook geregistreerd bij de container.
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;");
Extensiemethoden waarvoor geen parameters worden gebruikt, worden ook opgegeven. Hiervoor moet een exemplaar van de Npgsql.NpgsqlDataSource
-klasse afzonderlijk worden geregistreerd bij de container voor afhankelijkheidsinjectie.
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();
U kunt rechtstreeks een Postgres Vector Store-exemplaar maken.
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);
Het is mogelijk om een directe verwijzing naar een benoemde verzameling te maken.
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");
Datamapping
De Postgres Vector Store-connector biedt een standaardtoewijzer voor het toewijzen van het gegevensmodel naar opslag. Deze mapper voert een directe conversie uit van de lijst met eigenschappen in het gegevensmodel naar de kolommen in Postgres.
Het is ook mogelijk om het standaardgedrag van mapper te overschrijven door een aangepaste mapper op te geven via de eigenschap PostgresVectorStoreRecordCollectionOptions<TRecord>.DictionaryCustomMapper
.
Eigenschapsnaam overschrijven
U kunt eigenschapsnamen overschrijven voor gebruik in opslag die afwijken van de eigenschapsnamen in het gegevensmodel.
De eigenschapsnaam wordt overschreven door de optie StoragePropertyName
in te stellen via de eigenschapskenmerken van het gegevensmodel of de definitie van het record.
Hier volgt een voorbeeld van een gegevensmodel met StoragePropertyName
ingesteld op de kenmerken en hoe dat wordt weergegeven in de Postgres-query.
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")
);
Binnenkort beschikbaar
Binnenkort meer informatie.
JDBC
De JDBC--connector kan worden gebruikt om verbinding te maken met Postgres.