Delen via


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
  • kort
  • Int
  • lang
  • koord
  • Guid
Ondersteunde gegevenseigenschapstypen
  • Bool
  • kort
  • Int
  • lang
  • drijven
  • dubbel
  • decimaal
  • snaar
  • Datum/tijd
  • DateTimeOffset
  • Guid
  • byte[]
  • bool Enumerables
  • korte opsommingen
  • int Enumerables
  • lange enumerables
  • float Enumerables
  • dubbele Enumerables
  • decimaal enumerables
  • string enumerables
  • Datum/tijd-opsomlijsten
  • DateTimeOffset Enumerables
  • Guid Enumerables
Ondersteunde vectoreigenschappentypen ReadOnlyMemory<float>
Ondersteunde indextypen Hnsw
Ondersteunde afstandsfuncties
  • CosineDistance
  • CosineSimilariteit
  • DotProductSimilarity
  • EuclideanDistance
  • ManhattanDistance
Ondersteunde filtervoorwaarden
  • AnyTagEqualTo
  • EqualTo
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.