Postgres Vector Store 커넥터 사용(미리 보기)
경고
의미 체계 커널 벡터 저장소 기능은 미리 보기 상태이며, 릴리스 전에 제한된 상황에서 중대한 변경이 필요한 개선이 있을 수 있습니다.
개요
Postgres Vector Store 커넥터를 사용하여 Postgres의 데이터에 액세스하고 관리할 수 있습니다. 커넥터의 특징은 다음과 같습니다.
기능 영역 | 지원 |
---|---|
컬렉션이 다음으로 매핑됩니다. | Postgres 테이블 |
지원되는 키 속성 형식 |
|
지원되는 데이터 속성 형식 |
|
지원되는 벡터 속성 형식 | 읽기 전용 메모리<float> |
지원되는 인덱스 형식 | Hnsw |
지원되는 거리 함수 |
|
지원되는 필터 절 |
|
레코드에서 여러 벡터를 지원합니다. | 예 |
IsFilterable이 지원되는가요? | 아니요 |
IsFullTextSearchable이 지원되나요? | 아니요 |
StoragePropertyName이 지원되는가요? | 예 |
시작
Postgres Vector Store 커넥터 NuGet 패키지를 프로젝트에 추가합니다.
dotnet add package Microsoft.SemanticKernel.Connectors.Postgres --prerelease
의미 체계 커널에서 제공하는 확장 메서드를 사용하여 IServiceCollection
종속성 주입 컨테이너에 벡터 저장소를 추가할 수 있습니다.
이 경우 벡터 기능을 사용하도록 설정된 Npgsql.NpgsqlDataSource
클래스의 인스턴스도 컨테이너에 등록됩니다.
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;");
매개 변수를 사용하지 않는 확장 메서드도 제공됩니다. 이를 위해서는 Npgsql.NpgsqlDataSource
클래스의 인스턴스를 종속성 주입 컨테이너에 별도로 등록해야 합니다.
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();
Postgres Vector Store 인스턴스를 직접 생성할 수 있습니다.
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);
명명된 컬렉션에 대한 직접 참조를 생성할 수 있습니다.
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");
데이터 매핑
Postgres Vector Store 커넥터는 데이터 모델에서 스토리지로 매핑할 때 기본 매퍼를 제공합니다. 이 매퍼는 데이터 모델의 속성 목록을 Postgres의 열로 직접 변환합니다.
PostgresVectorStoreRecordCollectionOptions<TRecord>.DictionaryCustomMapper
속성을 통해 사용자 지정 매퍼를 제공하여 기본 매퍼 동작을 재정의할 수도 있습니다.
속성 이름 재정의
데이터 모델의 속성 이름과 다른 스토리지에서 사용할 속성 이름을 재정의할 수 있습니다.
속성 이름 재정의는 데이터 모델 속성 특성 또는 레코드 정의를 통해 StoragePropertyName
옵션을 설정하여 수행됩니다.
다음은 특성에 StoragePropertyName
설정된 데이터 모델의 예와 Postgres 쿼리에 표시되는 방법입니다.
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")
);
곧 출시 예정
추가 정보는 곧 제공될 예정입니다.
JDBC
JDBC 커넥터를 사용하여 Postgres에 연결할 수 있습니다.