다음을 통해 공유


Postgres Vector Store 커넥터 사용(미리 보기)

경고

의미 체계 커널 벡터 저장소 기능은 미리 보기 상태이며, 릴리스 전에 제한된 상황에서 중대한 변경이 필요한 개선이 있을 수 있습니다.

개요

Postgres Vector Store 커넥터를 사용하여 Postgres의 데이터에 액세스하고 관리할 수 있습니다. 커넥터의 특징은 다음과 같습니다.

기능 영역 지원
컬렉션이 다음으로 매핑됩니다. Postgres 테이블
지원되는 키 속성 형식
  • 짧은
  • int
  • 오래
  • 문자열
  • Guid(Guid)
지원되는 데이터 속성 형식
  • bool
  • 짧은
  • int
  • 오래
  • 뜨다
  • 더블
  • 십진법
  • 문자열
  • 날짜 및 시간
  • DateTimeOffset
  • Guid(Guid)
  • byte[]
  • bool 열거형
  • 짧은 열거형
  • int 열거 가능형
  • long 열거형
  • 부동소수점 열거 가능
  • 두 배형 열거 가능 항목
  • 10진수 열거형
  • 문자열 열거형
  • DateTime 열거 가능
  • DateTimeOffset 열거 가능
  • Guid 열거 가능
지원되는 벡터 속성 형식 읽기 전용 메모리<float>
지원되는 인덱스 형식 Hnsw
지원되는 거리 함수
  • CosineDistance
  • 코사인 유사도
  • DotProductSimilarity
  • EuclideanDistance
  • ManhattanDistance
지원되는 필터 절
  • AnyTagEqualTo
  • EqualTo
레코드에서 여러 벡터를 지원합니다.
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에 연결할 수 있습니다.