다음을 통해 공유


Oracle 데이터베이스 벡터 저장소 커넥터 사용(미리 보기)

경고

Oracle 데이터베이스 벡터 저장소 기능은 미리 보기로 제공되며, 릴리스 전에 제한된 상황에서도 호환성이 손상되는 변경이 필요한 개선 사항이 계속 발생할 수 있습니다.

경고

의미 체계 커널 벡터 저장소 기능은 미리 보기 상태이며 릴리스 전에 제한된 상황에서도 호환성이 손상되는 변경이 필요한 개선 사항이 계속 발생할 수 있습니다.

경고

의미 체계 커널 벡터 저장소 기능은 미리 보기 상태이며 릴리스 전에 제한된 상황에서도 호환성이 손상되는 변경이 필요한 개선 사항이 계속 발생할 수 있습니다.

개요

Oracle 데이터베이스 벡터 저장소 커넥터를 사용하여 Oracle Database의 데이터에 액세스하고 관리할 수 있습니다. 커넥터의 특징은 다음과 같습니다.

기능 영역 Support
컬렉션이 다음으로 매핑됩니다. Oracle 데이터베이스 테이블
지원되는 키 속성 형식
  • short
  • 정수 (int)
  • long
  • 문자열
  • 가이드
지원되는 데이터 속성 형식
  • bool
  • byte
  • short
  • 정수 (int)
  • 십진수
  • long
  • 떠다니다
  • 더블
  • DateTime
  • DateTimeOffset
  • TimeSpan
  • char
  • char[]
  • byte[]
  • String
  • 가이드
  • 위 형식의 nullable 형식 및
지원되는 벡터 속성 형식
  • 읽기 전용 메모리<float>
  • 부동 소수 자릿수<포함>
  • float[]
  • ReadOnlyMemory<double>
  • double 포함<>
  • double[]
  • ReadOnlyMemory<short>
  • 짧은 포함<>
  • short[]
  • ReadOnlyMemory<바이트>
  • 바이<트 포함>
  • byte[]
  • BitArray
  • BinaryEmbedding
지원되는 인덱스 형식
  • 플랫(기본값)
  • HNSW
  • IVF (주)
지원되는 거리 함수
  • CosineDistance
    • FLOAT32, FLOAT64 및 INT8 벡터 기본값
  • CosineSimilarity
  • DotProductSimilarity
  • NegativeDotProductSimilarity
  • EuclideanDistance
  • EuclideanSquaredDistance
  • HammingDistance
    • BINARY 벡터 기본값
  • ManhattanDistance
  • JaccardSimilarity
    Jaccard 유사성을 사용하려면 DistanceFunction 문자열을 "JACCARD" 또는 "JACCARDSIMILARITY"(예: DistanceFunction = "JACCARDSIMILARITY")로 설정합니다. 이 값은 대/소문자를 구분합니다. 자카드 유사성에는 BINARY 숫자 형식 벡터가 필요합니다.
지원되는 필터 절
  • ==
  • !=
  • <
  • <=
  • >
  • >=
  • List.Contains()
    • 모델 속성이 목록에 있는지 확인하는 경우에만
레코드에서 0개, 1개 또는 여러 개의 벡터를 지원합니다. Yes
IsIndexed가 지원되는가요? Yes
IsFullTextSearchable이 지원되나요? 아니오
StorageName이 지원되는가요? Yes
HybridSearch가 지원되는가요? 아니오

중요합니다

벡터 데이터 검색에는 Oracle Database 23ai 이상이 필요합니다. 다른 모든 Oracle 커넥터 기능은 Oracle Database 19c 이상을 사용하여 사용할 수 있습니다.

기능 영역 Support
컬렉션이 다음으로 매핑됩니다. Oracle 데이터베이스 테이블
지원되는 키 속성 형식
  • 스트링
  • 정수 (int)
  • uuid.UUID
지원되는 데이터 속성 형식
  • 스트링
  • 정수 (int)
  • long
  • 떠다니다
  • bool
  • 십진수
  • byte
  • bytes
  • uuid.UUID
  • datetime.date
  • datetime.datetime
  • datetime.timedelta
  • list[str]
  • dict[str, Any]
  • list[dict[str, Any]]
지원되는 벡터 속성 형식
  • list[float]
  • numpy 배열
지원되는 인덱스 형식
  • HNSW
  • IVF (주)
지원되는 거리 함수
  • 코사인 거리
  • 유클리드 거리
  • 유클리드 제곱 거리
  • DOT_PROD
  • 해밍
  • 맨하탄
  • DEFAULT
지원되는 필터 절 비교, 부울 연산자, 문자열 메서드(startswith, endswith), between 및 datetime을 사용하는 Python 람다, 바인딩 변수를 사용하여 SQL로 변환
IsIndexed가 지원되는가요? Yes
IsFullTextSearchable이 지원되나요? 아니오
StoragePropertyName이 지원되는가요? Yes
HybridSearch가 지원되는가요? 아니오

중요합니다

벡터 데이터 검색에는 Oracle Database 23ai 이상이 필요합니다. 다른 모든 Oracle 커넥터 기능은 Oracle Database 19c 이상을 사용하여 사용할 수 있습니다. 또한 python-oracledb 3.3 이상이 필요합니다.

기능 영역 Support
지원되는 필터 절
  • AnyTagEqualTo
  • EqualTo
컬렉션이 다음으로 매핑됩니다. SQL 데이터베이스 테이블
지원되는 키 속성 형식
  • 짧음/Short
  • int/Integer
  • 롱/Long
  • String
  • UUID(범용 고유 식별자)
지원되는 데이터 속성 형식
  • 바이트(byte/Byte)
  • 짧음/Short
  • int/Integer
  • 롱/Long
  • float/Float (실수)
  • 더블/Double
  • 십진법/Decimal
  • DateTime
  • 오프셋데이터타임
  • 시간표시
  • String
  • UUID(범용 고유 식별자)
  • 목록<of all above types>
지원되는 벡터 속성 형식
  • String
  • 컬렉션<Float>
  • 목록<Float>
  • Float[]
  • float[]
지원되는 인덱스 형식
  • HNSW
  • IVF (주)
지원되는 거리 함수
  • DOT_PRODUCT
  • COSINE_SIMILARITY
  • 코사인 거리
  • 유클리드 거리
레코드에서 여러 벡터를 지원합니다. Yes
IsIndexed 지원? Yes
IsFullTextSearchable이 지원되나요? 아니오
StoragePropertyName이 지원되는가요? 아니요, 대신 사용 @JsonProperty
HybridSearch가 지원되는가요? 아니오

시작하기

Oracle Database Vector Store 커넥터 NuGet 패키지를 프로젝트에 추가합니다.

dotnet add package Oracle.VectorData --prerelease

의미 체계 커널에서 제공하는 확장 메서드를 IServiceCollection 사용하여 종속성 주입 컨테이너에 벡터 저장소를 추가할 수 있습니다. 이 경우 클래스의 Oracle.VectorData.OracleVectorStore 인스턴스도 컨테이너에 등록됩니다.

using Microsoft.SemanticKernel;
using Oracle.VectorData;
using Microsoft.Extensions.DependencyInjection;

// Using Kernel Builder.
var builder = Kernel.CreateBuilder();
builder.Services.AddOracleVectorStore("<connection string>");
using Microsoft.AspNetCore.Builder;
using Oracle.VectorData;
using Microsoft.Extensions.DependencyInjection;

// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOracleVectorStore("<connection string>");

매개 변수를 사용하지 않는 확장 메서드도 사용할 수 있습니다. 이를 위해서는 클래스의 인스턴스를 Oracle.ManagedDataAccess.Client.OracleDataSource 종속성 주입 컨테이너에 별도로 등록해야 합니다.

using Microsoft.SemanticKernel;
using Oracle.VectorData;
using Microsoft.Extensions.DependencyInjection;
using Oracle.ManagedDataAccess.Client;

// Using Kernel Builder.
var kernelBuilder = Kernel.CreateBuilder();
builder.Services.AddSingleton<OracleDataSource>(sp =>
{
    OracleDataSourceBuilder dataSourceBuilder = new("<connection string>");
    return dataSourceBuilder.Build();
});

builder.Services.AddOracleVectorStore();
using Microsoft.AspNetCore.Builder;
using Oracle.VectorData;
using Microsoft.Extensions.DependencyInjection;
using Oracle.ManagedDataAccess.Client;

// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSingleton<OracleDataSource>(sp =>
{
    OracleDataSourceBuilder dataSourceBuilder = new("<connection string>");
    return dataSourceBuilder.Build();
});

builder.Services.AddOracleVectorStore();

사용자 지정 데이터 원본 또는 연결 문자열을 사용하여 Oracle Database Vector Store 인스턴스를 직접 생성할 수 있습니다.

using Oracle.VectorData;
using Oracle.ManagedDataAccess.Client;

OracleDataSourceBuilder dataSourceBuilder = new("<connection string>");
var dataSource = dataSourceBuilder.Build();

var connection = new OracleVectorStore(dataSource);
using Oracle.VectorData;

var connection = new OracleVectorStore("<connection string>");

사용자 지정 데이터 원본 또는 연결 문자열을 사용하여 명명된 컬렉션에 대한 직접 참조를 생성할 수 있습니다.

using Oracle.VectorData;
using Oracle.ManagedDataAccess.Client;

OracleDataSourceBuilder dataSourceBuilder = new("<connection string>");
var dataSource = dataSourceBuilder.Build();

var collection = new OracleCollection<string, Hotel>(dataSource, "skhotels");
using Oracle.VectorData;

var collection = new OracleCollection<string, Hotel>("<connection string>", "skhotels");

시작하기

Oracle Database Vector Store 커넥터를 설치합니다.

pip install semantic-kernel[oracledb]

OracleSettings, OracleStore 및 OracleCollection 클래스를 가져옵니다.

from semantic_kernel.connectors.oracle import OracleSettings, OracleStore, OracleCollection

OracleSettings 클래스는 Oracle Database에 대한 비동기 연결을 만드는 데 필요한 구성을 보유합니다. OracleStore 클래스는 데이터를 저장하고 검색하는 데 사용되며 OracleCollection 클래스는 컬렉션 내의 레코드를 관리하고 검색합니다. 이러한 클래스를 사용하여 Oracle Vector Store를 설정합니다.

# Read the environment settings
oracle_settings = OracleSettings()

# Create a connection pool
pool = await oracle_settings.create_connection_pool(
    wallet_location=<wallet_location>,
    wallet_password=<wallet_password>)

# Create an Oracle Vector Store
store = OracleStore(
    connection_pool=pool,
)

# Get a collection
collection = await store.get_collection(
    record_type=HotelSample,
    collection_name=Hotel,
    embedding_generator=text_embedding)

# Create a collection if it does not exist
await collection.ensure_collection_exists()

시작하기

Oracle 데이터베이스 벡터 저장소 커넥터를 설정합니다.

// Copyright (c) Microsoft. All rights reserved.
package com.microsoft.semantickernel.samples.syntaxexamples.memory;

import com.microsoft.semantickernel.data.jdbc.JDBCVectorStore;
import com.microsoft.semantickernel.data.jdbc.JDBCVectorStoreOptions;
import com.microsoft.semantickernel.data.jdbc.JDBCVectorStoreRecordCollection;
import com.microsoft.semantickernel.data.jdbc.JDBCVectorStoreRecordCollectionOptions;
import com.microsoft.semantickernel.data.jdbc.oracle.OracleVectorStoreQueryProvider;
import com.microsoft.semantickernel.data.vectorstorage.VectorStoreRecordCollection;
import com.microsoft.semantickernel.samples.documentationexamples.data.index.Hotel;
import java.sql.SQLException;
import java.util.Collections;
import oracle.jdbc.datasource.impl.OracleDataSource;

public class VectorStoreWithOracle {

    public static void main(String[] args) throws SQLException {
        System.out.println("==============================================================");
        System.out.println("============== Oracle Vector Store Example ===================");
        System.out.println("==============================================================");

        // Configure the data source
        OracleDataSource dataSource = new OracleDataSource();
        dataSource.setURL("jdbc:oracle:thin:@localhost:1521/FREEPDB1");
        dataSource.setUser("scott");
        dataSource.setPassword("tiger");

        // Build a query provider
        OracleVectorStoreQueryProvider queryProvider = OracleVectorStoreQueryProvider.builder()
            .withDataSource(dataSource)
            .build();

        // Build a vector store
        JDBCVectorStore vectorStore = JDBCVectorStore.builder()
            .withDataSource(dataSource)
            .withOptions(JDBCVectorStoreOptions.builder()
                .withQueryProvider(queryProvider)
                .build())
            .build();

        // Get a collection from the vector store
        VectorStoreRecordCollection<String, Hotel> collection = vectorStore.getCollection(
            "skhotels",
            JDBCVectorStoreRecordCollectionOptions.<Hotel>builder()
                .withRecordClass(Hotel.class)
                .build());

        // Create the collection if it doesn't exist yet.
        collection.createCollectionAsync().block();

        collection.upsertAsync(new Hotel("1",
            "HotelOne",
            "Desc for HotelOne",
            Collections.emptyList(), Collections.emptyList()),
            null)
            .block();

    }

}

데이터 매핑

Oracle Database Vector Store 커넥터는 데이터 모델에서 스토리지로 데이터를 매핑할 때 기본 매퍼를 제공합니다. 이 매퍼는 데이터 모델 속성 목록을 Oracle 데이터베이스 열로 직접 변환하여 스토리지 스키마로 변환합니다.

Oracle Database Vector Store 커넥터는 데이터 모델 주석 및 레코드 정의를 지원합니다. 주석을 사용하여 인덱스 및 데이터베이스 열 매핑을 만들기 위해 데이터 모델에 정보를 제공할 수 있습니다. 레코드 정의를 사용하여 데이터 모델과 별도로 정보를 정의하고 제공할 수 있습니다.

다음 표에서는 Oracle Database와 C#간의 기본 기본 키 데이터 형식 매핑을 보여 냅니다.

C# 데이터 형식 데이터베이스 유형
short/int16 NUMBER(5)
int/int32 NUMBER(10)
long/int64 NUMBER(19)
문자열 NVARCHAR2(2000)
가이드 RAW(16)

다음 표에서는 nullable 형식을 비롯한 기본 데이터 속성 형식 매핑을 보여 있습니다.

C# 데이터 형식 데이터베이스 유형
bool Oracle Database 23ai 이상용 BOOLEAN
이전 버전에 대한 NUMBER(1)
byte NUMBER(3)
short/int16 NUMBER(5)
int/int32 NUMBER(10)
십진수 NUMBER(18,2)
long/int64 NUMBER(19)
떠다니다 BINARY_FLOAT
더블 BINARY_DOUBLE (바이너리_더블)
DateTime TIMESTAMP(7)
DateTimeOffset 타임스탬프(7) 표준 시간대
TimeSpan INTERVAL 일(8) TO 초(7)
char NVARCHAR2(1)
char[] NVARCHAR2(2000)
byte[] RAW(2000)
문자열 NVARCHAR2(2000)
가이드 RAW(16)

Oracle Database 23ai부터 데이터베이스 벡터를 .NET에 매핑할 수 있습니다. 데이터 형식입니다. 여러 벡터 열이 지원됩니다. 다음 표에서는 nullable 형식을 비롯한 기본 벡터 속성 형식 매핑을 보여 있습니다.

C# 데이터 형식 데이터베이스 유형
  • ReadOnlyMemory<바이트>
  • <System.Byte 포함>
  • BinaryEmbedding
  • 바이<트 포함>
  • byte[]
  • System.Byte[]
  • BitArray
벡터(차원, 이진)
  • ReadOnlyMemory<short>
  • ReadOnlyMemory<System.Int16>
  • 짧은 포함<>
  • <System.Int16 포함>
  • short[]
  • System.Int16[]
VECTOR(차원, INT8)
  • ReadOnlyMemory<double>
  • ReadOnlyMemory<System.Double>
  • <System.Double 포함>
  • double 포함<>
  • double[]
  • System.Double[]
VECTOR(차원, FLOAT64)
  • 읽기 전용 메모리<float>
  • ReadOnlyMemory<System.Float>
  • 부동 소수 자릿수<포함>
  • <System.Float 포함>
  • float[]
  • System.Float[]
VECTOR(차원, FLOAT32)

속성 이름 재정의

데이터 속성 및 벡터 속성의 경우 데이터 모델 속성 이름과 다른 스토리지에서 사용할 이름을 재정의할 수 있습니다. 속성 이름 재정의는 데이터 모델 속성 또는 레코드 정의에서 옵션을 설정할 StorageName 때 발생합니다.

다음은 코드 샘플이 설정된 데이터 모델 StorageName 및 Oracle SQL 명령에 표시되는 방법입니다.

using Microsoft.Extensions.VectorData;

public class Hotel
{
    [VectorStoreKey]
    public long HotelId { get; set; }

    [VectorStoreData(StorageName = "hotel_name")]
    public string? HotelName { get; set; }

    [VectorStoreData(StorageName = "hotel_description")]
    public string? Description { get; set; }

    [VectorStoreVector(Dimensions: 384, DistanceFunction = DistanceFunction.CosineDistance)]
    public ReadOnlyMemory<float>? DescriptionEmbedding { get; set; }
}
CREATE TABLE "MYSCHEMA"."Hotels"
  ("HotelId" NUMBER(10),
   "hotel_name" NVARCHAR2(2000),
   "hotel_description" NVARCHAR2(2000),
   "DescriptionEmbedding" VECTOR(384, FLOAT32),
   PRIMARY KEY ( "HotelId" )
);

더 알아보세요

자세한 내용은 다음 Oracle Database Vector Store 커넥터 리소스를 참조하세요.

데이터 매핑

Oracle Database Vector Store 커넥터는 데이터 모델에서 스토리지로 매핑할 때 기본 매퍼를 제공합니다. 이 매퍼는 데이터 모델의 속성 목록을 Oracle 데이터베이스 열로 직접 변환하여 스토리지 스키마로 변환합니다.

Oracle Database Vector Store 커넥터는 데이터 모델 주석 및 레코드 정의를 지원합니다. 주석을 사용하여 인덱스 및 데이터베이스 열 매핑을 만들기 위해 데이터 모델에 정보를 제공할 수 있습니다. 레코드 정의를 사용하여 데이터 모델과 별도로 정보를 정의하고 제공할 수 있습니다.

다음 표에서는 Oracle Database와 Python 간의 기본 기본 키 데이터 형식 매핑을 보여줍니다.

Python 형식 Oracle SQL 형식
스트링 VARCHAR(n), 형식 옵션에서 str(n)를 사용하면 Oracle VARCHAR 길이가 n으로 설정됩니다. n을 지정하지 않으면 기본 길이는 4000입니다.
정수 (int) NUMBER(10)
byte NUMBER(3)
long NUMBER(19)
십진수 번호
떠다니다 BINARY_FLOAT
더블 BINARY_DOUBLE (바이너리_더블)
bool BOOLEAN
UUID(범용 고유 식별자) RAW(16)
date DATE
datetime.datetime TIMESTAMP
datetime.timedelta 일(day)부터 초(second)까지의 간격
Clob CLOB는 네이티브 Python 형식이 아니라 명시적으로 지정할 수 있습니다.
덩어리 BLOB은 네이티브 Python 형식이 아니라 명시적으로 지정할 수 있습니다.
list[str], dict[str, Any] JSON
list[dict[str, Any]] JSON
bytes RAW(2000)

Oracle Database 23ai부터 데이터베이스 벡터를 Python 데이터 형식에 매핑할 수 있습니다. 여러 벡터 열이 지원됩니다. 다음 표에서는 기본 벡터 속성 형식 매핑을 보여줍니다.

Python 형식 데이터베이스 유형
uint8 BINARY
int8 INT8
떠다니다 FLOAT64
float32 FLOAT32
float64 FLOAT64
이진법 BINARY

더 알아보세요

자세한 내용은 다음 리소스를 참조하세요.

데이터 매핑

Oracle Database Vector Store 커넥터는 데이터 모델에서 스토리지로 데이터를 매핑할 때 기본 매퍼를 제공합니다. 이 매퍼는 데이터 모델 속성 목록을 Oracle 데이터베이스 열로 직접 변환하여 스토리지 스키마로 변환합니다.

Oracle Database Vector Store 커넥터는 데이터 모델 주석 및 레코드 정의를 지원합니다. 주석을 사용하여 인덱스 및 데이터베이스 열 매핑을 만들기 위해 데이터 모델에 정보를 제공할 수 있습니다. 레코드 정의를 사용하여 데이터 모델과 별도로 정보를 정의하고 제공할 수 있습니다.

Oracle Database와 Java 간 기본 키 데이터 형식의 기본 매핑과 ResultSet에서 데이터를 검색하기 위한 해당 메서드는 다음 표에 나와 있습니다.

Java 형식 데이터베이스 유형 ResultSet Getter 메서드
바이트(byte/Byte) NUMBER(3) resultSet.getByte(name)
짧음/Short NUMBER(5) resultSet.getShort(name)
int/Integer NUMBER(10) resultSet.getInt(name)
롱/Long NUMBER(19) resultSet.getLong(name)
String NVARCHAR2(2000) resultSet.getString(name)
UUID(범용 고유 식별자) RAW(16) resultSet.getObject(name, java_type)

다음 표는 데이터를 가져오는 관련 메서드와 함께 기본 데이터 속성 유형 매핑을 보여 줍니다.ResultSet

Java 형식 데이터베이스 유형 ResultSet Getter 메서드
불리언 BOOLEAN resultSet.getByte(name)
바이트(byte/Byte) NUMBER(3) resultSet.getByte(name)
byte[] RAW(2000) resultSet.getBytes(name)
짧음/Short NUMBER(5) resultSet.getShort(name)
int/Integer NUMBER(10) resultSet.getInt(name)
롱/Long NUMBER(19) resultSet.getLong(name)
float/Float (실수) BINARY_FLOAT resultSet.getFloat(name)
더블/Double BINARY_DOUBLE (바이너리_더블) resultSet.getDouble(name)
BigDecimal NUMBER(18,2) resultSet.getBigDecimal(name)
OffsetDateTime 타임스탬프(7) 표준 시간대 resultSet.getTIMESTAMPTZ(name).offsetDateTimeValue()
String CLOB/NVARCHAR2(%s) resultSet.getString(name)
UUID(범용 고유 식별자) RAW(16) resultSet.getObject(name, java_type)
목록<T> JSON resultSet.getObject(name, java_type) 사용 ojdbc-extensions-jackson-oson

Oracle Database 23ai부터 데이터베이스 벡터를 Java 데이터 형식에 매핑할 수 있습니다. 여러 벡터 열이 지원됩니다. 다음 표에서는 기본 벡터 속성 형식 매핑을 보여줍니다.

Java 형식 데이터베이스 유형
String 벡터(%d, FLOAT32)
컬렉션<Float> 벡터(%d, FLOAT32)
목록<Float> 벡터(%d, FLOAT32)
Float[] 벡터(%d, FLOAT32)
float[] 벡터(%d, FLOAT32)