Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Advertência
A funcionalidade Oracle Database Vetor Store está em pré-visualização, e melhorias que exigem alterações significativas ainda podem ocorrer em circunstâncias limitadas antes do lançamento.
Advertência
A funcionalidade Kernel Semântico Vetor Store está em pré-visualização, e melhorias que exigem alterações de quebra ainda podem ocorrer em circunstâncias limitadas antes do lançamento.
Advertência
A funcionalidade Kernel Semântico Vetor Store está em pré-visualização, e melhorias que exigem alterações de quebra ainda podem ocorrer em circunstâncias limitadas antes do lançamento.
Visão geral
O Oracle Database Vetor Store Connector pode ser usado para acessar e gerenciar dados no Oracle Database. O conector tem as seguintes características.
| Área de funcionalidades | Support |
|---|---|
| Coleção corresponde a | Tabela de banco de dados Oracle |
| Tipos de propriedades-chave suportados |
|
| Tipos de propriedade de dados suportados |
|
| Tipos de propriedade vetorial suportados |
|
| Tipos de índice suportados |
|
| Funções de distância suportadas |
|
| Cláusulas de filtro suportadas |
|
| Suporta zero, um ou vários vetores em um registro | Yes |
| IsIndexed é suportado? | Yes |
| IsFullTextSearchable é suportado? | Não |
| O StorageName é suportado? | Yes |
| O HybridSearch é suportado? | Não |
Importante
As pesquisas de dados vetoriais requerem 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 funcionalidades | Support |
|---|---|
| A coleção corresponde a | Uma tabela de Base de Dados Oracle |
| Tipos de propriedade de chave suportados |
|
| Tipos de propriedade de dados suportados |
|
| Tipos de propriedade vetorial suportados |
|
| Tipos de índice suportados |
|
| Funções de distância suportadas |
|
| Cláusulas de filtro suportadas | Lambdas em Python com comparações, operadores booleanos, métodos de string (startswith, endswith), between e datetime, traduzidos para SQL com variáveis de ligação |
| O IsIndexed é suportado? | Yes |
| IsFullTextSearchable é suportado? | Não |
| StoragePropertyName suportado? | Yes |
| HybridSearch é suportado? | Não |
Importante
As pesquisas de dados vetoriais requerem o Oracle Database 23ai ou versões posteriores. Todas as outras funcionalidades do conector Oracle estão disponíveis usando o Oracle Database 19c ou posterior. Além disso, é necessário python-oracledb 3.3 ou posterior.
| Área de funcionalidades | Support |
|---|---|
| Cláusulas de filtro suportadas |
|
| A coleção é mapeada para | Tabela do banco de dados SQL |
| Tipos de propriedades-chave suportados |
|
| Tipos de propriedade de dados suportados |
|
| Tipos de propriedade vetorial suportados |
|
| Tipos de índice suportados |
|
| Funções de distância suportadas |
|
| Suporta vários vetores em um registro | Yes |
| Suporte para IsIndexed? | Yes |
| IsFullTextSearchable é suportado? | Não |
| StoragePropertyName suportado? | Não, use @JsonProperty em vez disso |
| O HybridSearch é suportado? | Não |
Como Começar
Adicione o pacote NuGet do conector do Oracle Database Vetor Store ao seu projeto.
dotnet add package Oracle.VectorData --prerelease
Pode adicionar o armazenamento vetorial ao IServiceCollection contentor de injeção de dependências usando métodos de extensão fornecidos pelo pacote conector. 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 usam parâmetros também estão disponíveis. Isso requer 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 Oracle Database Vetor Store 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 Oracle Database Vector Store:
pip install semantic-kernel[oracledb]
Importa as classes OracleSettings, OracleStore e OracleCollection.
from semantic_kernel.connectors.oracle import OracleSettings, OracleStore, OracleCollection
A classe OracleSettings detém a configuração necessária para criar uma ligação assíncrona à Oracle Database. A classe OracleStore é usada para armazenar e recuperar dados, enquanto a classe OracleCollection gere e pesquisa registos dentro de uma coleção. Utilize estas classes para configurar o 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()
Como Começar
Configure o conector do Oracle Database Vetor Store.
// 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 Oracle Database Vetor Store 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 do banco de dados Oracle para converter no esquema de armazenamento.
O conector de armazenamento vetorial do Oracle Database suporta anotações de modelo de dados e definições de registo. Utilizando anotações, as informações podem ser fornecidas ao modelo de dados para a criação de índices e para o mapeamento de colunas da base 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 padrão do tipo de dados de chave primária entre o Oracle Database e o C#:
| Tipo de dados C# | Tipo de banco de dados |
|---|---|
| short/int16 | NÚMERO(5) |
| int/int32 | NÚMERO(10) |
| long/int64 | NÚMERO(19) |
| cadeia (de caracteres) | NVARCHAR2(2000) |
| Guia | 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 versões posteriores NÚMERO(1) para versões anteriores |
| byte | NÚMERO(3) |
| short/int16 | NÚMERO(5) |
| int/int32 | NÚMERO(10) |
| decimal | NÚMERO(18,2) |
| long/int64 | NÚMERO(19) |
| float | BINARY_FLOAT |
| duplo | BINARY_DOUBLE |
| DateTime | TIMESTAMP(7) |
| DateTimeOffset | TIMESTAMP(7) COM FUSO HORÁRIO |
| TimeSpan | INTERVALO DIA(8) A SEGUNDO(7) |
| char | NVARCHAR2(1) |
| char[] | NVARCHAR2(2000) |
| byte[] | RAW(2000) |
| cadeia (de caracteres) | NVARCHAR2(2000) |
| Guia | RAW(16) |
A partir do Oracle Database 23ai, os vetores de banco de dados podem ser mapeados para .NET. tipos de dados. Várias colunas vetoriais são suportadas. A tabela a seguir mostra o mapeamento de tipo de propriedade vetorial padrão, incluindo tipos anuláveis:
| Tipo de dados C# | Tipo de banco de dados |
|---|---|
|
VETOR(dimensões, BINÁRIO) |
|
VETOR(dimensões, INT8) |
|
VETOR(dimensões, FLOAT64) |
|
VETOR(dimensões, FLOAT32) |
Substituição do nome da propriedade
Para propriedades de dados e propriedades de vetor, pode substituir os nomes a utilizar no armazenamento por nomes diferentes dos nomes das propriedades do modelo de dados. A substituição do nome da propriedade ocorre ao definir a StorageName opção nas propriedades do modelo de dados ou na definição do 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 Oracle Database Vetor Store para saber mais:
- Apresentando o Conector de Armazenamento Vetorial da Base de Dados Oracle para o Núcleo Semântico Descreve as características-chave do conector, classes e orienta o leitor através de uma aplicação de pesquisa vetorial de IA utilizando o conector.
- Documentação: Classes de Conectores de Armazenamento Vetorial da Oracle Database para APIs do Kernel Semântico (.NET) Contém informações sobre as classes de conectores Oracle Database Vector Store para adicionar dados, recuperar dados e realizar pesquisa vetorial na base de dados vetorial Oracle.
- Documentação: Oracle Data Provider para .NET Contém informações sobre o Oracle Data Provider para .NET (ODP.NET), o ADO.NET fornecedor de dados para o conector Oracle Database Vector Store.
Mapeamento de dados
O conector Oracle Database Vector Store fornece um mapeador padrão ao mapear do modelo de dados para o armazenamento. Este mapeador faz uma conversão direta da lista de propriedades no modelo de dados para as colunas Oracle Database para converter no esquema de armazenamento.
O conector Oracle Database Vector Store suporta anotações de modelos de dados e definições de registos. Usando anotações, a informação pode ser fornecida ao modelo de dados para criar índices e mapeamento de colunas na base de dados. Usando definições de registro, as informações podem ser definidas e fornecidas separadamente do modelo de dados.
A tabela seguinte mostra o mapeamento padrão de tipos de dados da chave primária entre Oracle Database e Python:
| Tipo Python | Tipo Oracle SQL |
|---|---|
| str | VARCHAR(n), Usando str(n) na opção de tipo, define o comprimento Oracle VARCHAR como n. Se n não for especificado, o comprimento padrão é 4000. |
| int | NÚMERO(10) |
| byte | NÚMERO(3) |
| long | NÚMERO(19) |
| decimal | NÚMERO |
| float | BINARY_FLOAT |
| duplo | BINARY_DOUBLE |
| bool | BOOLEAN |
| Identificador Único Universal (UUID) | RAW(16) |
| date | DATE |
| datetime.datetime | DATA E HORA |
| datetime.timedelta | INTERVALO DIA A SEGUNDO |
| CLOB | CLOB, pode ser especificado explicitamente, não é um tipo nativo de Python |
| blob | BLOB, pode ser especificado explicitamente, não é um tipo nativo de Python |
| list[str], dict[str, qualquer] | JSON |
| lista[dicionário[chave de tipo string, qualquer tipo]] | JSON |
| bytes | RAW(2000) |
A partir do Oracle Database 23ai, os vetores de base de dados podem ser mapeados para tipos de dados em Python. Várias colunas vetoriais são suportadas. A tabela a seguir mostra o mapeamento de tipo de propriedade vetorial padrão:
| Tipo Python | Tipo de banco de dados |
|---|---|
| uint8 | BINARY |
| int8 | INT8 |
| float | FLOAT64 |
| float32 | FLOAT32 |
| float64 | FLOAT64 |
| binário | BINARY |
Saiba mais
Consulte os seguintes recursos para saber mais:
Mapeamento de dados
O conector Oracle Database Vetor Store 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 do banco de dados Oracle para converter no esquema de armazenamento.
O conector Oracle Database Vector Store suporta anotações do modelo de dados e definições de registos. Através de anotações, as informações podem ser fornecidas ao modelo de dados para a criação de índices e o mapeamento de colunas da base 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 padrão do tipo de dados de chave primária entre o Oracle Database e o Java, juntamente com os métodos correspondentes para recuperar dados de um ResultSet:
| Tipo Java | Tipo de banco de dados | Método de Obtenção de ResultSet |
|---|---|---|
| byte/byte | NÚMERO(3) | resultSet.getByte(name) |
| curto/Curto | NÚMERO(5) | resultSet.getShort(name) |
| int/inteiro | NÚMERO(10) | resultSet.getInt(name) |
| longo/longo | NÚMERO(19) | resultSet.getLong(name) |
| Cordão | 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 juntamente com os métodos correspondentes para recuperar dados de um ResultSet:
| Tipo Java | Tipo de banco de dados | Método de Obtenção de ResultSet |
|---|---|---|
| Booleano | 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/inteiro | NÚMERO(10) | resultSet.getInt(name) |
| longo/longo | NÚMERO(19) | resultSet.getLong(name) |
| ponto flutuante/float | BINARY_FLOAT | resultSet.getFloat(name) |
| duplo/duplo | BINARY_DOUBLE | resultSet.getDouble(name) |
| BigDecimal | NÚMERO(18,2) | resultSet.getBigDecimal(name) |
| OffsetDateTime | TIMESTAMP(7) COM FUSO HORÁRIO | resultSet.getTIMESTAMPTZ(name).offsetDateTimeValue() |
| Cordão | 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. Várias colunas vetoriais são suportadas. A tabela a seguir mostra o mapeamento de tipo de propriedade vetorial padrão:
| Tipo Java | Tipo de banco de dados |
|---|---|
| Cordão | VETOR(%d, FLOAT32) |
Coleção<Float> |
VETOR(%d, FLOAT32) |
Lista<Float> |
VETOR(%d, FLOAT32) |
| Flutuar[] | VETOR(%d, FLOAT32) |
| flutuar[] | VETOR(%d, FLOAT32) |