
Explorando o Oracle AI Vector Search: além dos bancos de dados vetoriais
Esta postagem do blog explora o Oracle AI Vector Search, um novo recurso que introduz recursos vetoriais no banco de dados Oracle. As incorporações vetoriais são uma ferramenta poderosa para tarefas como pesquisa semântica e geração aumentada de recuperação (RAG). Vamos nos aprofundar nas funcionalidades de criação, armazenamento e pesquisa oferecidas pelo Oracle AI Vector Search.
Fornecendo um guia prático para desenvolvedores que desejam aproveitar essa tecnologia em seus aplicativos.
O que é um banco de dados vetorial?
Os bancos de dados vetoriais estão emergindo como a base dos aplicativos modernos de pesquisa e geração aumentada de recuperação (RAG). Então, o que exatamente são e por que são tão importantes?
Compreendendo as incorporações
Imagine capturar a essência de um documento, uma imagem ou qualquer ponto de dados e traduzi-la em um código numérico. Essa é a mágica das incorporações. Além disso, esses códigos, representados como matrizes de números, incorporam o significado semântico dos objetos de dados. Eles se tornam essencialmente uma nova linguagem para os computadores entenderem as relações entre diferentes informações.
Espaço de alta dimensão
Pense em um espaço vasto e multidimensional. Cada incorporação ocupa um local específico dentro desse espaço, com pontos de dados semelhantes residindo mais próximos uns dos outros. Isso permite uma comparação e recuperação eficientes com base no significado semântico, não apenas em correspondências exatas de palavras-chave.
O poder do banco de dados vetorial
É aqui que entram os bancos de dados vetoriais. São soluções especializadas de armazenamento de dados projetadas especificamente para gerenciar essas representações vetoriais de alta dimensão. Sua principal força está na capacidade de realizar buscas aproximadas de vizinhos mais próximos (ANN) com uma velocidade excepcional.
Vizinho mais próximo aproximado
Imagine pesquisar um documento específico em uma enorme biblioteca. Um banco de dados tradicional pode comparar meticulosamente as palavras-chave em todos os documentos. Em contraste, os algoritmos de ANN em bancos de dados vetoriais funcionam de forma diferente. Eles aproveitam a organização espacial das incorporações no espaço de alta dimensão para identificar rapidamente as correspondências mais próximas, reduzindo significativamente o número de comparações necessárias. Isso se traduz em resultados de pesquisa extremamente rápidos e altamente relevantes.
Por que bancos de dados vetoriais são importantes
A capacidade de lidar com dados em grande escala e de alta dimensão é fundamental para várias aplicações. Além disso, os bancos de dados vetoriais se destacam em:
- Pesquisa semântica: Encontrar informações com base no significado e no contexto, não apenas em palavras-chave.
- Geração aumentada por recuperação (RAG): Fornecer aos LLMs (Large Language Models) o contexto relevante dos dados recuperados, levando a respostas mais precisas e informativas.
Resumindo, os bancos de dados vetoriais nos capacitam a liberar o verdadeiro potencial das incorporações, abrindo caminho para uma nova era de pesquisa inteligente e aplicativos orientados por IA.
O cenário do banco de dados vetorial
O mundo do gerenciamento de dados está evoluindo rapidamente e os bancos de dados vetoriais se tornaram um player proeminente. Mas com várias opções disponíveis, selecionar a solução certa pode ser assustador. Esta seção explora as três categorias principais de bancos de dados vetoriais.
Bibliotecas vetoriais (FAISS, ANNOY):
Essas ferramentas estabelecidas (que datam de meados da década de 2010) se destacam na pesquisa eficiente de similaridade. Eles são:
- Prós: Poderoso para pesquisa e desenvolvimento, altamente personalizável e fácil de integrar em projetos existentes.
- Contras: exige que você gerencie sua própria infraestrutura, ofereça suporte limitado ou inexistente para filtragem por metadados e não tenha a conveniência das consultas SQL.
Bancos de dados somente vetoriais (Milvus, Pinecone, Chroma, Qdrant, Weaviate):
Esses bancos de dados especializados ganharam força nos últimos anos. Além disso, eles são criados especificamente para dados vetoriais de alta dimensão, o que os torna ideais para tarefas como:
- Prós: otimizado para pesquisa por similaridade vetorial, manuseio eficiente de grandes conjuntos de dados e geralmente fácil de usar com recursos integrados.
- Contras: Suporte SQL limitado ou inexistente, pode ter limitações em recursos de nível corporativo, e a escalabilidade pode se tornar um problema para conjuntos de dados extremamente grandes.
Bancos de dados corporativos com suporte vetorial (MongoDB, Neo4j, CouchDB, PostgreSQL (pgvector), Oracle, soluções em nuvem da AWS e do Google, Databricks):
Os principais players do mundo do banco de dados estão começando a adotar vetores. Consequentemente, essas soluções oferecem:
- Vantagens: elimine a necessidade de um banco de dados separado, habilite um contexto mais rico para o RAG combinando vetores com outros tipos de dados e, em geral, forneça recursos corporativos mais robustos.
- Contras: as funcionalidades de pesquisa vetorial podem ser básicas ou estar em desenvolvimento, o desempenho pode variar significativamente e o manuseio de conjuntos de dados massivos e de alta dimensão pode exigir otimizações adicionais, como particionamento de dados ou técnicas especializadas de indexação, para manter velocidades de consulta eficientes.
O cenário do banco de dados vetoriais está em constante evolução. À medida que a tecnologia amadurece, espere mais avanços e otimizações. Ao entender os pontos fortes e as limitações de cada categoria, você pode tomar uma decisão informada e aproveitar o poder dos bancos de dados vetoriais para desbloquear novas possibilidades em sua estratégia de gerenciamento de dados.
Pesquisa vetorial do Oracle AI
Visão geral
Em 2024, a Oracle lançou o AI Vector Search, marcando um avanço significativo em sua tecnologia de banco de dados. Essa oferta vai além de simplesmente adicionar recursos vetoriais. Ele fornece um kit de ferramentas abrangente para trabalhar com incorporações, interagir com grandes modelos de linguagem (LLMs) e até mesmo implementar um pipeline completo de geração aumentada de recuperação (RAG). Como resultado, o Oracle AI Vector Search se posiciona como uma solução poderosa para desenvolvedores que trabalham com aplicativos de IA.
Um dos principais pontos fortes do AI Vector Search é sua capacidade de realizar todas as tarefas necessárias dentro do próprio banco de dados. Isso inclui criar incorporações, fragmentar documentos e aproveitar LLMs para processamento de texto. Essa abordagem centralizada simplifica os fluxos de trabalho de desenvolvimento. No entanto, ele também mantém a flexibilidade ao permitir que os usuários realizem tarefas específicas externamente, se desejado, usando o Oracle somente para armazenamento vetorial.
Essa funcionalidade é obtida por meio da adição de um novo tipo de dados vetoriais, índices vetoriais e um conjunto de funções SQL e pacotes PL/SQL. Notavelmente, os usuários podem importar modelos de incorporação diretamente para o banco de dados usando o formato ONNX, oferecendo flexibilidade na escolha do modelo mais adequado para seu projeto. Além disso, a integração com serviços de terceiros é perfeita, com credenciais gerenciadas com segurança no banco de dados.
O verdadeiro poder do AI Vector Search está em sua capacidade de combinar os pontos fortes de um banco de dados corporativo com recursos avançados de pesquisa vetorial. Além disso, os usuários podem recuperar e pesquisar dados combinando perfeitamente vetores semânticos com a filtragem tradicional de dados comerciais.
As aplicações potenciais para o AI Vector Search são extensas. Os desenvolvedores podem aproveitá-lo para expandir o conhecimento dos LLMs com o RAG, criar sistemas robustos de recomendação ou realizar pesquisas eficientes de texto e semântica.
Para aqueles interessados em explorar o AI Vector Search, o Oracle Cloud oferece uma opção econômica. O nível gratuito fornece acesso a bancos de dados autônomos sempre gratuitos, permitindo que os desenvolvedores experimentem os recursos e avaliem sua adequação para seus projetos.
Gere incorporações
O Oracle Database fornece uma abordagem versátil para gerar incorporações, oferecendo opções externas e no banco de dados.
Dentro do banco de dados:
Modelos de incorporação ONNX: aproveite modelos pré-treinados no formato ONNX. O DBMS_VECTOR.LOAD_ONNX_MODEL procedimento dentro do DBMS_VECTOR O pacote PL/SQL facilita a importação desses modelos. Basta fornecer o arquivo ONNX e o nome do modelo escolhido. Lembre-se de que o tamanho do modelo é limitado a 1 gigabyte.
Aqui está um exemplo de consulta SQL demonstrando como gerar uma incorporação com um modelo ONNX carregado chamado doc_model:
SELECIONE TO_VECTOR (VECTOR_EMBEDDING (doc_model USANDO 'hello' COMO dados)) COMO incorporação;
Provedores externos de incorporação:
A Oracle oferece suporte a vários provedores de incorporação de terceiros, como Cohere, Generative AI, Google AI, Hugging Face, OpenAI e Vertex AI. Para aproveitá-los:
- Crie credenciais: utilize o
DBMS_VECTOR.CREATE_CREDENTIALprocedimento. Atribua um nome à credencial e forneça o token de acesso. - Utilize
DBMS_VECTOR.UTL_TO_EMBEDDING: Essa função permite que você interaja com provedores externos. Aqui está um exemplo:
SELECIONE DBMS_VECTOR.UTL_TO_EMBEDDING ('hello', json (:params)) DO dual;
A variável params contém detalhes como provedor, nome da credencial, URL, modelo e parâmetros adicionais específicos do provedor.
Fora do banco de dados:
Esta seção demonstra como criar uma incorporação fora do banco de dados usando Cohere, converter a incorporação em um formato adequado e, em seguida, inseri-la em uma tabela de banco de dados Oracle. O código executa as seguintes etapas:
- Importar e inicializar: importe a classe CohereEmbeddings do
langchain_coherebiblioteca e inicialize-a com sua chave e modelo da API Cohere. - Gerar incorporação: defina um documento de texto e gere sua incorporação usando o método embed_documents.
- Converter em matriz: converta a incorporação resultante em uma matriz de ponto flutuante de 32 bits.
- Conecte-se ao banco de dados Oracle: estabeleça uma conexão com o banco de dados Oracle usando o
oracledbbiblioteca. - Inserir incorporação: insira a incorporação em uma tabela chamada
tabela_vetor. - Fechar conexões: feche o cursor e a conexão do banco de dados.
<user><password><dsn>de langchain_cohere importe CohereEmbeddings cohere_embeddings = CohereEmbeddings (cohere_api_key="< <apiKey>>”, model="embed-english-light-v3.0") text = “Este é um documento de teste.” doc_result = cohere_embeddings.embed_documents ([text]) import array vector_data_32 = array.array (“f”, doc_result [0]) import oracledb conn = oracledb.connect (user="< >”, password="< >”, dsn="< >”) cursor = conn.cursor () cursor.execute (“inserir valores em vector_table (v32) (:1)”, [vector_data_32],) cursor.close () conn.close ())
Essa flexibilidade permite que os desenvolvedores escolham a abordagem de geração de incorporação que melhor se adapte às suas necessidades específicas e aos requisitos do projeto.
Armazenar incorporações
O Oracle AI Vector Search apresenta o VETOR tipo de dados, projetado especificamente para armazenar representações vetoriais de dados de forma eficiente. Na seção a seguir, exploraremos como aproveitar esse tipo de dados para incorporar armazenamento e gerenciamento.
Criação de tabelas para incorporações:
O processo é simples. Você pode definir uma tabela com um VETOR coluna para armazenar as incorporações, conforme ilustrado abaixo:
CRIAR TABELA my_vectors (id NUMBER, incorporando VECTOR (768, INT8));
Aqui, a coluna de incorporação é definida como VETOR tipo de dados com 768 dimensões e o INT8 formato. A especificação do número de dimensões e formato é opcional, com opções que incluem INT8, FLOAT32, e FLOAT64. Embora os vetores em si possam ser nulos, suas dimensões não.
Funções de conversão:
A Oracle fornece funções para converter perfeitamente entre VARCHAR 2/PORRETE tipos de dados e VETOR. Isso simplifica o processo de integração de fontes de dados existentes com suas representações vetoriais.
Carregamento em grande escala:
Para um carregamento eficiente de um grande número de vetores, o SQLLoader da Oracle intervém. Ele suporta o carregamento de vetores de arquivos de texto e formato binário por meio de .fvec arquivos. Isso simplifica o processo de importação de grandes quantidades de dados incorporados em seu banco de dados.
Índices vetoriais
Pesquisas vetoriais eficientes dependem do poder dos índices. O Oracle AI Vector Search permite que você crie índices vetoriais, permitindo a implementação da pesquisa de Vizinho Mais Próximo (ANN) aproximado. Isso reduz significativamente os tempos de recuperação em comparação com as pesquisas lineares. É importante lembrar que esses índices fornecem resultados aproximados.
Tipos de índices vetoriais:
A maioria dos índices vetoriais se enquadra em duas categorias computacionais: agrupamento e gráficos. A Oracle suporta:
- Índices de arquivo invertido (IVF) (particionamento de vizinhos): esses particionam pontos de dados em clusters, permitindo uma pesquisa eficiente em clusters relevantes.
- Índices hierárquicos navegáveis de pequenos mundos (HNSW) (gráfico vizinho na memória): eles criam uma estrutura gráfica navegável para localizar vetores semelhantes. No entanto, os índices HNSW não estão disponíveis em ambientes RAC.
Escolhendo a métrica de distância correta:
A métrica de distância escolhida deve estar alinhada com as recomendações do seu modelo de incorporação. Essencialmente, ele calcula a semelhança entre os vetores. As opções comuns incluem EUCLIDIANO, L2_SQUARED, COSSENO, PONTO, MANHATTAN, e HAMMING. Você pode especificar a métrica durante a criação do índice ou na própria consulta de pesquisa.
Parâmetros de ajuste fino do índice:
Para índices de fertilização in vitro, você pode definir o número de clusters e o número de centróides (pontos representativos) a serem explorados durante uma pesquisa. Além disso, os índices permitem especificar uma porcentagem de precisão alvo para influenciar a pesquisa. Um valor de 100% visa uma pesquisa exata, mas isso não é garantido. Essa precisão alvo pode ser definida durante a criação do índice, na consulta ou até mesmo substituída na própria consulta.
Aqui está um exemplo de criação de um índice de fertilização in vitro:
CRIE ÍNDICE VETORIAL GALAXIES_IVF_IDX EM GALÁXIAS (incorporação) ORGANIZAÇÃO PARTIÇÕES VIZINHAS COSENO DE DISTÂNCIA COM PRECISÃO ALVO 95;
Mantendo a precisão do índice:
É importante observar que as operações DML (inserir, atualizar, excluir) não são permitidas após a criação de um índice HNSW. Para índices de fertilização in vitro, as operações de DML podem diminuir a precisão ao longo do tempo. Pode ser necessário reconstruir periodicamente o índice.
Monitoramento e otimização:
Um recurso valioso é o fornecimento de funções da Oracle para relatar a precisão do índice com base em vetores de consulta usados em pesquisas aproximadas. Isso permite que você monitore e otimize continuamente a precisão de sua implementação de pesquisa vetorial.
Distância vetorial
O cálculo de distâncias vetoriais é uma função central em qualquer aplicativo de busca vetorial. O Oracle AI Vector Search fornece um conjunto abrangente de ferramentas para facilitar esse processo.
Funções e operadores de distância:
- DISTÂNCIA_VETOR: Essa é a função principal para calcular distâncias entre vetores. Ele permite que você especifique a métrica de distância desejada para o cálculo.
- Funções abreviadas: A Oracle oferece funções abreviadas convenientes para métricas de distância comuns, como
L1_DISTANCE,L2_DISTANCE,DISTÂNCIA_CÓSICA, ePRODUTO_INTERNO. Essas funções simplificam seu código e melhoram a legibilidade. - Operadores de distância: Como alternativa às funções, a Oracle oferece suporte a operadores que refletem a funcionalidade das funções de distância. Isso fornece uma abordagem mais concisa para cálculos de distância em suas consultas SQL.
Pesquisa de similaridade exata:
O exemplo a seguir demonstra como realizar uma pesquisa de similaridade exata usando o DISTÂNCIA_VETOR função:
SELECIONE DOCID EM VECTOR_TAB ORDENAR POR VECTOR_DISTANCE (embedding, :query_vector, EUCLIDEAN_SQUARED) OBTENHA SOMENTE AS PRIMEIRAS 10 LINHAS;
Neste exemplo, a consulta recupera os IDs do documento do tabulação_vetor tabela, ordenada por sua distância até o query_vector fornecido. O EUCLIDIANO_QUADRADO a métrica de distância é usada para o cálculo.
Além disso, o BUSCAR SOMENTE AS PRIMEIRAS 10 LINHAS A cláusula limita os resultados às 10 partidas mais próximas.
Pesquisa de similaridade aproximada:
Para cenários em que resultados exatos não são essenciais, você pode aproveitar a pesquisa aproximada para obter tempos de recuperação mais rápidos. Aqui está um exemplo:
SELECIONE O NOME DAS galáxias ONDE o nome <> 'NGC1073' ORDER BY VECTOR_DISTANCE (embedding, TO_VECTOR ('[0,1,1,0,0]'), COSENO) OBTENHA APENAS AS PRIMEIRAS 3 LINHAS APROXIMADAS;
Essa consulta pesquisa na tabela de galáxias as galáxias mais próximas de uma representação vetorial específica ([0,1,1,0,0]), excluindo a galáxia chamada 'NGC1073'. A métrica de distância COSENE é usada para a pesquisa e o BUSQUE APENAS AS PRIMEIRAS 3 LINHAS APROXIMADAS A cláusula recupera as 3 principais correspondências aproximadas.
Métricas de distância correspondentes:
É crucial garantir que a métrica de distância usada em suas consultas esteja alinhada com a métrica usada durante o treinamento do seu modelo de incorporação vetorial. Isso garante que as distâncias calculadas reflitam com precisão a semelhança entre os vetores.
TRAPO
Os modelos de linguagem grande (LLMs) se tornaram um divisor de águas no processamento de linguagem natural, mas sua tendência de gerar informações imprecisas ou fabricadas (alucinações) continua sendo uma preocupação. A Geração Aumentada de Recuperação (RAG) oferece uma solução poderosa ao fornecer aos LLMs um contexto relevante derivado de fontes de dados, aprimorando a precisão e a base factual de seus resultados.
O Oracle AI Vector Search brilha nessa área ao oferecer uma solução abrangente no banco de dados para implementar o RAG. Isso elimina a necessidade de ferramentas ou estruturas externas, simplificando o desenvolvimento e mantendo os dados confidenciais seguros no ambiente confiável do banco de dados Oracle.
Implementando o RAG com o Oracle AI Vector Search
Aqui está um resumo do processo de implementação:
- Carregamento e pré-processamento de dados:
- Estabeleça uma tabela de banco de dados para armazenar documentos como
BOLHAColunas (Objeto grande binário). - Crie uma tabela separada para abrigar incorporações vetoriais, representando partes menores e gerenciáveis dos documentos originais.
- Aproveite as funções utilitárias dentro do
DBMS_VECTOR_CHAINPacote PL/SQL para automatizar a preparação de dados:DBMS_VECTOR_CHAIN.UTL_TO_TEXT: converte facilmente documentos (PDF, Word etc.) em texto simples.DBMS_VECTOR_CHAIN.UTL_TO_CHUNKS: divide documentos em seções menores e mais gerenciáveis.DBMS_VECTOR_CHAIN.UTL_TO_EMBEDDINGS: gera incorporações vetoriais para cada pedaço do documento.
- Estabeleça uma tabela de banco de dados para armazenar documentos como
- Processamento e recuperação de consultas:
- Utilize o
INCORPORAÇÃO DE VETORESFunção SQL para converter a consulta do usuário em uma representação vetorial, permitindo uma comparação eficiente com incorporações de fragmentos de documentos. - Empregue a poderosa combinação do
DISTÂNCIA_VETORFunção SQL e oBUSCAR APROXIMADAMENTEcláusula para realizar uma pesquisa por similaridade. Isso identifica os documentos mais relevantes para a consulta do usuário.
- Utilize o
- Integração LLM (opcional):
Para uma flexibilidade ainda maior, a Oracle fornece oUTL_PARA_GERAR_TEXTOfunção dentro doDBMS_VECTOR_CHAINpacote. Essa função permite que você invoque um LLM de terceiros para gerar texto com base nos documentos recuperados e na consulta do usuário. Ao alimentar os LLMs com o contexto relevante de suas fontes de dados confiáveis, o RAG garante respostas factuais e minimiza o risco de alucinações.
Encerrando
O Oracle AI Vector Search é excelente com suas funcionalidades no banco de dados. Especificamente, ele simplifica o desenvolvimento ao lidar com o carregamento de dados, o pré-processamento, a pesquisa e até a integração do LLM — tudo dentro do ambiente familiar da Oracle. Consequentemente, isso não apenas simplifica as coisas, mas também mantém os dados confidenciais seguros.
Além disso, os recursos RAG integrados são um verdadeiro divisor de águas. Ao alimentar o contexto relevante do LLM a partir de seus dados, o RAG garante respostas factuais e minimiza o risco de “alucinações” às quais esses modelos são propensos. Como resultado, isso torna o Oracle AI Vector Search perfeito para empresas que já investem em bancos de dados Oracle, especialmente aquelas que buscam aproveitar a IA para tarefas como chatbots, recomendações personalizadas ou filtragem de conteúdo.
Embora não seja um serviço gratuito, o potencial retorno sobre o investimento do Oracle AI Vector Search é inegável. Sua disponibilidade no Oracle Cloud Infrastructure (OCI) oferece uma opção potencialmente econômica.
No entanto, a única peça que falta no quebra-cabeça no momento é o benchmarking de dados. Embora os recursos sejam impressionantes, as métricas de desempenho do mundo real solidificariam a posição do Oracle AI Vector Search como líder. Portanto, aguardamos ansiosamente esses benchmarks para obter uma visão completa.
Concluindo, o Oracle AI Vector Search surge como uma solução segura, flexível e altamente promissora para criar aplicativos de IA confiáveis e informativos. Em última análise, sua forte integração com o banco de dados Oracle e seu foco na funcionalidade RAG o tornam uma opção atraente para empresas que estão entrando no mundo da IA.
Referências e links de recursos
O guia definitivo para o cenário de bancos de dados vetoriais: 2024 e...
Navegando pela paisagem dos bancos de dados vetoriais - LinkedIn
Oracle anuncia a disponibilidade geral do AI Vector Search no Oracle Database 23ai
Guia do usuário do Oracle Database Oracle AI Vector Search, 23ai
langchain_cohere.embeddings.CohereEmbeddings — 🦜🔗 LangChain 0.2.3
14. Usando dados vetoriais — documentação python-oracledb 2.3.0b1
Outros blogs
