Delen via


De Oracle Database Vector Store-connector gebruiken (preview)

Waarschuwing

De oracle Database Vector Store-functionaliteit is in preview en verbeteringen waarvoor wijzigingen die fouten veroorzaken, kunnen nog steeds optreden in beperkte omstandigheden vóór de release.

Waarschuwing

De Semantische Kernel Vector Store-functionaliteit is in preview en verbeteringen waarvoor wijzigingen die fouten veroorzaken, kunnen nog steeds in beperkte omstandigheden optreden voordat ze worden uitgebracht.

Waarschuwing

De Semantische Kernel Vector Store-functionaliteit is in preview en verbeteringen waarvoor wijzigingen die fouten veroorzaken, kunnen nog steeds in beperkte omstandigheden optreden voordat ze worden uitgebracht.

Overzicht

De Oracle Database Vector Store-connector kan worden gebruikt voor toegang tot en beheer van gegevens in Oracle Database. De verbindingslijn heeft de volgende kenmerken.

Functiegebied Support
Verzamelingstoewijzingen aan Oracle-databasetabel
Ondersteunde sleuteleigenschapstypen
  • short
  • int
  • lang
  • touw
  • Guid
Ondersteunde gegevenseigenschapstypen
  • bool
  • byte
  • short
  • int
  • decimal
  • lang
  • zweven
  • dubbel
  • DateTime
  • DateTimeOffset
  • TimeSpan
  • karakter
  • char[]
  • byte[]
  • String
  • Guid
  • en null-type van de bovenstaande typen
Ondersteunde vectoreigenschappentypen
  • ReadOnlyMemory<float>
  • Float voor insluiten<>
  • float[]
  • ReadOnlyMemory<double>
  • Dubbel insluiten<>
  • double[]
  • ReadOnlyMemory<short>
  • Kort insluiten<>
  • short[]
  • ReadOnlyMemory<byte>
  • Byte insluiten<>
  • byte[]
  • BitArray
  • BinaryEmbedding
Ondersteunde indextypen
  • Plat (standaard)
  • HNSW
  • IVF
Ondersteunde afstandsfuncties
  • CosineDistance
    • FLOAT32, FLOAT64 en STANDAARD INT8-vector
  • CosineSimilariteit
  • DotProductsimilarity
  • NegativeDotProductsimilarity
  • EuclideanDistance
  • EuclideanSquaredDistance
  • HammingDistance
    • BINARY vector standaardinstelling
  • ManhattanDistance
  • JaccardSimilariteit
    Als u de Jaccard-gelijkenis wilt gebruiken, stelt u de DistanceFunction-tekenreeks in op "JACCARD" of "JACCARDSIMILARITY" (bijvoorbeeld DistanceFunction = "JACCARDSIMILARITY"). Deze waarde is hoofdlettergevoelig. Jaccard-gelijkenis vereist vectoren in binaire numerieke notatie.
Ondersteunde filtercomponenten
  • ==
  • !=
  • <
  • <=
  • >
  • >=
  • List.Contains()
    • Alleen bij het controleren of de modeleigenschap zich in de lijst bevindt
Ondersteunt nul, één of meerdere vectoren in een record Yes
WordtIndexed ondersteund? Yes
WordtFullTextSearchable ondersteund? Nee.
Ondersteunde StorageName? Yes
HybridSearch ondersteund? Nee.

Belangrijk

Voor vectorgegevenszoekopdrachten is Oracle Database 23ai of hoger vereist. Alle andere Oracle-connectorfuncties zijn beschikbaar met Oracle Database 19c of hoger.

Functiegebied Support
Verzamelingstoewijzingen aan Een Oracle Database-tabel
Ondersteunde sleuteleigenschapstypen
  • Str
  • int
  • uuid.UUID
Ondersteunde gegevenseigenschapstypen
  • Str
  • int
  • lang
  • zweven
  • bool
  • decimal
  • byte
  • bytes
  • uuid.UUID
  • datetime.date
  • datetime.datetime
  • datetime.timedelta
  • list[str]
  • dict[str, Any]
  • list[dict[str, Any]]
Ondersteunde vectoreigenschappentypen
  • list[float]
  • NumPy-array
Ondersteunde indextypen
  • HNSW
  • IVF
Ondersteunde afstandsfuncties
  • cosinusafstand
  • Euclidische afstand
  • Euclidische_kwadraatafstand
  • DOT_PROD
  • HAMMING
  • MANHATTAN
  • DEFAULT
Ondersteunde filtercomponenten Python lambdas met vergelijkingen, Booleaanse operatoren, tekenreeksmethoden (startswith, endswith), tussen en datetime, vertaald naar SQL met bindvariabelen
WordtIndexed ondersteund? Yes
WordtFullTextSearchable ondersteund? Nee.
Wordt "StoragePropertyName" ondersteund? Yes
HybridSearch ondersteund? Nee.

Belangrijk

Voor vectorgegevenszoekopdrachten is Oracle Database 23ai of hoger vereist. Alle andere Oracle-connectorfuncties zijn beschikbaar met Oracle Database 19c of hoger. Python-oracledb 3.3 of hoger is ook vereist.

Functiegebied Support
Ondersteunde filtercomponenten
  • AnyTagEqualTo
  • EqualTo
Verzamelingstoewijzingen aan SQL-database-tabel
Ondersteunde sleuteleigenschapstypen
  • kort/Kort
  • int/integer
  • lang/lang
  • String
  • UUID (universeel unieke identificator)
Ondersteunde gegevenseigenschapstypen
  • byte/Byte
  • kort/Kort
  • int/integer
  • lang/lang
  • float/Float
  • dubbel/dubbel
  • decimaal/decimaal
  • DateTime
  • OffsetDatumTijd
  • Tijdstempel
  • String
  • UUID (universeel unieke identificator)
  • Lijst<of all above types>
Ondersteunde vectoreigenschappentypen
  • String
  • Collectie<Float>
  • Lijst<Float>
  • Float[]
  • float[]
Ondersteunde indextypen
  • HNSW
  • IVF
Ondersteunde afstandsfuncties
  • DOT_PRODUCT
  • COSINE_SIMILARITY
  • cosinusafstand
  • Euclidische afstand
Ondersteunt meerdere vectoren in een record Yes
Ondersteunt IsIndexed? Yes
WordtFullTextSearchable ondersteund? Nee.
Wordt "StoragePropertyName" ondersteund? Nee, gebruik @JsonProperty in plaats daarvan
HybridSearch ondersteund? Nee.

Aan de slag

Voeg het NuGet-pakket van de Oracle Database Vector Store-connector toe aan uw project.

dotnet add package Oracle.VectorData --prerelease

U kunt het vectorarchief toevoegen aan de IServiceCollection container voor afhankelijkheidsinjectie met behulp van extensiemethoden van Semantic Kernel. In dit geval wordt een exemplaar van de Oracle.VectorData.OracleVectorStore klasse ook geregistreerd bij de container.

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>");

Extensiemethoden die geen parameters gebruiken, zijn ook beschikbaar. Hiervoor moet een exemplaar van de Oracle.ManagedDataAccess.Client.OracleDataSource klasse afzonderlijk worden geregistreerd bij de container voor afhankelijkheidsinjectie.

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();

U kunt een Oracle Database Vector Store-exemplaar rechtstreeks maken met een aangepaste gegevensbron of met een verbindingsreeks.

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>");

Het is mogelijk om een directe verwijzing te maken naar een benoemde verzameling met een aangepaste gegevensbron of met een verbindingsreeks.

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");

Aan de slag

Installeer de Oracle Database Vector Store connector:

pip install semantic-kernel[oracledb]

Importeer de klassen OracleSettings, OracleStore en OracleCollection.

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

De OracleSettings-klasse bevat de configuratie die is vereist voor het maken van een asynchrone verbinding met Oracle Database. De OracleStore-klasse wordt gebruikt voor het opslaan en ophalen van gegevens, terwijl de OracleCollection-klasse records in een verzameling beheert en doorzoekt. Gebruik deze klassen om de Oracle Vector Store in te stellen.

# 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()

Aan de slag

De Vector Store-connector van de Oracle Database instellen.

// 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();

    }

}

Gegevenstoewijzing

De Oracle Database Vector Store-connector biedt een standaardtoewijzingsfunctie bij het toewijzen van gegevens uit het gegevensmodel aan opslag. Deze mapper voert een directe conversie uit van de lijst met eigenschappen van het gegevensmodel naar de Oracle-databasekolommen om te converteren naar het opslagschema.

De Oracle Database Vector Store-connector ondersteunt aantekeningen en recorddefinities van gegevensmodellen. Met behulp van aantekeningen kan de informatie worden verstrekt aan het gegevensmodel voor het maken van indexen en databasekolomtoewijzing. Met behulp van recorddefinities kunnen de gegevens afzonderlijk van het gegevensmodel worden gedefinieerd en opgegeven.

In de volgende tabel ziet u de standaardtoewijzing van het gegevenstype primaire sleutel tussen Oracle Database en C#:

C#-gegevenstype Databasetype
short/int16 GETAL(5)
int/int32 GETAL(10)
long/int64 GETAL(19)
touw NVARCHAR2(2000)
Guid RAW(16)

In de volgende tabel ziet u de standaardtoewijzing van het gegevenseigenschapstype, inclusief null-typen:

C#-gegevenstype Databasetype
bool Booleaanse waarde voor Oracle Database 23ai en hoger
GETAL(1) voor eerdere versies
byte GETAL(3)
short/int16 GETAL(5)
int/int32 GETAL(10)
decimal GETAL(18;2)
long/int64 GETAL(19)
zweven Binair drijvend
dubbel BINARY_DOUBLE
DateTime TIMESTAMP(7)
DateTimeOffset TIMESTAMP(7) MET TIJDZONE
TimeSpan INTERVALDAG(8) TOT SECONDE(7)
karakter NVARCHAR2(1)
char[] NVARCHAR2(2000)
byte[] RAW(2000)
touw NVARCHAR2(2000)
Guid RAW(16)

Vanaf Oracle Database 23ai kunnen databasevectoren worden toegewezen aan .NET. gegevenstypen. Meerdere vectorkolommen worden ondersteund. In de volgende tabel ziet u de standaardtoewijzing van vectoreigenschappen, inclusief null-typen:

C#-gegevenstype Databasetype
  • ReadOnlyMemory<byte>
  • System.Byte insluiten<>
  • BinaryEmbedding
  • Byte insluiten<>
  • byte[]
  • System.Byte[]
  • BitArray
VECTOR(dimensies, BINAIR)
  • ReadOnlyMemory<short>
  • ReadOnlyMemory<System.Int16>
  • Kort insluiten<>
  • System.Int16 insluiten<>
  • short[]
  • System.Int16[]
VECTOR(dimensies, INT8)
  • ReadOnlyMemory<double>
  • ReadOnlyMemory<System.Double>
  • Embedding<System.Double>
  • Dubbel insluiten<>
  • double[]
  • System.Double[]
VECTOR(dimensies, FLOAT64)
  • ReadOnlyMemory<float>
  • ReadOnlyMemory<System.Float>
  • Float voor insluiten<>
  • System.Float insluiten<>
  • float[]
  • System.Float[]
VECTOR(dimensies, FLOAT32)

Eigenschapsnaam overschrijven

Voor gegevenseigenschappen en vectoreigenschappen kunt u namen overschrijven die moeten worden gebruikt in de opslag die afwijken van de namen van de eigenschappen van het gegevensmodel. De naam van de eigenschap wordt overschreven wanneer u de StorageName optie instelt in de eigenschappen van het gegevensmodel of de recorddefinitie.

Hier volgt een gegevensmodel met StorageName setcodevoorbeelden en hoe dit wordt weergegeven in een Oracle SQL-opdracht.

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" )
);

Meer informatie

Raadpleeg de volgende resources voor de Oracle Database Vector Store-connector voor meer informatie:

Datamapping

De Oracle Database Vector Store-connector biedt een standaardtoewijzingsfunctie bij het toewijzen van het gegevensmodel aan opslag. Deze mapper voert een directe conversie uit van de lijst met eigenschappen in het gegevensmodel naar de Oracle Database-kolommen om te converteren naar het opslagschema.

De Oracle Database Vector Store-connector ondersteunt aantekeningen en recorddefinities van gegevensmodellen. Met behulp van aantekeningen kan de informatie worden verstrekt aan het gegevensmodel voor het maken van indexen en databasekolomtoewijzing. Met behulp van recorddefinities kunnen de gegevens afzonderlijk van het gegevensmodel worden gedefinieerd en opgegeven.

In de volgende tabel wordt de standaard gegevenssoort-toewijzing van primaire sleutels tussen Oracle Database en Python weergegeven.

Python-type Oracle SQL-type
Str VARCHAR(n), Met behulp van str(n) in de typeoptie stelt u de Oracle VARCHAR-lengte in op n. Als n niet is opgegeven, is de standaardlengte 4000.
int GETAL(10)
byte GETAL(3)
lang GETAL(19)
decimal GETAL
zweven Binair drijvend
dubbel BINARY_DOUBLE
bool BOOLEAN
UUID (universeel unieke identificator) RAW(16)
date DATE
datetime.datetime TIMESTAMP
datetime.timedelta INTERVAL VAN DAG TOT SECONDE
clob CLOB, kan expliciet worden opgegeven, niet een systeemeigen Python-type
Druppel BLOB, kan expliciet worden opgegeven, niet een systeemeigen Python-type
list[str], dict[str, Any] JSON
list[dict[str, Any]] JSON
bytes RAW(2000)

Vanaf Oracle Database 23ai kunnen databasevectoren worden toegewezen aan Python-gegevenstypen. Meerdere vectorkolommen worden ondersteund. In de volgende tabel ziet u de standaardtoewijzing van vector-eigenschapstypen:

Python-type Databasetype
uint8 BINARY
int8 INT8
zweven FLOAT64
float32 FLOAT32
float64 FLOAT64
binair BINARY

Meer informatie

Raadpleeg de volgende bronnen voor meer informatie:

Gegevenstoewijzing

De Oracle Database Vector Store-connector biedt een standaardtoewijzingsfunctie bij het toewijzen van gegevens uit het gegevensmodel aan opslag. Deze mapper voert een directe conversie uit van de lijst met eigenschappen van het gegevensmodel naar de Oracle-databasekolommen om te converteren naar het opslagschema.

De Oracle Database Vector Store-connector ondersteunt aantekeningen en recorddefinities van gegevensmodellen. Met behulp van aantekeningen kan de informatie worden verstrekt aan het gegevensmodel voor het maken van indexen en databasekolomtoewijzing. Met behulp van recorddefinities kunnen de gegevens afzonderlijk van het gegevensmodel worden gedefinieerd en opgegeven.

In de volgende tabel ziet u de standaardtoewijzing van het gegevenstype primaire sleutel tussen Oracle Database en Java, samen met de bijbehorende methoden voor het ophalen van gegevens uit een ResultSet:

Java type Databasetype Getter-methode voor ResultSet
byte/Byte GETAL(3) resultSet.getByte(name)
kort/Kort GETAL(5) resultSet.getShort(name)
int/integer GETAL(10) resultSet.getInt(name)
lang/lang GETAL(19) resultSet.getLong(name)
String NVARCHAR2(2000) resultSet.getString(name)
UUID (universeel unieke identificator) RAW(16) resultSet.getObject(name, java_type)

In de volgende tabel ziet u de standaardtoewijzing van het gegevenseigenschapstype, samen met de bijbehorende methoden voor het ophalen van gegevens uit een ResultSet:

Java type Databasetype Getter-methode voor ResultSet
booleaan BOOLEAN resultSet.getByte(name)
byte/Byte GETAL(3) resultSet.getByte(name)
byte[] RAW(2000) resultSet.getBytes(name)
kort/Kort GETAL(5) resultSet.getShort(name)
int/integer GETAL(10) resultSet.getInt(name)
lang/lang GETAL(19) resultSet.getLong(name)
float/Float Binair drijvend resultSet.getFloat(name)
dubbel/dubbel BINARY_DOUBLE resultSet.getDouble(name)
BigDecimal GETAL(18;2) resultSet.getBigDecimal(name)
OffsetDateTime TIMESTAMP(7) MET TIJDZONE resultSet.getTIMESTAMPTZ(name).offsetDateTimeValue()
String CLOB/NVARCHAR2(%s) resultSet.getString(name)
UUID (universeel unieke identificator) RAW(16) resultSet.getObject(name, java_type)
Lijst<T> JSON resultSet.getObject(name, java_type) Met behulp van ojdbc-extensions-jackson-oson

Vanaf Oracle Database 23ai kunnen databasevectoren worden toegewezen aan Java-gegevenstypen. Meerdere vectorkolommen worden ondersteund. In de volgende tabel ziet u de standaardtoewijzing van vector-eigenschapstypen:

Java type Databasetype
String VECTOR(%d, FLOAT32)
Collectie<Float> VECTOR(%d, FLOAT32)
Lijst<Float> VECTOR(%d, FLOAT32)
Float[] VECTOR(%d, FLOAT32)
float[] VECTOR(%d, FLOAT32)