Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aviso
A funcionalidade do Repositório de Vetores do Banco de Dados Oracle está em versão prévia e melhorias que exigem alterações significativas ainda podem ocorrer em circunstâncias limitadas antes do lançamento.
Aviso
A funcionalidade semântica do Repositório de Vetores kernel está em versão prévia e melhorias que exigem alterações significativas ainda podem ocorrer em circunstâncias limitadas antes do lançamento.
Aviso
A funcionalidade semântica do Repositório de Vetores kernel está em versão prévia e melhorias que exigem alterações significativas ainda podem ocorrer em circunstâncias limitadas antes do lançamento.
Visão geral
O Oracle Database Vector Store Connector pode ser usado para acessar e gerenciar dados no Oracle Database. O conector tem as seguintes características.
| Área de recurso | Support |
|---|---|
| A coleção é mapeada para | Tabela do banco de dados Oracle |
| Tipos de propriedade de chave com suporte |
|
| Tipos de propriedade de dados com suporte |
|
| Tipos de propriedade de vetor com suporte |
|
| Tipos de índice com suporte |
|
| Funções de distância com suporte |
|
| Cláusulas de filtro com suporte |
|
| Dá suporte a zero, um ou vários vetores em um registro | Yes |
| Há suporte para IsIndexed? | Yes |
| Há suporte para o IsFullTextSearchable? | Não |
| StorageName com suporte? | Yes |
| Suporte ao HybridSearch? | Não |
Importante
As pesquisas de dados de vetor exigem o Oracle Database 23ai ou superior. Todos os outros recursos do conector Oracle estão disponíveis usando o Oracle Database 19c ou superior.
| Área de recurso | Support |
|---|---|
| A coleção é mapeada para | Uma tabela do Oracle Database |
| Tipos de propriedade de chave com suporte |
|
| Tipos de propriedade de dados com suporte |
|
| Tipos de propriedade de vetor com suporte |
|
| Tipos de índice com suporte |
|
| Funções de distância com suporte |
|
| Cláusulas de filtro com suporte | Lambdas do Python com comparações, operadores booleanos, métodos de strings (startswith, endswith), entre, e datetime, traduzidos para SQL com variáveis de bind |
| Há suporte para IsIndexed? | Yes |
| Há suporte para o IsFullTextSearchable? | Não |
| StoragePropertyName com suporte? | Yes |
| Suporte ao HybridSearch? | Não |
Importante
As pesquisas de dados de vetor exigem o Oracle Database 23ai ou posterior. Todos os outros recursos do conector Oracle estão disponíveis usando o Oracle Database 19c ou posterior. Além disso, o python-oracledb 3.3 ou posterior é necessário.
| Área de recurso | Support |
|---|---|
| Cláusulas de filtro com suporte |
|
| A coleção é mapeada para | Tabela do banco de dados SQL |
| Tipos de propriedade de chave com suporte |
|
| Tipos de propriedade de dados com suporte |
|
| Tipos de propriedade de vetor com suporte |
|
| Tipos de índice com suporte |
|
| Funções de distância com suporte |
|
| Dá suporte a vários vetores em um registro | Yes |
| Suporte ao IsIndexed? | Yes |
| Há suporte para o IsFullTextSearchable? | Não |
| StoragePropertyName com suporte? | Não, use @JsonProperty em vez disso |
| Suporte ao HybridSearch? | Não |
Como começar
Adicione o pacote NuGet do conector do Repositório de Vetores do Banco de Dados Oracle ao seu projeto.
dotnet add package Oracle.VectorData --prerelease
Você pode adicionar o repositório de vetores ao IServiceCollection contêiner de injeção de dependência usando métodos de extensão fornecidos pelo Kernel Semântico. Nesse caso, uma instância da Oracle.VectorData.OracleVectorStore classe também é registrada com o contêiner.
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>");
Métodos de extensão que não têm parâmetros também estão disponíveis. Isso exige que uma instância da Oracle.ManagedDataAccess.Client.OracleDataSource classe seja registrada separadamente com o contêiner de injeção de dependência.
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();
Você pode construir uma instância do Repositório de Vetores do Banco de Dados Oracle diretamente com uma fonte de dados personalizada ou com uma cadeia de conexão.
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>");
É possível construir uma referência direta a uma coleção nomeada com uma fonte de dados personalizada ou com uma cadeia de conexão.
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");
Como começar
Instale o conector do Repositório de Vetores do Banco de Dados Oracle:
pip install semantic-kernel[oracledb]
Importe as classes OracleSettings, OracleStore e OracleCollection.
from semantic_kernel.connectors.oracle import OracleSettings, OracleStore, OracleCollection
A classe OracleSettings contém a configuração necessária para criar uma conexão assíncrona com o Oracle Database. A classe OracleStore é usada para armazenar e recuperar dados, enquanto a classe OracleCollection gerencia e pesquisa registros em uma coleção. Use essas classes para configurar o Repositório de Vetores Oracle.
# 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()
Como começar
Configurar o conector do Repositório de Vetores do Banco de Dados 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();
}
}
Mapeamento de dados
O conector do Repositório de Vetores do Banco de Dados Oracle fornece um mapeador padrão ao mapear dados do modelo de dados para o armazenamento. Esse mapeador faz uma conversão direta da lista de propriedades do modelo de dados para as colunas de banco de dados Oracle a serem convertidas no esquema de armazenamento.
O conector do Repositório de Vetores do Banco de Dados Oracle dá suporte a anotações de modelo de dados e definições de registro. Usando anotações, as informações podem ser fornecidas ao modelo de dados para criar índices e mapeamento de coluna de banco de dados. Usando definições de registro, as informações podem ser definidas e fornecidas separadamente do modelo de dados.
A tabela a seguir mostra o mapeamento de tipo de dados de chave primária padrão entre o Banco de Dados Oracle e o C#:
| Tipo de dados C# | Tipo de banco de dados |
|---|---|
| short/int16 | NÚMERO(5) |
| int/int32 | NÚM(10) |
| long/int64 | NÚM(19) |
| cadeia | NVARCHAR2(2000) |
| Guid | RAW(16) |
A tabela a seguir mostra o mapeamento de tipo de propriedade de dados padrão, incluindo tipos anuláveis:
| Tipo de dados C# | Tipo de banco de dados |
|---|---|
| bool | BOOLEAN para Oracle Database 23ai e superior NUMBER(1) para versões anteriores |
| byte | NÚMERO(3) |
| short/int16 | NÚMERO(5) |
| int/int32 | NÚM(10) |
| decimal | NÚMERO(18,2) |
| long/int64 | NÚM(19) |
| derivar | BINARY_FLOAT |
| duplo | BINARY_DOUBLE |
| DateTime | TIMESTAMP(7) |
| DateTimeOffset | TIMESTAMP(7) COM FUSO HORÁRIO |
| TimeSpan | INTERVALO DIA(8) ATÉ SEGUNDO(7) |
| char | NVARCHAR2(1) |
| char[] | NVARCHAR2(2000) |
| byte[] | RAW(2000) |
| cadeia | NVARCHAR2(2000) |
| Guid | RAW(16) |
A partir do Oracle Database 23ai, os vetores de banco de dados podem ser mapeados para o .NET. tipos de dados. Há suporte para várias colunas de vetor. A tabela a seguir mostra o mapeamento de tipo de propriedade de vetor padrão, incluindo tipos anuláveis:
| Tipo de dados C# | Tipo de banco de dados |
|---|---|
|
VETOR(dimensões, BINÁRIO) |
|
VECTOR(dimensions, INT8) |
|
VECTOR(dimensões, FLOAT64) |
|
VECTOR(dimensões, FLOAT32) |
Substituição do nome da propriedade
Para propriedades de dados e propriedades de vetor, você pode substituir nomes a serem usados no armazenamento que são diferentes dos nomes de propriedades do modelo de dados. A substituição do nome da propriedade ocorre ao definir a opção StorageName nas propriedades do modelo de dados ou na definição de registro.
Aqui está um modelo de dados com StorageName exemplo de código definido e como isso será representado em um comando 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" )
);
Saiba Mais
Consulte os seguintes recursos do conector do Repositório de Vetores de Banco de Dados Oracle para saber mais:
- Apresentando o Conector do Repositório de Vetores do Banco de Dados Oracle para Kernel Semântico Descreve os principais recursos do conector, classes e orienta o leitor por meio de uma aplicação de busca vetorial em IA de exemplo usando o conector.
- Documentação: Classes do Conector do Armazenamento Vetorial do Oracle Database para APIs de Kernel Semântico (.NET) Contém informações sobre classes do conector do Armazenamento Vetorial do Oracle Database para adicionar dados, recuperar dados e executar pesquisa vetorial no banco de dados vetorial da Oracle.
- Documentação: Provedor de Dados Oracle para .NET Contém informações sobre o Provedor de Dados Oracle para .NET (ODP.NET), o provedor de dados ADO.NET para o conector do Repositório de Vetores do Banco de Dados Oracle.
Mapeamento de dados
O conector do Repositório de Vetores do Banco de Dados Oracle fornece um mapeador padrão ao mapear do modelo de dados para o armazenamento. Esse mapeador faz uma conversão direta da lista de propriedades no modelo de dados para as colunas do Banco de Dados Oracle a serem convertidas no esquema de armazenamento.
O conector do Repositório de Vetores do Banco de Dados Oracle dá suporte a anotações de modelo de dados e definições de registro. Usando anotações, as informações podem ser fornecidas ao modelo de dados para criar índices e mapeamento de coluna de banco de dados. Usando definições de registro, as informações podem ser definidas e fornecidas separadamente do modelo de dados.
A tabela a seguir mostra o mapeamento de tipo de dados de chave primária padrão entre o Banco de Dados Oracle e o Python:
| Tipo de Python | Tipo de SQL do Oracle |
|---|---|
| Str | VARCHAR(n), Usar str(n) na opção de tipo define o comprimento do Oracle VARCHAR como n. Se n não for especificado, o comprimento padrão será 4000. |
| int | NÚM(10) |
| byte | NÚMERO(3) |
| long | NÚM(19) |
| decimal | NÚMERO |
| derivar | BINARY_FLOAT |
| duplo | BINARY_DOUBLE |
| bool | BOOLEAN |
| Identificador Único Universal (UUID) | RAW(16) |
| date | DATE |
| datetime.datetime | TIMESTAMP |
| datetime.timedelta | INTERVALO DE DIA PARA SEGUNDO |
| Clob | CLOB, pode ser especificado explicitamente, não um tipo python nativo |
| blob | BLOB, pode ser especificado explicitamente, não um tipo python nativo |
| list[str], dict[str, Any] | JSON |
| list[dict[str, Any]] | JSON |
| bytes | RAW(2000) |
A partir do Oracle Database 23ai, os vetores de banco de dados podem ser mapeados para tipos de dados python. Há suporte para várias colunas de vetor. A tabela a seguir mostra o mapeamento de tipo de propriedade de vetor padrão:
| Tipo de Python | Tipo de banco de dados |
|---|---|
| uint8 | BINÁRIO |
| int8 | INT8 |
| derivar | FLOAT64 |
| float32 | FLOAT32 |
| float64 | FLOAT64 |
| binário | BINÁRIO |
Saiba Mais
Consulte os seguintes recursos para saber mais:
Mapeamento de dados
O conector do Repositório de Vetores do Banco de Dados Oracle fornece um mapeador padrão ao mapear dados do modelo de dados para o armazenamento. Esse mapeador faz uma conversão direta da lista de propriedades do modelo de dados para as colunas de banco de dados Oracle a serem convertidas no esquema de armazenamento.
O conector do Repositório de Vetores do Banco de Dados Oracle dá suporte a anotações de modelo de dados e definições de registro. Usando anotações, as informações podem ser fornecidas ao modelo de dados para criar índices e mapeamento de coluna de banco de dados. Usando definições de registro, as informações podem ser definidas e fornecidas separadamente do modelo de dados.
A tabela a seguir mostra o mapeamento de tipo de dados de chave primária padrão entre o Banco de Dados Oracle e Java, juntamente com os métodos correspondentes para recuperar dados de um ResultSet:
| Tipo java | Tipo de banco de dados | Método ResultSet Getter |
|---|---|---|
| byte/Byte | NÚMERO(3) | resultSet.getByte(name) |
| curto/curto | NÚMERO(5) | resultSet.getShort(name) |
| int/Integer | NÚM(10) | resultSet.getInt(name) |
| longo/Long | NÚM(19) | resultSet.getLong(name) |
| String | NVARCHAR2(2000) | resultSet.getString(name) |
| Identificador Único Universal (UUID) | RAW(16) | resultSet.getObject(name, java_type) |
A tabela a seguir mostra o mapeamento de tipo de propriedade de dados padrão junto com os métodos correspondentes para recuperar dados de um ResultSet:
| Tipo java | Tipo de banco de dados | Método ResultSet Getter |
|---|---|---|
| boolean | BOOLEAN | resultSet.getByte(name) |
| byte/Byte | NÚMERO(3) | resultSet.getByte(name) |
| byte[] | RAW(2000) | resultSet.getBytes(name) |
| curto/curto | NÚMERO(5) | resultSet.getShort(name) |
| int/Integer | NÚM(10) | resultSet.getInt(name) |
| longo/Long | NÚM(19) | resultSet.getLong(name) |
| float/Float | BINARY_FLOAT | resultSet.getFloat(name) |
| double/Double | BINARY_DOUBLE | resultSet.getDouble(name) |
| BigDecimal | NÚMERO(18,2) | resultSet.getBigDecimal(name) |
| OffsetDateTime | TIMESTAMP(7) COM FUSO HORÁRIO | resultSet.getTIMESTAMPTZ(name).offsetDateTimeValue() |
| String | CLOB/NVARCHAR2(%s) | resultSet.getString(name) |
| Identificador Único Universal (UUID) | RAW(16) | resultSet.getObject(name, java_type) |
Lista<T> |
JSON |
resultSet.getObject(name, java_type) Usando ojdbc-extensions-jackson-oson |
A partir do Oracle Database 23ai, os vetores de banco de dados podem ser mapeados para tipos de dados Java. Há suporte para várias colunas de vetor. A tabela a seguir mostra o mapeamento de tipo de propriedade de vetor padrão:
| Tipo java | Tipo de banco de dados |
|---|---|
| String | VECTOR(%d, FLOAT32) |
Coleção<Float> |
VECTOR(%d, FLOAT32) |
Lista<Float> |
VECTOR(%d, FLOAT32) |
| Float[] | VECTOR(%d, FLOAT32) |
| float[] | VECTOR(%d, FLOAT32) |