Gerar SQL de Prompts de Linguagem Natural Usando Selecionar IA

Autonomous AI Database on Dedicated Exadata Infrastructure Select AI permite consultar seus dados usando linguagem natural.

O recurso Selecionar IA permite que o Autonomous AI Database use IA generativa com LLMs (Large Language Models, Modelos de linguagem grande) para converter o texto de entrada do usuário no Oracle SQL. Selecione AI processa o prompt de linguagem natural, complementa o prompt com metadados e, em seguida, gera e executa uma consulta SQL.

Sobre o Select AI

Use linguagem natural para interagir com seu banco de dados e LLMs por meio do SQL para aumentar a produtividade do usuário e desenvolver aplicações baseadas em IA. A Select AI simplifica e automatiza o uso da IA generativa, seja gerando, executando e explicando SQL a partir de um prompt de linguagem natural, usando a geração aumentada de recuperação com armazenamentos de vetores, gerando dados sintéticos ou conversando com o LLM.

Quando você usa o Select AI, o Autonomous AI Database gerencia o processo de conversão de linguagem natural em SQL. Isso significa que você pode fornecer um prompt de linguagem natural, em vez de código SQL, para interagir com seus dados. A Select AI serve como uma ferramenta de produtividade para usuários e desenvolvedores de SQL e permite que usuários SQL não especialistas obtenham insights úteis de seus dados, sem precisar entender estruturas de dados ou linguagens técnicas.

A Select AI também automatiza o processo de geração aumentada de recuperação (RAG), desde a geração de incorporações de vetores até a recuperação de conteúdo relevante com base em seu prompt por meio de pesquisa de similaridade semântica usando seu armazenamento de vetores. Outros recursos incluem geração de dados sintéticos, suporte ao histórico de bate-papo para conversas e outros recursos, tudo a partir de uma interface SQL.

O pacote DBMS_CLOUD_AI permite a integração com um LLM especificado pelo usuário para gerar código SQL usando prompts de linguagem natural. Para geração de linguagem natural para SQL, esse pacote fornece um prompt aumentado para o LLM que contém os metadados relevantes do esquema do banco de dados. Isso permite gerar, executar e explicar consultas SQL com base em prompts de linguagem natural. Ele também facilita a geração aumentada de recuperação usando armazenamentos de vetores, geração de dados sintéticos e permite conversar com o LLM. O pacote DBMS_CLOUD_AI funciona com provedores de IA listados em Selecione seu Provedor de IA e LLMs.

Observação:

  • Você deve ter uma conta com o provedor de IA e fornecer as credenciais por meio de objetos DBMS_CLOUD_AI que o Autonomous AI Database usa.

  • É possível enviar prompts em vários idiomas. A qualidade do resultado depende das habilidades do LLM específico ou do modelo de incorporação (transformador) usado. Verifique sua documentação de modelo de LLM ou incorporação para obter suporte a vários idiomas.

Plataformas com Suporte

O Select AI é suportado no Autonomous AI Database Serverless e no Autonomous AI Database em Dedicated Exadata Infrastructure e Cloud at Customers.

  • Autonomous AI Database sem Servidor
  • Autonomous AI Database em Infraestrutura Dedicada do Exadata
  • Autonomous AI Database em Região Dedicada do Exadata Infrastructure
  • Autonomous AI Database Cloud@Customer

Terminologia Relacionada

É importante entender os vários termos usados com o Select AI antes de usá-lo.

Veja a seguir os termos relacionados ao recurso Selecionar AI:

Termo Definição
Conversas

As conversas no Select AI representam uma troca interativa entre o usuário e o sistema, permitindo que os usuários consultem ou interajam com o banco de dados por meio de uma série de prompts de linguagem natural. O Select AI incorpora conversas de curto prazo baseadas em sessão para gerar respostas sensíveis ao contexto para o prompt atual com base em interações anteriores. Até 10 prompts anteriores são incorporados à solicitação atual com conversas de curto prazo, criando um prompt aumentado que é enviado ao LLM. O Select AI suporta o uso de conversas de longo prazo personalizáveis, permitindo que você use o Select AI com diferentes tópicos sem misturar o contexto, que pode ser configurado por meio de APIs de conversa do Pacote DBMS_CLOUD_AI. Consulte Usar e Personalizar Conversas para obter mais detalhes.

Credencial do Banco de Dados

Credenciais do Banco de Dados são credenciais de autenticação usadas para acessar e interagir com bancos de dados. Eles geralmente consistem em um nome de usuário e uma senha, às vezes complementados por fatores de autenticação adicionais, como tokens de segurança. Essas credenciais são usadas para estabelecer uma conexão segura entre um aplicativo ou usuário e um banco de dados, garantindo que apenas indivíduos ou sistemas autorizados possam acessar e manipular os dados armazenados no banco de dados.

Alucinação no LLM

Alucinação no contexto de Grandes Modelos de Linguagem refere-se a um fenômeno em que o modelo gera texto incorreto, sem sentido ou não relacionado ao prompt de entrada. Apesar de ser um resultado da tentativa do modelo de gerar texto coerente, essas instâncias podem conter informações fabricadas, enganosas ou puramente imaginativas. A alucinação pode ocorrer devido a vieses nos dados de treinamento, falta de compreensão do contexto adequado ou limitações no processo de treinamento do modelo.

Serviço IAM O Oracle Cloud IAM (Identity and Access Management) permite controlar quem tem acesso a seus recursos na nuvem. Você pode controlar que tipo de acesso um grupo de usuários tem e a quais recursos específicos. Para saber mais, consulte Visão Geral do Identity and Access Management.

Prompts de Linguagem Natural

Os Prompts de Linguagem Natural são instruções legíveis por humanos ou solicitações fornecidas para orientar modelos de IA generativa, como Grandes Modelos de Linguagem. Em vez de usar linguagens de programação ou comandos específicos, os usuários podem interagir com esses modelos inserindo prompts em um formulário de linguagem mais conversacional ou natural. Em seguida, os modelos geram a saída com base no prompt fornecido.

Lista de Controle de Acesso (ACL) à Rede

Uma Lista de Controle de Acesso à Rede é um conjunto de regras ou permissões que definem qual tráfego de rede pode passar por um dispositivo de rede, como um roteador, firewall ou gateway. As ACLs são usadas para controlar e filtrar o tráfego de entrada e saída com base em vários critérios, como endereços IP, números de porta e protocolos. Eles desempenham um papel crucial na segurança da rede permitindo que os administradores gerenciem e restrinjam o tráfego de rede para evitar acesso não autorizado, possíveis ataques e violações de dados.

Pesquisa de Similaridade

A pesquisa de similaridade identifica e recupera pontos de dados que correspondem de perto a uma determinada consulta, comparando vetores de recursos em um armazenamento de vetores.

Distâncias de vetores

As distâncias vetoriais medem a similaridade ou dissimilaridade entre vetores de características, calculando a distância entre eles em um espaço multidimensional.

Índice Vetorial

Um índice vetorial organiza e armazena vetores de recursos para permitir a pesquisa e a recuperação eficientes de similaridade de dados relacionados.

Loja de vetores

Um armazenamento de vetores inclui sistemas que armazenam, gerenciam e permitem a pesquisa de similaridade semântica envolvendo incorporações de vetores. Isso inclui bancos de dados vetoriais independentes e o Oracle Database 23ai AI Vector Search.

Selecionar Casos de Uso de IA

A Select AI aprimora a interação de dados e permite que os desenvolvedores criem aplicações orientadas por IA diretamente do SQL, transformando prompts de linguagem natural em consultas SQL e respostas de texto, oferecendo suporte à interação de bate-papo com LLMs, aprimorando a precisão da resposta com dados atuais usando RAG e gerando dados sintéticos.

Os casos de uso incluem:

  • Gerar SQL com base em prompts de linguagem natural

    Produtividade do desenvolvedor: o Select AI aumenta significativamente a produtividade do desenvolvedor, fornecendo consultas SQL "iniciais" rapidamente. Os desenvolvedores podem inserir prompts de linguagem natural e o Select AI gera SQL com base nas tabelas e visualizações do esquema de banco de dados. Isso reduz o tempo e o esforço necessários para escrever consultas complexas do zero, permitindo que os desenvolvedores se concentrem em refinar e otimizar as consultas geradas para suas necessidades específicas.

    Consultas em linguagem natural para usuários finais: o Select AI permite que os usuários finais interajam com as tabelas e visualizações de dados subjacentes do seu aplicativo usando consultas em linguagem natural. Essa funcionalidade permite que usuários sem experiência em SQL façam perguntas e recuperem dados diretamente, tornando o acesso aos dados mais intuitivo e fácil de usar em relação aos recursos do LLM que está sendo usado e à qualidade dos metadados do esquema disponíveis.

    Outros recursos para geração de SQL: Os seguintes recursos destacados também são suportados para geração de linguagem natural para SQL:

    • Especificar esquema ou tabelas ou views: Selecionar AI permite que você especifique uma lista de objetos que consiste em esquema e, opcionalmente, tabelas ou views dentro desse esquema.

    • Detectar automaticamente metadados de tabela relevantes: o Select AI detecta automaticamente tabelas relevantes e envia metadados somente para essas tabelas específicas, relevantes para a consulta, no Oracle Database 26ai.

    • Restringir acesso à tabela: Selecionar IA permite restringir o acesso à tabela considerando apenas as tabelas listadas nos atributos de perfil do AI para geração de SQL.
    • Especificar distinção entre maiúsculas e minúsculas para colunas: Selecionar IA permite que o usuário especifique distinção entre maiúsculas e minúsculas, de forma que o LLM produza respostas sem distinção entre maiúsculas e minúsculas do banco de dados e do LLM.
  • Conversas

    Ative recursos semelhantes a chatbot com o Select AI, permitindo que os usuários tenham conversas naturais para consultar dados e executar ações. Esses chats podem acompanhar o contexto, dando respostas de acompanhamento que esclarecem ou expandem as perguntas originais. Esse cenário aumenta o engajamento e facilita consultas complicadas por meio de conversas.

  • Fluxos de trabalho agênticos com o Select AI Agent

    Use o Select AI Agent para coordenar agentes, ferramentas (SQL, RAG, Websearch, Notifications) e tarefas para cenários de várias etapas, como recuperação de dados e notificação. Consulte Criar Agentes Autônomos com o Select AI Agent para saber mais.

  • Geração de mídia personalizada

    A Select AI pode ser usada para gerar conteúdo de mídia personalizado, como e-mails adaptados aos detalhes individuais do cliente. Por exemplo, em seu prompt, você pode instruir o LLM a criar um email amigável e otimizado incentivando um cliente a experimentar um conjunto de produtos recomendados. Essas recomendações podem ser baseadas em dados demográficos do cliente ou outras informações específicas disponíveis no seu banco de dados. Esse nível de personalização aumenta o engajamento do cliente, fornecendo conteúdo relevante e atraente diretamente ao cliente.

  • Geração de código

    Com a ação Selecionar AI chat, você pode usar Selecionar AI para solicitar ao seu LLM especificado a geração de código a partir de prompts de linguagem natural. Este recurso suporta várias linguagens de programação, como SQL, Python, R e Java. Os exemplos incluem:

    • Código Python: "Escreva o código Python para calcular uma matriz de confusão em um DataFrame com colunas ACTUAL e PREDICTED."
    • SQL DDL: "Escreva a DDL para uma tabela SQL com nome de colunas, idade, renda e país."
    • Consulta SQL: "Grave a consulta SQL que usará o modelo no banco de dados do Oracle Machine Learning chamado CHURN_DT_MODEL para prever quais clientes serão cancelados e com qual probabilidade."
  • Geração Aumentada de Recuperações (RAG)

    Use o conteúdo de armazenamento de vetores para pesquisa de similaridade semântica para melhorar a precisão e a relevância do prompt nas respostas do LLM.

  • Geração de dados sintéticos

    Gere dados sintéticos usando LLMs que estejam em conformidade com seu esquema para testes de soluções, provas de conceito e outros usos. Os dados sintéticos podem suportar melhores testes de seus aplicativos na ausência de dados reais, levando à qualidade geral do seu aplicativo.

Diretrizes de Uso

Fornece diretrizes de uso que garantem o uso efetivo e adequado de prompts de linguagem natural para geração de SQL para garantir uma experiência de usuário aprimorada.

Uso pretendido

Esse recurso destina-se à geração e execução de consultas SQL resultantes de prompts de linguagem natural fornecidos pelo usuário. Ele automatiza o que um usuário pode fazer manualmente com base em seus metadados de esquema em combinação com um modelo de linguagem grande (LLM) de sua escolha.

Embora qualquer prompt possa ser fornecido, incluindo aqueles que não estão relacionados à produção de resultados de consulta SQL, Select AI se concentra na geração de consulta SQL. A opção Selecionar AI permite o envio de solicitações gerais com a ação chat.

Dados de Aumento de Prompt

O banco de dados aumenta o prompt especificado pelo usuário com metadados do banco de dados para mitigar alucinações do LLM. O prompt aumentado é enviado ao LLM especificado pelo usuário para produzir a consulta.

O banco de dados aumenta o prompt apenas com metadados de esquema. Esses metadados podem incluir definições de esquema, comentários de tabela e coluna e conteúdo disponível no dicionário de dados e no catálogo. Para fins de geração de SQL, o banco de dados não fornece conteúdo de tabela ou view (valores reais de linha ou coluna) ao aumentar o prompt.

A ação narrate, no entanto, fornece o resultado da consulta, que pode conter dados do banco de dados, ao LLM especificado pelo usuário a partir do qual gerar texto em linguagem natural descrevendo os resultados da consulta.

ADVERTÊNCIA:

Grandes modelos de linguagem (LLMs) foram treinados em um amplo conjunto de documentação e conteúdo de texto, geralmente da Internet. Como resultado, os LLMs podem ter incorporado padrões de conteúdo inválido ou malicioso, incluindo injeção de SQL. Assim, enquanto os LLMs são hábeis em gerar conteúdo útil e relevante, eles também podem gerar informações incorretas e falsas, incluindo consultas SQL que produzem resultados imprecisos e / ou comprometem a segurança de seus dados.

As consultas geradas em seu nome pelo provedor de LLM especificado pelo usuário serão executadas em seu banco de dados. Seu uso deste recurso é exclusivamente por sua conta e risco e, não obstante quaisquer outros termos e condições relacionados aos serviços fornecidos pela Oracle, constitui sua aceitação deste risco e expressa exclusão da responsabilidade ou responsabilidade da Oracle por quaisquer danos resultantes desse uso.

Selecione seu Provedor de IA e LLMs

Escolha um provedor de IA e um LLM que atenda aos seus padrões de segurança e se alinhe às suas necessidades específicas, como geração de texto ou código.

Diferentes LLMs se destacam em várias tarefas com base em seus dados de treinamento e propósito pretendido. Alguns modelos são excelentes para geração de texto, mas podem não ter um bom desempenho na geração de código, enquanto outros são especificamente otimizados para tarefas de codificação. Escolha um LLM que melhor se adapte às suas necessidades.

Provedor de IA LMs Modelo de Incorporação para RAG Objetivo

IA Generativa do OCI

  • meta.llama-3.3-70b-instruct (padrão)
  • meta.llama-3.2-90b-vision-instruct
  • meta.llama-3.2-11b-vision-instruct
  • meta.llama-3.1-70b-instruct
  • meta.llama-3.1-405b-instruct
  • cohere.command-r-08-2024
  • cohere.command-r-plus-08-2024
  • cohere.command-r-16k (obsoleto)
  • cohere.command–r-plus (obsoleto)
  • xai.grok-3
  • xai.grok-3-fast
  • cohere.embed-inglês-v3.0 (padrão)
  • cohere.embed-multilíngue-v3.0
  • cohere.embed-português-luz-v3.0
  • cohere.embed-luz multilíngue-v3.0

Consulte Sobre a Incorporação de Modelos no Serviço Generative AI.

Os modelos de Chat do OCI Generative AI são suportados para todas as ações SELECT AI, como runsql, showsql, explainsql, narrate e chat.

Os modelos de texto Gerar do OCI só são suportados para a ação SELECT AI chat.

Para configurar os atributos de perfil, consulte Atributos de perfil.

Serviço Azure OpenAI

  • GPT-4o
  • GPT-4
  • Turbo GPT-4 com visão
  • GPT-3.5-Turbo

incorporação de texto-ada-002

Mais adequado para gerar SQL a partir de prompts de linguagem natural, ação chat e Select AI RAG.

OpenAI

  • gpt-3.5-turbo (padrão)
  • gpt-4o
  • gpt-4o-mini
  • gpt-4
  • gpt-4-0613
  • gpt-4-32k
  • gpt-4-32k-0613
  • gpt-3.5-turbo-0613
  • gpt-3.5-turbo-16k
  • gpt-3.5-turbo-16k-0613

incorporação de texto-ada-002

Mais adequado para gerar SQL a partir de prompts de linguagem natural, ação chat e Select AI RAG.

OpenAI-Compatível

Modelos de provedores compatíveis com OpenAI, como:
  • IA do Fireworks
  • xAI
  • Outros
Incorporação de modelos de provedores de combinação OpenAI. Por exemplo, consulte Modelos de incorporação de IA do Fireworks.

Suporta uma ampla gama de casos de uso.

Cohere

  • comando (padrão)
  • command-nightly (experimental)
  • comando-r
  • comando-r-plus
  • luz de comando
  • command-light-nightly (experimental)
  • modelos personalizados

inglês-v2.0

Mais adequado para a ação chat.

Google

  • gemini-1.5-flash (padrão)
  • gemini-1.5-pro
  • gemini-1.0-pro
text-embedding-004 (padrão)

Mais adequado para gerar SQL a partir de prompts de linguagem natural, ação chat e Select AI RAG.

Antrópico

  • claude-3-5-sonnet-20240620 (padrão)
  • claude-3-opus-20240229
  • claude-3-sonnet-20240229
  • claude-3-haiku-20240307
NA

Mais adequado para gerar SQL a partir de prompts de linguagem natural, ação chat e Select AI RAG.

Hugging Face

  • Mixtral-8x7B-Instruct-v0.1 (padrão)
  • Meta-Llama-3-70B-Instrução
  • Qwen1.5-1.8B
  • outros modelos de chat
NA

Mais adequado para gerar SQL a partir de prompts de linguagem natural, ação chat e Select AI RAG.

AWS

  • amazon.titan-embed-text-v1
  • amazon.titan-embed-text-v2:0
  • cohere.embed-português-v3

Suporta uma ampla gama de casos de uso.

Observação:

  • Especifique o provedor compatível com OpenAI por meio do parâmetro provider_endpoint em vez do parâmetro provider. Consulte Atributos de Perfil.

  • Para modelos que aceitam imagens, use meta.llama-3.2-90b-vision-instruct. Este modelo é especificamente treinado para visão e imagens. Embora possa ser usado para geração de texto e SQL, o modelo é mais adequado para imagens. Para saber mais, consulte Bate-papo na OCI Generative AI.

    O modelo meta.llama-3.2-11b-vision-instruct oferece recursos multimodais robustos.

  • Os modelos de incorporação também são conhecidos como modelos de transformadores.

Configurar Perfis de IA Usando DBMS_CLOUD_AI

O Autonomous AI Database usa perfis de IA para facilitar e configurar o acesso a um LLM e para configurar a geração, a execução e a explicação de SQL com base em prompts de linguagem natural. Ele também facilita a geração aumentada de recuperação usando modelos de incorporação e índices vetoriais e permite conversar com o LLM.

Os perfis de IA incluem objetos de banco de dados que são o destino para consultas de linguagem natural. Os metadados usados nesses destinos podem incluir nomes de tabelas de banco de dados, nomes de colunas, tipos de dados de coluna e comentários. Você cria e configura perfis do AI usando os procedimentos DBMS_CLOUD_AI.CREATE_PROFILE e DBMS_CLOUD_AI.SET_PROFILE.

Requisitos para DBMS_CLOUD_AI

Para executar DBMS_CLOUD_AI, é necessário:

  • Acesso a uma conta na nuvem do Oracle Cloud Infrastructure e a uma instância do Autonomous AI Database.
  • Uma conta de API paga para um provedor de IA suportado, uma das seguintes:
    • OpenAI: Para permitir que OpenAI gere SQL de prompts de linguagem natural, obtenha chaves de API da sua conta paga OpenAI.

      Você pode encontrar sua chave de API secreta em suas Definições do usuário.

    • Cohere: para permitir que a Cohere gere SQL de prompts de linguagem natural, obtenha chaves de API da sua conta paga da Cohere.

      Clique em Painel de Controle e clique em Chave de API na navegação esquerda. Copie a chave de API padrão ou crie outra chave. Consulte API-Keys para obter mais informações.

    • Serviço OpenAI do Azure: Para ativar o Serviço OpenAI do Azure para gerar SQL com base em prompts de linguagem natural, configure e forneça acesso ao provedor de IA.

      Para usar o Azure OpenAI Service, execute as seguintes etapas:

      1. Obtenha suas chaves de API secretas. Você pode encontrar suas chaves de API na seção Resource Management do seu portal do Azure. Na página Recurso do Azure OpenAI Service, clique em Chaves e Ponto Final. Você pode copiar KEY1 ou KEY2.
      2. Crie um recurso do Azure OpenAI Service e implante um modelo: Crie e implante um recurso do Azure OpenAI Service.

        Dica:

        • Observe o nome do recurso e o nome da implantação, pois esses parâmetros são usados para fornecer permissão de acesso à rede e criar seu perfil do Azure OpenAI Service usando o procedimento DBMS_CLOUD_AI.CREATE_PROFILE.
        • Para saber mais sobre limites de taxa para token por minuto em um modelo, consulte Cotas e limites do Serviço OpenAI do Azure.
      3. Permitir acesso ao Serviço OpenAI do Azure:
        • Você pode usar sua chave de API secreta para permitir o acesso ao Azure OpenAI Service. Para saber mais, consulte o exemplo em Exemplos de Uso do Select AI.
    • OCI Generative AI: Consulte Como Gerar a Chave de Assinatura da API.
    • Google: Para permitir que o Google AI Studio gere respostas SQL e de texto aos prompts de linguagem natural, obtenha chaves de API da sua conta paga do Google AI Studio.
      1. Vá para Google AI Studio.
      2. Clique em Iniciar sessão no Google AI Studio.
      3. Clique em Obter chave de API na tela de prompt.
      4. Selecione todas as opções aplicáveis na próxima página.
      5. Clique em Create API key.
      6. Clique em Create API key in new project.

        A tela exibe o andamento e gera uma chave de API. Copie a chave e salve-a.

    • Antrópico: Para permitir que a Console do Desenvolvedor Antrópico gere respostas SQL e de texto aos prompts de linguagem natural, obtenha chaves de API da sua conta paga da Console do Desenvolvedor Antrópico.
      1. Vá para Console do Desenvolvedor Antrópico.
      2. Cadastre-se para uma conta se você ainda não tiver uma.
      3. Depois de fazer log-in, navegue até a seção API ou o painel de controle.
      4. Procure uma opção para gerar ou exibir chaves de API.
      5. Clique para criar uma nova chave de API.
      6. Copie a chave de API gerada e salve-a.

        A API Claude é um serviço pago. Você precisará adicionar créditos à sua conta para poder usar a chave de API.

    • Abraçando o Rosto: Para permitir que o Abraçando o Rosto como seu provedor de IA gere respostas de SQL e texto aos seus prompts de linguagem natural, obtenha chaves de API da sua conta paga do Abraçando o Rosto.
      1. Vá para Abraçando o Rosto.
      2. Cadastre-se para uma conta se você ainda não tiver uma.
      3. Navegue até as configurações da sua conta.
      4. No menu de navegação, localize os Tokens de Acesso.
      5. Clique para criar uma nova chave de API.
      6. Copie a chave de API gerada e salve-a.
    • AWS: Para ativar a AWS, obtenha a chave da API e o ID do modelo.

      Obtenha sua chave de API e use-a para criar credenciais por meio do DBMS_CLOUD.CREATE_CREDENTIAL.

      Siga este processo para obter a chave de API e o nome do modelo:

      1. Inscreva-se em uma conta da AWS se você ainda não tiver uma.
      2. Crie suas chaves de acesso e chaves secretas no Console do AWS Bedrock.
      3. Copie as chaves geradas e salve-as.
      4. Solicitar acesso aos seus modelos de base. Consulte Acessar modelos básicos do Amazon Bedrock.
      5. Obtenha o ID do modelo. Você precisa do ID do modelo no procedimento DBMS_CLOUD_AI.CREATE_PROFILE. O ID do Modelo depende dos recursos que você usa. Se você usar:

        Observação:

        O modelo importado não é suportado com a API de Conversas do Bedrock.

      Para usar a AWS como seu provedor, consulte Exemplo: Selecionar IA com a AWS.

  • Privilégios de ACL de rede para acessar seu provedor de IA externo.

    Observação:

    A ACL de rede não é aplicável ao OCI Generative AI.
  • Uma credencial que fornece acesso ao provedor de IA.
Para configurar DBMS_CLOUD_AI:
  1. Conceda o privilégio EXECUTE no pacote DBMS_CLOUD_AI ao usuário que deseja usar o Select AI.

    Por padrão, somente o usuário ADMIN recebe o privilégio EXECUTE. O usuário ADMIN pode conceder o privilégio EXECUTE a outros usuários.

    O exemplo a seguir concede o privilégio EXECUTE para ADB_USER:
    grant execute on DBMS_CLOUD_AI to ADB_USER;

    O exemplo a seguir concede a ADB_USER o privilégio para usar o ponto final api.openai.com.

    BEGIN  
        DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
             host => 'api.openai.com',
             ace  => xs$ace_type(privilege_list => xs$name_list('http'),
                                 principal_name => 'ADB_USER',
                                 principal_type => xs_acl.ptype_db)
       );
    END;
    /
    
  2. Conceda acesso de ACL de rede ao usuário que deseja usar Select AI e para o ponto final do provedor de AI.

    O usuário ADMIN pode conceder acesso à ACL de rede. Consulte Procedimento APPEND_HOST_ACE em Oracle Database 19c PL/SQL Packages and Types Reference ou Oracle Database 26ai PL/SQL Packages and Types Reference para obter mais informações.

  3. Crie uma credencial para permitir o acesso ao seu provedor de IA.

    Consulte Procedimento CREATE_CREDENTIAL para obter mais informações.

    Veja um exemplo de como criar uma credencial para ativar o acesso a OpenAI.

    EXEC DBMS_CLOUD.CREATE_CREDENTIAL('OPENAI_CRED', 'OPENAI', 'your_api_token');

APPEND_HOST_ACE Parâmetros de Função

Parâmetro Descrição

host

O host, que pode ser o nome ou o endereço IP do host. Você pode usar um curinga para especificar um domínio ou uma sub-rede IP. O nome do host ou do domínio não diferencia maiúsculas de minúsculas.

Para OpenAI, use api.openai.com.

Para a Cohere, use api.cohere.ai.

Para o Azure OpenAI Service, use <azure_resource_name>.openai.azure.com. Consulte Atributos de Perfil para saber mais sobre azure_resource_name.

Para o Google, use generativelanguage.googleapis.com.

Para Anthropic, use api.anthropic.com.

Para abraçar o rosto, use api-inference.huggingface.co.

ace

Entradas de controle de acesso (ACE). O tipo XS$ACE_TYPE é fornecido para construir cada entrada ACE para a ACL. Para obter mais detalhes, consulte Criando ACLs e ACEs no Oracle Database 19c Real Application Security Administrator's and Developer's Guide ou no Oracle Database 26ai Real Application Security Administrator's and Developer's Guide.

Parâmetros DBMS_CLOUD.CREATE_CREDENTIAL

Parâmetro Descrição

credential_name

O nome da credencial a ser armazenada. O parâmetro credential_name deve estar em conformidade com as convenções de nomenclatura de objetos Oracle, que não permitem espaços nem hifens.

username

Os argumentos username e password juntos especificam suas credenciais de provedor de AI.

username é um nome de usuário especificado pelo usuário.

password

Os argumentos username e password juntos especificam suas credenciais de provedor de AI.

O password é a chave de API secreta do seu provedor de IA e depende do provedor, ou seja, OpenAI, Cohere, Azure OpenAI Service, OCI, Google, Anthropic ou Hugging Face. Consulte para ver detalhes.

Criar e Definir um Perfil de IA

Descreve as etapas para criar e ativar um perfil do AI.

Use DBMS_CLOUD_AI.CREATE_PROFILE para criar um perfil do AI. Em seguida, inicie DBMS_CLOUD_AI.SET_PROFILE para ativar o perfil do AI para que você possa usar SELECT AI com um prompt de linguagem natural.

Observação:

Execute DBMS_CLOUD_AI.SET_PROFILE em cada nova sessão de banco de dados (conexão) antes de usar SELECT AI.

O exemplo a seguir com o provedor OpenAI cria um perfil AI chamado OPENAI e define o perfil OPENAI para a sessão do usuário atual.

-- Create AI profile
--
SQL> BEGIN
  DBMS_CLOUD_AI.create_profile(
      'OPENAI',
      '{"provider": "openai",
        "credential_name": "OPENAI_CRED",
        "object_list": [{"owner": "SH", "name": "customers"},
                        {"owner": "SH", "name": "sales"},
                        {"owner": "SH", "name": "products"},
                        {"owner": "SH", "name": "countries"}]
       }');
END;
/
 
PL/SQL procedure successfully completed.
 
--
-- Enable AI profile in current session
--
SQL> EXEC DBMS_CLOUD_AI.set_profile('OPENAI');
 
PL/SQL procedure successfully completed.

Usar Palavra-chave AI para Inserir Prompts

Use AI como a palavra-chave em uma instrução SELECT para interagir com o banco de dados usando prompts de linguagem natural.

A palavra-chave AI em uma instrução SELECT instrui o mecanismo de execução SQL a usar o LLM identificado no perfil de IA ativo para processar linguagem natural e gerar SQL.

Você pode usar a palavra-chave AI em uma consulta com clientes Oracle, como SQL Developer, Notebooks OML e ferramentas de terceiros, para interagir com o banco de dados em linguagem natural.

Observação:

Não é possível executar instruções PL/SQL, instruções DDL ou instruções DML usando a palavra-chave AI.

Sintaxe

A sintaxe para executar o prompt AI é:
SELECT AI action natural_language_prompt

Parâmetros

A seguir estão os parâmetros disponíveis para o parâmetro action:
Parâmetro Descrição

runsql

Execute o comando SQL fornecido usando um prompt de linguagem natural. Essa é a ação padrão e é opcional especificar esse parâmetro.

showsql

Exibe a instrução SQL de um prompt de linguagem natural.

narrate

A saída do prompt é explicada em linguagem natural. Essa opção envia o resultado SQL ao provedor de IA para produzir um resumo de linguagem natural.

chat

Gera uma resposta diretamente do LLM com base no prompt. Se conversation na função DBMS_CLOUD_AI.CREATE_PROFILE estiver definido como true, essa opção incluirá conteúdo de interações ou prompts anteriores, incluindo potencialmente metadados de esquema.

explainsql

O SQL gerado a partir do prompt é explicado em linguagem natural. Essa opção envia o SQL gerado ao provedor de IA para produzir uma explicação de linguagem natural.

Observações sobre Uso

  • Selecione AI não suportado no Database Actions ou no APEX Service. Você só pode usar a função DBMS_CLOUD_AI.GENERATE.

  • A palavra-chave AI só é suportada em uma instrução SELECT.

  • Não é possível executar instruções PL/SQL, instruções DDL ou instruções DML usando a palavra-chave AI.

  • A sequência é SELECT seguido por AI. Essas palavras-chave não distinguem maiúsculas de minúsculas. Depois que um DBMS_CLOUD_AI.SET_PROFILE é configurado, o texto após SELECT AI é um prompt de idioma natural. Se um perfil do AI não estiver definido, SELECT AI reportará o seguinte erro:

    ORA-00923: FROM keyword not found where expected
    00923. 00000 -  "FROM keyword not found where expected"
  • Regras de uso de caracteres especiais se aplicam de acordo com as diretrizes da Oracle. Por exemplo, use aspas simples duas vezes se estiver usando um apóstrofo em uma frase.

    select ai how many customers in SF don''t own their own home
  • Os LLMs estão sujeitos a alucinações e os resultados nem sempre estão corretos:

    • É possível que SELECT AI não consiga executar o SQL gerado para um prompt de linguagem natural específico.

    • É possível que SELECT AI não consiga gerar SQL para um prompt de linguagem natural específico.

    Nesse cenário, SELECT AI responde com informações para ajudá-lo a gerar SQL válido.

  • Use a ação chat, com SELECT AI chat, para saber mais sobre construções SQL. Para obter melhores resultados com a ação chat, use views ou tabelas de banco de dados com nomes de colunas contextuais ou considere adicionar comentários de coluna explicando valores armazenados nas colunas.

  • Para acessar views DBA ou USER, consulte DBMS_CLOUD_AI Views.

Usar e Personalizar Conversas

As conversas no Select AI se referem ao diálogo interativo entre o usuário e o sistema, em que uma sequência de prompts de linguagem natural fornecidos pelo usuário é armazenada e gerenciada para oferecer suporte à memória de longo prazo para interações de LLM.

O Select AI suporta conversas de curto prazo baseadas em sessão, que são ativadas no perfil AI, bem como conversas nomeadas de longo prazo, que são ativadas usando procedimentos ou funções específicos e IDs de conversa.

Observação:

O suporte para Conversas de IA Selecionadas está disponível no Oracle Database 19c a partir da versão 19.30 e no Oracle Database 26ai a partir da versão 23.26.1.

Tipos de Conversas

O Select AI suporta conversas de curto prazo baseadas em sessão e conversas personalizáveis.

Conversas de Curto Prazo baseadas em sessão: A opção Selecionar IA inclui conversas de curto prazo baseadas em sessão para gerar respostas sensíveis ao contexto para o prompt atual com base em interações anteriores.

Você pode ativá-lo definindo o atributo conversation como true|false em seu perfil do AI. Ao contrário do recurso de várias conversas, as conversas baseadas em sessão armazenam prompts apenas para a duração da sessão. Os prompts são armazenados em uma tabela temporária, eliminados automaticamente quando a sessão termina e não podem ser reutilizados e alternados entre as conversas.

Conversas Personalizáveis de Longo Prazo: o Select AI suporta a criação e o uso de conversas personalizáveis, permitindo que você use o Select AI com diferentes tópicos sem misturar contexto, melhorando a flexibilidade e a eficiência. Você pode criar, definir, excluir e atualizar conversas por meio das funções e procedimentos de conversa DBMS_CLOUD_AI. Quando você ativa conversas, o Select AI recupera o histórico de prompts e os envia ao LLM para gerar uma resposta para o prompt atual. Essas respostas são armazenadas em uma tabela persistente para uso futuro.

Observação:

As Conversas do AI selecionadas suportam as seguintes ações: runsql, showsql, explainsql, narrate e chat.

Como usar conversas personalizáveis

Você pode usar o Select AI para conversas personalizáveis das seguintes maneiras:

  • Defina o ID da conversa na sessão usando o procedimento DBMS_CLOUD_AI.SET_CONVERSATION_ID e execute SELECT AI <ACTION> <PROMPT>.

  • Informe o conversation_id no argumento params da função DBMS_CLOUD_AI.GENERATE.

Observação:

Se você usar várias conversas e a definição conversation: [true|false], o sistema ignorará a definição conversation.

No contexto da geração de consultas SQL (NL2SQL), as conversas permitem uma maneira mais intuitiva e acessível de trabalhar com seus dados, facilitando para os usuários extrair insights e executar tarefas sem precisar de conhecimento técnico profundo de SQL. As conversas também podem ser usadas com os recursos de chat e RAG do Select AI.

Por exemplo, as conversas fornecem uma maneira intuitiva de analisar dados:
  • Faça uma pergunta como "Qual é o número total de clientes?"
  • Acompanhamento com perguntas contextuais como:
    • "Quebra de contagem de clientes por país"
    • "Qual faixa etária é mais comum"
    • "Mantenha os 5 melhores clientes e seu país por suas compras e inclua uma classificação no resultado"

Para ativar conversas, consulte Exemplo: Ativar Conversas em Selecionar IA para obter um exemplo completo.

Conversas Baseadas em Sessão versus Conversas Personalizáveis

A tabela a seguir compara a conversa baseada em sessão e as conversas personalizáveis no Select AI:

Perguntas Conversas de Curto Prazo Baseadas em Sessão Conversas personalizáveis de longo prazo

Quando eu uso?

Melhor para bate-papos rápidos e temporários em que você deseja que o modelo se lembre de perguntas e respostas recentes durante uma única sessão. É útil quando você não precisa salvar ou reutilizar a conversa mais tarde.

Projetado para conversas mais longas ou contínuas que podem abranger várias sessões. É útil quando você deseja rastrear, revisar ou gerenciar o histórico de conversas ou quando diferentes partes de um aplicativo precisam acessar o mesmo contexto de conversa ao longo do tempo.

Como faço para ativar?

Defina {"conversation": true or false} no seu perfil do AI.

Use o procedimento DBMS_CLOUD_AI.SET_CONVERSATION_ID ou o DBMS_CLOUD_AI.GENERATE

Quantas conversas são permitidas?

Um.

Você pode criar várias conversas.

Se você especificar explicitamente os IDs de conversa, poderá alternar entre eles para associar prompts às conversas apropriadas, conforme necessário.

Onde os prompts são armazenados e por quanto tempo?

Os prompts são armazenados em uma tabela temporária e eliminados quando a sessão termina.

Os prompts são armazenados em uma tabela permanente.

Os prompts são retidos no banco de dados pelo número de dias especificado pelo parâmetro retention_days no procedimento DBMS_CLOUD_AI.CREATE_CONVERSATION. Após o período de retenção, a conversa e seus prompts são excluídos automaticamente. Você também pode excluir prompts manualmente usando o procedimento DBMS_CLOUD_AI.DELETE_CONVERSATION_PROMPT.

Quantos prompts são armazenados e quantos prompts são enviados ao LLM?

Um máximo de 10 prompts é armazenado e enviado ao LLM. Não é possível personalizar esse limite.

Todos os prompts são armazenados.

Por padrão, o sistema envia os 10 prompts mais recentes para o LLM. Você pode personalizar isso usando o parâmetro conversation_length. Consulte CREATE_CONVERSATION Atributos.

Posso excluir prompts individuais?

Não, não é possível excluir o prompt individual manualmente.

É possível excluir prompts individuais específicos usando o id do prompt conforme especificado na Exibição USER_CLOUD_AI_CONVERSATION_PROMPTS e usando o procedimento DBMS_CLOUD_AI.DELETE_CONVERSATION_PROMPT.

Os perfis de IA são usados para recuperação de conversas?

Sim, Selecionar IA recupera prompts e respostas geradas anteriormente usando o mesmo perfil de IA.

Não, Selecionar IA rastreia o perfil de IA usado ao armazenar prompts e respostas, mas não restringe sua recuperação com base nesse perfil. Ele envia todos os históricos de conversas para o LLM para orientar a geração de respostas, independentemente do perfil usado para gerá-las.

Onde posso verificar o histórico de prompts?

Os prompts são salvos em uma tabela temporária em CLOUD USER, mas não podem ser consultados.

É possível consultar e revisar conversas e prompts por meio das visualizações de conversa DBMS_CLOUD_AI. Consulte DBMS_CLOUD_AI Views para obter detalhes.

Forneça feedback para melhorar os LLMs

A Select AI permite que você forneça feedback para ajudar a melhorar a capacidade do seu LLM selecionado de gerar consultas SQL mais precisas.

Observação:

Esse recurso só está disponível no Oracle Database 23ai. Você pode usá-lo junto com as ações Selecionar IA existentes: runsql, showsql e explainsql. Certifique-se de que seu perfil do AI esteja configurado para geração NL2SQL e não para RAG.

Você pode fornecer feedback para melhorar a precisão do SQL gerado por meio da ação feedback ou do procedimento DBMS_CLOUD_AI.FEEDBACK. Selecione AI para criar um índice vetorial padrão chamado <profile_name>_FEEDBACK_VECINDEX com atributos padrão quando você usar o recurso de feedback pela primeira vez. Esse índice ajuda a refinar o SQL gerado no futuro com base no feedback fornecido. Consulte Índice de Vetor para FEEDBACK para obter mais informações.

Dica:

Use o procedimento DBMS_CLOUD_AI.FEEDBACK quando o seu LLM especificado não gerar a consulta SQL correta ou não retornar o resultado esperado de uma das ações NL2SQL SELECT AI. Você também pode usar o procedimento DBMS_CLOUD_AI.FEEDBACK para adicionar o SQL correto diretamente à tabela de vetores. Isso ajuda a orientar a geração de SQL futura, servindo como referência para prompts semelhantes.

Os seguintes tipos de feedback são aceitos:
  • Feedback positivo: você aprova e confirma a precisão do SQL gerado. O sistema armazena a consulta confirmada para referência futura.

  • Feedback negativo: Se os resultados da sua ação NL2SQL SELECT AI falharem em gerar o SQL correto, você poderá fornecer as melhorias necessárias da consulta SQL usando SELECT AI feedback <feedback> ou usando o procedimento DBMS_CLOUD_AI.FEEDBACK, identificando erros na consulta ou fornecendo orientação sobre o que era esperado na prosa. O sistema refina a consulta usando um LLM e armazena a versão refinada para futura geração de consulta Select AI. As consultas refinadas armazenadas são usadas como dicas e enviadas ao LLM como parte do prompt aumentado.

Benefícios do uso de feedback

A ação e o procedimento de feedback no Select AI introduz um mecanismo de ajuste de prompt que aumenta a precisão da geração de consultas SQL.

O proprietário do perfil do AI pode fornecer feedback para consultas SQL geradas e o sistema Select AI aprende da interação do usuário ao longo do tempo. Essa aprendizagem envolve a acumulação de um repositório de prompts e conteúdo de feedback em que a pesquisa vetorial é usada para identificar prompts semelhantes ao seu prompt atual. Os principais exemplos correspondentes são fornecidos como metadados para o LLM como parte do prompt aumentado. A seguir estão os benefícios:
  • Pode melhorar a precisão das consultas SQL.
  • Permite que o proprietário do perfil de IA forneça feedback confirmando as consultas corretas ou sugerindo correções, fornecendo a intenção semântica ou as definições de negócios para produzir uma consulta correta.
  • Usa feedback histórico como dicas para geração de consultas futuras, adaptando-se às suas necessidades.

Como fornecer feedback

Selecionar IA permite que você forneça feedback usando a ação feedback ou chamando o procedimento DBMS_CLOUD_AI.FEEDBACK.

Atenção:

Não use a ação de feedback em aplicativos em que vários usuários compartilham sessões de banco de dados em um único usuário de banco de dados que possui o perfil do AI. O proprietário do perfil de IA deve fornecer feedback somente após confirmar que a consulta corrigida é apropriada para todos os usuários desse perfil.

Você pode fornecer feedback incluindo o seguinte:
  • SQL_TEXT: Inclua o feedback entre aspas para sua consulta SQL atual ou você pode obter o SQL_TEXT para uma consulta específica consultando a view V$MAPPED_SQL.

  • SQL_ID: Você pode obter a SQL_ID consultando a view V$MAPPED_SQL.

  • Use o último SQL gerado: forneça seu feedback em linguagem natural.

    Observação:

    Para usar o último sql, certifique-se de definir a saída do servidor no Oracle SQL*Plus ou no Oracle SQLcl. Você deve ter o privilégio READ nas tabelas sys.v_$session e v_$mapped_sql.
    GRANT READ ON SYS.V_$MAPPED_SQL TO ADB_USER;
    GRANT READ ON SYS.V_$SESSION TO ADB_USER;

Consulte Procedimento FEEDBACK e Exemplo: Selecionar FEEDBACK de IA para saber mais.

Consultar Dados do Gráfico com Gráficos de Propriedades

O Select AI gera o Property Graph Query (PGQ) em Oracle Property Graphs usando linguagem natural. Ele permite que os usuários consultem dados gráficos por meio do operador GRAPH_TABLE com o mínimo de conhecimento de SQL.

O Select AI estende sua linguagem natural ao recurso SQL (NL2SQL) para criar gráficos de estruturas que permitem consultar Gráficos de Propriedades SQL usando linguagem natural. O Select AI aplica o operador GRAPH_TABLE para interpretar relacionamentos e atributos em dados estruturados por gráficos. Ele gera consultas de gráfico SQL ou PGQ com base nos objetos de dados definidos no perfil AI. Quando um gráfico de propriedades é incluído no perfil do AI, o Select AI usa IA generativa para criar uma consulta PGQ que faça referência ao gráfico por meio do operador GRAPH_TABLE. O LLM recebe automaticamente os metadados do objeto de gráfico, como instruções CREATE PROPERTY GRAPH, para gerar consultas precisas. Quando uma tabela, uma view ou um objeto relacional é especificado, o Select AI gera uma consulta SQL. Esse recurso simplifica consultas de correspondência de padrões em dados gráficos armazenados no Oracle AI Database e reduz a dependência da construção manual de consultas SQL.

Quando você cria um perfil do AI com um ou mais gráficos de propriedades definidos no atributo object_list, o LLM definido no perfil do AI interpreta prompts usando o contexto dos gráficos de propriedades especificados. O Select AI cria um prompt aumentado que inclui:
  • Instruções para construir consultas PGQ.

  • Metadados que descrevem os gráficos de propriedades fornecidos (de suas instruções CREATE PROPERTY GRAPH).

Este prompt aumentado é enviado ao LLM. Selecionar IA executa a consulta e retorna os resultados. Se um gráfico de propriedades for especificado junto com outros tipos de objeto, como tabelas, esquema ou exibições no perfil AI, Selecionar AI gerará um erro.

SQL x PGQ

Com Selecionar AI, o tipo de consulta gerada depende dos objetos definidos no atributo object_list do seu perfil AI.
  • Consulta SQL: usa dados relacionais, como esquema, tabelas ou views.

  • Consulta PGQ: usa gráficos de propriedades e aplica o operador GRAPH_TABLE para correspondência de padrões.

Consulte Gráfico de Propriedade SQL e Consultas de GRAPH SQL para obter mais detalhes.

Benefícios do uso do Select AI em gráficos de propriedades

Os usuários do banco de dados podem consultar gráficos de propriedades usando o Select AI para gerar consultas de gráficos a partir de linguagem natural, reduzindo o trabalho manual e melhorando a compreensão dos relacionamentos de gráficos.

Os principais benefícios incluem:
  • NL2SQL: O recurso Selecionar NL2SQL da IA agora se estende a consultas de gráficos, permitindo que os usuários escrevam prompts de linguagem natural, como "Localizar clientes que compraram um vestido".

  • SQL ou PGQ: Dependendo do objeto de dados, Select AI gera automaticamente a consulta SQL ou PGQ.

  • Produtividade: Reduz o tempo e o esforço na criação de consultas gráficas usando o operador GRAPH_TABLE.

  • Conversas: retém o contexto da conversa e consulta um gráfico de propriedades.

Limitações

A opção Selecionar IA para Gráficos de Propriedades não suporta os seguintes recursos:

Como usar o Select AI em gráficos de propriedades

A opção Selecionar IA permite que você explore dados gráficos usando a função DBMS_CLOUD_AI.GENERATE ou usando Select AI <action> <prompt>.

Depois de definir gráficos de propriedades no atributo object_list do seu perfil do AI, você poderá usar:
  • SELECT AI <ACTION> <PROMPT> na linha de comando SQL para gerar uma saída.

  • Função DBMS_CLOUD_AI.GENERATE e forneça seu prompt dentro da função.

Estas são as ações suportadas: runsql, showsql, explainsql, narrate e showpropmt. O Select AI for Property Graph também suporta conversas de longo prazo personalizáveis e de curto prazo baseadas em sessão.

Consulte Exemplo: Selecionar IA para Gráficos de Propriedades e Exemplo: Prompts de Amostra para Gráficos de Propriedades para saber mais.

Exemplos de Uso do Select AI

Explore a integração da Select AI da Oracle com vários provedores de IA suportados para gerar, executar e explicar SQL a partir de prompts de linguagem natural ou conversar com o LLM.

Exemplo: Selecionar Ações do AI

O exemplo a seguir ilustra ações como runsql (o padrão), showsql, narrate, chat, explainsql, feedback e summarize que você pode executar com SELECT AI. Esses exemplos usam o esquema sh com o provedor de IA e atributos de perfil especificados na função DBMS_CLOUD_AI.CREATE_PROFILE. Use as ações Selecionar AI após definir seu perfil AI usando o procedimento DBMS_CLOUD_AI.SET_PROFILE na sessão atual.

Para gerar um resumo do seu texto, use SELECT AI SUMMARIZE <TEXT>.

SQL> select ai how many customers exist;
 
CUSTOMER_COUNT
--------------
         55500
 
SQL> select ai showsql how many customers exist;
 
RESPONSE
----------------------------------------------------
SELECT COUNT(*) AS total_customers
FROM SH.CUSTOMERS
 
 
SQL> select ai narrate how many customers exist;
 
RESPONSE
------------------------------------------------------
There are a total of 55,500 customers in the database.
 
SQL> select ai chat how many customers exist;
 
RESPONSE
--------------------------------------------------------------------------------
It is impossible to determine the exact number of customers that exist as it con
stantly changes due to various factors such as population growth, new businesses
, and customer turnover. Additionally, the term "customer" can refer to individu
als, businesses, or organizations, making it difficult to provide a specific num
ber.


SQL> select ai explainsql how many customers in San Francisco are married;
 
RESPONSE
--------------------------------------------------------------------------------
SELECT COUNT(*) AS customer_count
FROM SH.CUSTOMERS AS c
WHERE c.CUST_STATE_PROVINCE = 'San Francisco' AND c.CUST_MARITAL_STATUS = 'Married';
 
Explanation:
- We use the 'SH' table alias for the 'CUSTOMERS' table for better readability.
- The query uses the 'COUNT(*)' function to count the number of rows that match the given conditions.
- The 'WHERE' clause is used to filter the results:
  - 'c.CUST_STATE_PROVINCE = 'San Francisco'' filters customers who have 'San Francisco' as their state or province.
  - 'c.CUST_MARITAL_STATUS = 'Married'' filters customers who have 'Married' as their marital status.
The result of this query will give you the count of customers in San Francisco who are married, using the column alias 'customer_count' for the result.
 
Remember to adjust the table and column names based on your actual schema if they differ from the example.
 
Feel free to ask if you have more questions related to SQL or database in general.

-- Feedback on SQL Text
-- Negative feedback example:
SQL > select ai feedback for query "select ai showsql how many watch histories in total", please use sum instead of count;
-- Positive feedback example:
SQL > select ai feedback for query "select ai showsql how many watch histories in total", the sql query generated is correct;
 
-- Feedback on SQL ID
-- Negative feedback example:
SQL > select ai feedback please use sum instead of count for sql_id  1v1z68ra6r9zf;
-- Positive feedback example:
SQL > select ai feedback sql query result is correct for sql_id  1v1z68ra6r9zf;
 
-- If not specified, use default LASTAI SQL
-- To use default LASTAI sql, make sure that set server output off;
-- Negative feedback example:
SQL > select ai feedback please use ascending sorting for ranking;
-- Positive feedback example:
SQL > select ai feedback the result is correct;

SQL> SELECT AI SUMMARIZE
Like countless other people around the globe, I stream music, and like more
than six hundred million of them I mainly use Spotify. Streaming currently
accounts for about eighty per cent of the American recording industry’s
revenue, and in recent years Spotify’s health is often consulted as a measure
for the health of the music business over all. Last spring, the International
Federation of the Phonographic Industry reported global revenues of $28.6
billion, making for the ninth straight year of growth. All of this was
unimaginable in the two-thousands, when the major record labels appeared
poorly equipped to deal with piracy and the so-called death of physical media.
On the consumer side, the story looks even rosier. Adjusted for inflation, a
 
... (skipped 1000 rows in the middle)
 
Pelly writes of some artists, in search of viral fame, who surreptitiously use
social media to effectively beta test melodies and motifs, basically putting
together songs via crowdsourcing. Artists have always fretted about the
pressure to conform, but the data-driven, music-as-content era feels
different. “You are a Spotify employee at that point,” Daniel Lopatin, who
makes abstract electronic music as Oneohtrix Point Never, told Pelly. “If your
art practice is so ingrained in the brutal reality that Spotify has outlined
for all of us, then what is the music that you’re not making? What does the
music you’re not making sound like?” Listeners might wonder something similar.
What does the music we’re not hearing sound like?;
 
 
RESPONSE
------------------------------------------------------------------------------
The music streaming industry, led by Spotify, has revolutionized the way
people consume music, with streaming accounting for 80% of the American
recording industry's revenue. However, this shift has also complicated the
lives of artists, who struggle to survive in a hyper-abundant present where
music is often valued for its convenience rather than its artistic merit.
Spotify's algorithms prioritize popularity and profitability over artistic
diversity, leading to a homogenization of music and a devaluation of the
labor that goes into creating it. Meanwhile, the company's executives reap
enormous profits, with CEO Daniel Ek's net worth rivaling that of the
wealthiest musicians. As music critic Liz Pelly argues, the streaming economy
raises important questions about autonomy, creativity, and the value of art
in a world where everything is readily available and easily accessible.

Exemplo: selecione AI com AWS

Este exemplo mostra como você pode usar a AWS para gerar, executar e explicar SQL a partir de prompts de linguagem natural ou chat usando os modelos disponíveis com a AWS.

O exemplo a seguir mostra como usar a AWS como provedor de IA com o Amazon Bedrock e seus modelos básicos. O exemplo mostra como criar credenciais da AWS, fornecer acesso à rede, criar um perfil de IA e usar ações Selecionar IA para gerar consultas SQL a partir de prompts de linguagem natural e chat usando os modelos básicos da AWS.

Para usar a AWS, obtenha chave de acesso, chaves secretas e ID do modelo. Consulte aqui. Use o ID do modelo como o atributo model no procedimento DBMS_CLOUD_AI.CREATE_PROFILE. Especifique o atributo model explicitamente, pois nenhum modelo padrão foi fornecido.

--Grant EXECUTE privilege to ADB_USER
GRANT EXECUTE on DBMS_CLOUD_AI to ADB_USER; 

--
-- Create Credential for AI provider
--
BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'AWS_CRED',
        username    => '<your_AWS_access_key>',
        password    => '<your_AWS_secret_key>'
      );
END;
/
 
PL/SQL procedure successfully completed.
 
 
--
-- Grant Network ACL for AWS
--
BEGIN
      DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
        host => 'bedrock-runtime.us-east-1.amazonaws.com',
        ace  => xs$ace_type(privilege_list => xs$name_list('http'),
                    principal_name => 'ADB_USER',
                    principal_type => xs_acl.ptype_db)
       );
END;
/
 
PL/SQL procedure successfully completed.
 


--
-- Create AI profile 
--
BEGIN
      DBMS_CLOUD_AI.CREATE_PROFILE(
        profile_name =>'AWS',
        attributes   =>'{"provider": "aws",
          "credential_name": "AWS_CRED",
          "object_list": [{"owner": "SH", "name": "customers"},                
                        {"owner": "SH", "name": "countries"},                
                        {"owner": "SH", "name": "supplementary_demographics"},
                        {"owner": "SH", "name": "profits"},                  
                        {"owner": "SH", "name": "promotions"},               
                        {"owner": "SH", "name": "products"}],
           "model" : "anthropic.claude-v2",
           "conversation" : "true"
          }');
END;
/
 
 
PL/SQL procedure successfully completed.


--
-- Enable AI profile in current session
--
EXEC DBMS_CLOUD_AI.SET_PROFILE('AWS');

PL/SQL procedure successfully completed.
 
--
-- Use AI
--

SELECT AI how many customers exist;
"RESPONSE"
"COUNT(*)"
55500


SELECT AI how many customers in San Francisco are married;
"RESPONSE"
"COUNT(*)"
46

SELECT AI showsql how many customers in San Francisco are married;
"RESPONSE"
"SELECT COUNT(*) AS "Number of Married Customers in San Francisco"
FROM "SH"."CUSTOMERS" C
WHERE UPPER(C."CUST_CITY") = UPPER('San Francisco')
AND UPPER(C."CUST_MARITAL_STATUS") = UPPER('Married')"

SELECT AI explainsql how many customers in San Francisco are married;

"RESPONSE""SELECT 
COUNT(*) AS "Number of Married Customers in San Francisco"
FROM "SH"."CUSTOMERS" C
WHERE C."CUST_CITY" = 'San Francisco'
AND C."CUST_MARITAL_STATUS" = 'Married'

Explanation:
- Used table alias C for CUSTOMERS table
- Used easy to read column names like CUST_CITY, CUST_MARITAL_STATUS
- Enclosed table name, schema name and column names in double quotes 
- Compared string values in WHERE clause without UPPER() since the values are not in double quotes
- Counted number of rows satisfying the condition and aliased the count as "Number of Married Customers in San Francisco""

SELECT AI narrate what are the top 3 customers in San Francisco;
"RESPONSE"
The top 3 customers in San Francisco ordered by credit limit in descending order are:

1. Bert Katz
2. Madallyn Ladd  
3. Henrietta Snodgrass

SELECT AI chat what is Autonomous AI Database;
"RESPONSE"
"An Autonomous AI Database is a cloud database service provided by Oracle Corporation. Some key features of Oracle Autonomous AI Database include:

- Fully automated and self-driving - The database automatically upgrades, patches, tunes, and backs itself up without any human intervention required.

- Self-securing - The database uses machine learning to detect threats and automatically apply security updates.

- Self-repairing - The database monitors itself and automatically recovers from failures and errors without downtime.

- Self-scaling - The database automatically scales compute and storage resources up and down as needed to meet workload demands. 

- Serverless - The database is accessed as a cloud service without having to manually provision any servers or infrastructure.

- High performance - The database uses Oracle's advanced automation and machine learning to continuously tune itself for high performance.

- Multiple workload support - Supports transaction processing, analytics, graph processing, etc in a single converged database.

- Fully managed - Oracle handles all the management and administration of the database. Users just load and access their data.

- Compatible - Supports common SQL and Oracle PL/SQL for easy migration from on-prem Oracle databases.

So in summary, an Oracle Autonomous AI Database is a fully automated, self-driving, self-securing, and self-repairing database provided as a simple cloud service. The automation provides high performance, elasticity, and availability with minimal human labor required."

--
--Clear the profile
--
BEGIN
   DBMS_CLOUD_AI.CLEAR_PROFILE;
END;
/
PL/SQL procedure successfully completed.

--
--Drop the profile
--
EXEC DBMS_CLOUD_AI.DROP_PROFILE('AWS');
 
PL/SQL procedure successfully completed.

Exemplo: Ativar Conversas no Select AI

Estes exemplos ilustram a ativação de conversas no Select AI.

Observação:

Um usuário com privilégios de administrador (ADMIN) deve conceder EXECUTE e ativar a lista de controle de acesso à rede (ACL).

Conversas Baseadas em Sessão

Crie seu perfil de IA. Defina o atributo conversation como true no perfil. Essa ação inclui conteúdo de interações ou prompts anteriores, potencialmente incluindo metadados de esquema, e defina seu perfil. Depois que o perfil estiver ativado, você poderá começar a ter conversas com seus dados. Use a linguagem natural para fazer perguntas e acompanhar conforme necessário.


--Grants EXECUTE privilege to ADB_USER
--
SQL> grant execute on DBMS_CLOUD_AI to ADB_USER;

-- Grant Network ACL for OpenAI endpoint
--
SQL> BEGIN  
     DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
         host => 'api.openai.com',
         ace  => xs$ace_type(privilege_list => xs$name_list('http'),
                             principal_name => 'ADB_USER',
                             principal_type => xs_acl.ptype_db)
     );
    END;
    /
 
PL/SQL procedure successfully completed.
 
--
-- Create Credential for AI provider
--
EXEC
DBMS_CLOUD.CREATE_CREDENTIAL(
CREDENTIAL_NAME   => 'OPENAI_CRED', 
username          =>  'OPENAI', 
password          =>  '<your_api_token>');
 
PL/SQL procedure successfully completed.
 
--
-- Create AI profile
--
BEGIN
  DBMS_CLOUD_AI.CREATE_PROFILE(
  profile_name   => 'OPENAI',
  attributes     =>'{"provider": "openai",                                                                   
        "credential_name": "OPENAI_CRED",                                     
        "object_list": [{"owner": "SH", "name": "customers"},                
                        {"owner": "SH", "name": "countries"},                
                        {"owner": "SH", "name": "supplementary_demographics"},
                        {"owner": "SH", "name": "profits"},                  
                        {"owner": "SH", "name": "promotions"},               
                        {"owner": "SH", "name": "products"}],
        "conversation": "true"                
       }');                                                                  
     END;                                                                         
     / 
 
PL/SQL procedure successfully completed.
 
--
-- Enable AI profile in current session
--
SQL> EXEC DBMS_CLOUD_AI.SET_PROFILE('OPENAI');
 
PL/SQL procedure successfully completed.
 
--
-- Get Profile in current session
--
SQL> SELECT DBMS_CLOUD_AI.get_profile() from dual;
 
DBMS_CLOUD_AI.GET_PROFILE()
--------------------------------------------------------------------------------
"OPENAI"
 
--
-- Use AI
--
what are the total number of customers;
 
CUSTOMER_COUNT
--------------
         55500
 
break out count of customers by country;   
 
RESPONSE
-----------------
COUNTRY_NAME 			CUSTOMER_COUNT
Italy 				7780
Brazil 				832
Japan 				624
United Kingdom 			7557
Germany 			8173
United States of America 	18520
France 				3833
Canada 				2010
Spain 				2039
China 				712
Singapore 			597
New Zealand 			244
Poland 	708
Australia 			831
Argentina 			403
Denmark 			383
South Africa 			88
Saudi Arabia 			75
Turkey 				91

  
what age group is most common;
 
RESPONSE
--------------------------------------------------------------------------------
AGE_GROUP 	CUSTOMER_COUNT
65+ 		28226
 
select ai keep the top 5 customers and their country by their purchases and include a rank in the result;
 
RESPONSE
--------------------------------------------------------------------------------
RANK 	CUSTOMER_NAME 		COUNTRY 	PURCHASES
1 	Abigail Ruddy 		Japan 		276
2 	Abigail Ruddy 		Italy 		168
3 	Abigail Ruddy 		Japan 		74
3 	Abner Robbinette 	Germany 	74
5 	Abner Everett 		France 		68
 
 
SQL> EXEC DBMS_CLOUD_AI.DROP_PROFILE('OPENAI');
 
PL/SQL procedure successfully completed.

Conversas personalizáveis

Os exemplos a seguir demonstram como usar a API de gerenciamento de conversas com suporte a conversas personalizáveis. Para usar Selecionar IA para várias conversas:
  1. Criar uma conversa
  2. Definir a conversa na sessão do usuário atual
  3. Usar Select AI <action> <prompt>
Você pode criar e definir a conversa das seguintes maneiras:
  • Use a função DBMS_CLOUD_AI.CREATE_CONVERSATION e, em seguida, defina a conversa usando DBMS_CLOUD_AI.SET_CONVERSATION_ID.
  • Chame o procedimento DBMS_CLOUD_AI.CREATE_CONVERSATION diretamente para criar e definir a conversa em uma etapa.
Exemplo: Criar e Definir Conversas Personalizáveis

O exemplo a seguir demonstra como criar uma conversa usando a função DBMS_CLOUD_AI.CREATE_CONVERSATION e defini-la usando o procedimento DBMS_CLOUD_AI.SET_CONVERSATION_ID.

SELECT DBMS_CLOUD_AI.CREATE_CONVERSATION;  -- in 19c, run SELECT DBMS_CLOUD_AI.create_conversation FROM dual;
  
 
CREATE_CONVERSATION
------------------------------------
30C9DB6E-EA4D-AFBA-E063-9C6D46644B92
 
 
EXEC DBMS_CLOUD_AI.SET_CONVERSATION_ID('30C9DB6E-EA4D-AFBA-E063-9C6D46644B92');
 
PL/SQL procedure successfully completed

O exemplo a seguir demonstra como executar o procedimento DBMS_CLOUD_AI.CREATE_CONVERSATION para criar e definir a conversation_id diretamente.

EXEC DBMS_CLOUD_AI.create_conversation;
 
PL/SQL procedure successfully completed.

Você também pode personalizar os atributos de conversa, como title, description, retention_days e conversation_length.

SELECT DBMS_CLOUD_AI.CREATE_CONVERSATION(
            attributes => '{"title":"My first conversation", 
			"description":"this is my first conversation", 
			"retention_days":5, 
			"conversation_length":5}');
  
 
CREATE_CONVERSATION
------------------------------------
38F8B874-7687-2A3F-E063-9C6D4664EC3A

Você pode exibir se existe uma determinada conversa consultando a view DBA/USER_CLOUD_AI_CONVERSATIONS.

-- Verify the setup
SELECT conversation_id, conversation_title, description, retention_days, 
conversation_length FROM DBA_CLOUD_AI_CONVERSATIONS WHERE 
conversation_id = '38F8B874-7687-2A3F-E063-9C6D4664EC3A';
 
CONVERSATION_ID                      	CONVERSATION_TITLE                              DESCRIPTION                        RETENTION_DAYS                 CONVERSATION_LENGTH
------------------------------------ 	----------------------------------------------- ---------------------------------- ------------------------------ -------------------
38F8B874-7687-2A3F-E063-9C6D4664EC3A 	My first conversation                           this is my first conversation     +00005 00:00:00.000000         5

Você também pode verificar se uma conversa está definida chamando a função DBMS_CLOUD_AI.GET_CONVERSATION_ID.

SELECT DBMS_CLOUD_AI.GET_CONVERSATION_ID;
 
 
--------------------------------------------------------------------------------
30C9DB6E-EA4F-AFBA-E063-9C6D46644B92
Exemplo: Usar Conversas Personalizáveis com o Select AI

Depois de criar e definir a conversa e ativar seu perfil de IA, você poderá começar a interagir com seus dados. Use a linguagem natural para fazer perguntas e acompanhar conforme necessário.

Use SELECT AI <ACTION> <PROMPT>.

SELECT AI CHAT What is the difference in weather between Seattle and San Francisco?;
 
RESPONSE
--------------------------------------------------------------------------------
Seattle and San Francisco are both located on the West Coast of the United State
s, but they have distinct weather patterns due to their unique geography and cli
mate conditions. Here are the main differences:
 
1. **Rainfall**: Seattle is known for its rainy reputation, with an average annu
al rainfall of around 37 inches (94 cm). San Francisco, on the other hand, recei
ves significantly less rainfall, with an average of around 20 inches (51 cm) per
 year.
2. **Cloud Cover**: Seattle is often cloudy, with an average of 226 cloudy days
per year. San Francisco is also cloudy, but to a lesser extent, with an average
of 165 cloudy days per year.
 
......
 
 
SELECT AI CHAT Explain the difference again in one paragraph only.;
 
RESPONSE
--------------------------------------------------------------------------------
Seattle and San Francisco have different weather patterns despite both experienc
ing a mild oceanic climate. San Francisco tends to be slightly warmer, with aver
age temperatures ranging from 45?F to 67?F, and receives less rainfall, around 2
0 inches per year, mostly during winter. In contrast, Seattle is cooler, with te
mperatures ranging from 38?F to 64?F, and rainier, with around 37 inches of rain
fall per year, distributed throughout the year. San Francisco is also known for
its fog, particularly during summer, and receives more sunshine, around 160 sunn
y days per year, although it's often filtered through the fog. Overall, San Fran
cisco's weather is warmer and sunnier, with more pronounced seasonal variations,
 while Seattle's is cooler and rainier, with more consistent temperatures throug
hout the year.
Exemplo: Usar a Função GERARATE para Comparar Duas Conversas

O exemplo a seguir mostra como duas conversas são usadas de forma intercambiável para fazer perguntas e verificar respostas precisas. Cada conversa começa com uma pergunta diferente focada na comparação. Mais tarde, quando você faz a mesma pergunta de acompanhamento em ambas as conversas, cada uma retorna uma resposta diferente com base em seu contexto anterior.

-- First conversation
SELECT DBMS_CLOUD_AI.CREATE_CONVERSATION;
 
 
CREATE_CONVERSATION
------------------------------------
30C9DB6E-EA4D-AFBA-E063-9C6D46644B92



-- Second conversation
SELECT DBMS_CLOUD_AI.CREATE_CONVERSATION;
 
 
CREATE_CONVERSATION
------------------------------------
30C9DB6E-EA4E-AFBA-E063-9C6D46644B92


-- Call generate using the first conversation.
SELECT DBMS_CLOUD_AI.GENERATE(
        prompt       =>  'What is the difference in weather between Seattle and San Francisco?',
        profile_name =>  'GENAI',
        action       =>  'CHAT',
        params       =>  '{"conversation_id":"30C9DB6E-EA4D-AFBA-E063-9C6D46644B92"}') AS RESPONSE;
 
 
RESPONSE
--------------------------------------------------------------------------------
Seattle and San Francisco, both located in the Pacific Northwest and Northern Ca
lifornia respectively, experience a mild oceanic climate. However, there are som
e notable differences in their weather patterns:
 
1. **Temperature**: San Francisco tends to be slightly warmer than Seattle, espe
cially during the summer months. San Francisco's average temperature ranges from
 45?F (7?C) in winter to 67?F (19?C) in summer, while Seattle's average temperat
ure ranges from 38?F (3?C) in winter to 64?F (18?C) in summer.
 
2. **Rainfall**: Seattle is known for its rainy reputation, with an average annu
al rainfall of around 37 inches (94 cm). San Francisco receives less rainfall, w
ith an average of around 20 inches (51 cm) per year. However, San Francisco's ra
infall is more concentrated during the winter months, while Seattle's rainfall i
s more evenly distributed throughout the year.
 
......

-- Call generate using the second conversation.
SELECT DBMS_CLOUD_AI.GENERATE(
        prompt       =>  'How does the cost of living compare between New York and Los Angeles?',
        profile_name =>  'GENAI',
        action       =>  'CHAT',
        params       =>  '{"conversation_id":"30C9DB6E-EA4E-AFBA-E063-9C6D46644B92"}') AS RESPONSE;
 
 
RESPONSE
--------------------------------------------------------------------------------
The cost of living in New York and Los Angeles is relatively high compared to ot
her cities in the United States. However, there are some differences in the cost
 of living between the two cities. Here's a comparison of the cost of living in
New York and Los Angeles:
 
1. Housing: The cost of housing is significantly higher in New York than in Los
Angeles. The median home price in New York is around $999,000, while in Los Ange
les it's around $849,000. Rent is also higher in New York, with the average rent
 for a one-bedroom apartment being around $3,000 per month, compared to around $
2,400 per month in Los Angeles.
 
2. Food: The cost of food is relatively similar in both cities, with some variat
ion in the cost of certain types of cuisine. However, eating out in New York can
 be more expensive, with the average cost of a meal at a mid-range restaurant be
ing around $15-20 per person, compared to around $12-18 per person in Los Angele
s.
 
......


-- Call generate using the first conversation.
SELECT DBMS_CLOUD_AI.GENERATE(
        prompt       =>  'Explain the difference again in one paragraph only.',
        profile_name =>  'GENAI',
        action       =>  'CHAT',
        params       =>  '{"conversation_id":"30C9DB6E-EA4D-AFBA-E063-9C6D46644B92"}') AS RESPONSE;
 
 
RESPONSE
--------------------------------------------------------------------------------
Seattle and San Francisco have different weather patterns despite both experienc
ing a mild oceanic climate. San Francisco tends to be slightly warmer, with aver
age temperatures ranging from 45?F to 67?F, and receives less rainfall, around 2
0 inches per year, mostly during winter. In contrast, Seattle is cooler, with te
mperatures ranging from 38?F to 64?F, and rainier, with around 37 inches of rain
fall per year, distributed throughout the year. San Francisco is also known for
its fog, particularly during summer, and receives more sunshine, around 160 sunn
y days per year, although it's often filtered through the fog. Overall, San Fran
cisco's weather is warmer and sunnier, with more pronounced seasonal variations,
 while Seattle's is cooler and rainier, with more consistent temperatures throug
hout the year.


-- Call generate using the second conversation.
SELECT DBMS_CLOUD_AI.GENERATE(
        prompt       =>  'Explain the difference again in one paragraph only.',
        profile_name =>  'GENAI',
        action       =>  'CHAT',
        params       =>  '{"conversation_id":"30C9DB6E-EA4E-AFBA-E063-9C6D46644B92"}') AS RESPONSE;
 
 
RESPONSE
--------------------------------------------------------------------------------
The cost of living in New York is approximately 20-30% higher than in Los Angele
s, mainly due to the higher cost of housing and transportation. New York has a m
edian home price of around $999,000 and average rent of $3,000 per month for a o
ne-bedroom apartment, compared to Los Angeles' median home price of $849,000 and
 average rent of $2,400 per month. While the cost of food and utilities is relat
ively similar in both cities, the cost of transportation is higher in Los Angele
s due to its car-centric culture, but the cost of public transportation is highe
r in New York. Overall, the total monthly expenses for a single person in New Yo
rk can range from $4,600, compared to around $4,050 in Los Angeles, making New Y
ork the more expensive city to live in.

Você pode chamar a função DBMS_CLOUD_AI.GENERATE sem especificar uma conversa; no entanto, em tais casos, não deve ser esperada uma resposta significativa.

-- Ask SELECT AI using the second conversation.
SELECT DBMS_CLOUD_AI.GENERATE(
        prompt       =>  'Explain the difference again in one paragraph only.',
        profile_name =>  'GENAI',
        action       =>  'CHAT') AS RESPONSE;
 
 
RESPONSE
--------------------------------------------------------------------------------
There is no previous explanation to draw from, as this is the beginning of our c
onversation. If you would like to ask a question or provide a topic, I would be
happy to explain the differences related to it in one paragraph.
Exemplo: Verificar Conversas por meio de Views DBMS_CLOUD_AI

Você pode consultar as visualizações de conversa DBMS_CLOUD_AI para revisar os detalhes da conversa e do prompt. Consulte para mais detalhes.

Observação:

O

As views com o prefixo DBA_ só estão disponíveis para usuários com privilégios de administrador (ADMIN).

SELECT conversation_id, conversation_title, description FROM dba_cloud_ai_conversations;
 
CONVERSATION_ID
------------------------------------
CONVERSATION_TITLE
----------------------------------------------------------------------------------------------------
DESCRIPTION
--------------------------------------------------------------------------------
30C9DB6E-EA4D-AFBA-E063-9C6D46644B92
Seattle vs San Francisco Weather
The conversation discusses the comparison of weather patterns between Seattle an
d San Francisco, focusing on the differences in temperature, rainfall, fog, suns
hine, and seasonal variation between the two cities.
 
30C9DB6E-EA4E-AFBA-E063-9C6D46644B92
NY vs LA Cost Comparison
The conversation discusses and compares the cost of living in New York and Los A
ngeles, covering housing, food, transportation, utilities, and taxes to provide
an overall view of the expenses in both cities.

SELECT conversation_id, count(*) FROM dba_cloud_ai_conversation_prompts
     GROUP BY conversation_id;
 
CONVERSATION_ID                COUNT(*)
------------------------------------ ----------
30C9DB6E-EA4D-AFBA-E063-9C6D46644B92          2
30C9DB6E-EA4E-AFBA-E063-9C6D46644B92          2
Exemplo: Atualizar Detalhes da Conversa

Você pode atualizar o title, description e retention_days de uma conversa usando o procedimento DBMS_CLOUD_AI.UPDATE_CONVERSATION. Você pode verificar a atualização consultando a view de conversa DBMS_CLOUD_AI.

-- Update the second conversation's title, description and retention_days
SQL> EXEC DBMS_CLOUD_AI.update_conversation(conversation_id => '30C9DB6E-EA4E-AFBA-E063-9C6D46644B92', 
											attributes => '{"retention_days":20, 
														"description":"This a description", 
														"title":"a title", 
														"conversation_length":20}');
 
PL/SQL procedure successfully completed.
 
 
-- Verify the information for the second conversation
SQL> SELECT conversation_title, description, retention_days
FROM dba_cloud_ai_conversations
WHERE conversation_id = '30C9DB6E-EA4E-AFBA-E063-9C6D46644B92';
 
CONVERSATION_TITLE         DESCRIPTION                          RETENTION_DAYS         LENGTH
-------------------------- ------------------------------------ -------------- --------------
a title                    This a description                   20                         20
Exemplo: Excluir um Prompt

Você pode excluir um prompt individual de suas conversas e verificar a modificação consultando a exibição de conversa DBMS_CLOUD_AI.

-- Find the latest prompt for first conversation
SELECT conversation_prompt_id FROM dba_cloud_ai_conversation_prompts
     WHERE conversation_id = '30C9DB6E-EA4D-AFBA-E063-9C6D46644B92'
     ORDER BY created DESC
     FETCH FIRST ROW ONLY;
 
CONVERSATION_PROMPT_ID
------------------------------------
30C9DB6E-EA61-AFBA-E063-9C6D46644B92
 
 
-- Delete the prompt
EXEC DBMS_CLOUD_AI.DELETE_CONVERSATION_PROMPT('30C9DB6E-EA61-AFBA-E063-9C6D46644B92');
 
PL/SQL procedure successfully completed.
 
 
-- Verify if the prompt is deleted
SELECT conversation_prompt_id FROM dba_cloud_ai_conversation_prompts
WHERE conversation_id = '30C9DB6E-EA4D-AFBA-E063-9C6D46644B92';
 
-- Only one prompt now
CONVERSATION_PROMPT_ID
------------------------------------
30C9DB6E-EA5A-AFBA-E063-9C6D46644B92
Exemplo: Eliminar uma Conversa

É possível excluir toda a conversa, o que também remove todos os prompts associados a ela.

-- Delete the first conversation
EXEC DBMS_CLOUD_AI.DROP_CONVERSATION('30C9DB6E-EA4D-AFBA-E063-9C6D46644B92');
 
PL/SQL procedure successfully completed.
 
 
-- Verify if the conversation and its prompts are removed
SELECT conversation_id FROM dba_cloud_ai_conversations;
 
-- We only have the second conversation now
CONVERSATION_ID
------------------------------------
30C9DB6E-EA4E-AFBA-E063-9C6D46644B92
 
 
SELECT conversation_id, count(*) FROM dba_cloud_ai_conversation_prompts GROUP BY conversation_id;
 
-- We only have prompts in the second conversation
CONVERSATION_ID                COUNT(*)
------------------------------------ ----------
30C9DB6E-EA4E-AFBA-E063-9C6D46644B92          2

Exemplo: Selecionar Feedback do AI

Esses exemplos demonstram como você pode usar o procedimento DBMS_CLOUD_AI.FEEDBACK e os diferentes cenários para fornecer feedback para melhorar a geração subsequente de consulta SQL.

Observação:

Você pode fornecer feedback para os prompts Selecionar AI SQL mesmo que o prompt não tenha sido executado anteriormente. Selecionar AI não exige que o prompt SQL seja usado em uma consulta antes de enviar feedback; você pode fornecer feedback para qualquer prompt válido a qualquer momento.

Exemplo: Fornecer Feedback Negativo

O exemplo a seguir demonstra como fornecer correções ao SQL gerado como feedback (feedback negativo) usando feedback_type como negative e fornecendo sua consulta SQL.

Você adiciona seu feedback ao perfil do AI chamado OCI_FEEDBACK1 chamando o procedimento DBMS_CLOUD_AI.FEEDBACK com o parâmetro sql_text que contém o prompt. Consulte para saber mais sobre os atributos. Em seguida, você recupera as colunas content e attributes da tabela <profile_name>_FEEDBACK_VECINDEX$VECTAB, que é vinculada a essa consulta SQL específica. Selecione AI para criar automaticamente esta tabela de vetores quando você usar o recurso de feedback pela primeira vez. Consulte para obter mais informações.

SQL> select ai showsql how many movies;
 
RESPONSE
------------------------------------------------------------------------
SELECT COUNT(m."MOVIE_ID") AS "Number of Movies" FROM "ADB_USER"."MOVIES" m
 
SQL> exec DBMS_CLOUD_AI.FEEDBACK(profile_name=>'OCI_FEEDBACK1', sql_text=> 'select ai showsql how many movies', feedback_type=> 'negative', response=>'SELECT SUM(1) FROM "ADB_USER"."MOVIES"');
 
PL/SQL procedure successfully completed.
SQL> select CONTENT, ATTRIBUTES from OCI_FEEDBACK1_FEEDBACK_VECINDEX$VECTAB where JSON_VALUE(attributes, '$.sql_text') = 'select ai showsql how many movies';
 
CONTENT                                                
----------------------------------------------------------------------------------------------------
how many movies                                             
ATTRIBUTES
----------------------------------------------------------------------------------------------------
 
{"response":"SELECT SUM(1) FROM \"ADB_USER\".\"MOVIES\"","feedback_type":"negative","sql_id":null,"sql_text":"select ai showsql how many movies","feedback_content":null}
Exemplo: Fornecer Feedback Positivo

O exemplo a seguir demonstra como fornecer sua aprovação de que você concorda e confirma o SQL gerado (feedback positivo) usando feedback_type como positive.

Neste exemplo, a consulta recupera o sql_id da view v$mapped_sql para o prompt fornecido. Consulte V_MAPPED_SQL para obter mais informações.

Você adiciona seu feedback ao perfil do AI chamado OCI_FEEDBACK1 chamando o procedimento DBMS_CLOUD_AI.FEEDBACK com o parâmetro sql_id. Em seguida, você recupera as colunas content e attributes da tabela <profile_name>_FEEDBACK_VECINDEX$VECTAB, que é vinculada a essa consulta SQL específica. Selecione AI para criar automaticamente esta tabela de vetores quando você usar o recurso de feedback pela primeira vez. Consulte para obter mais informações.

SQL> select ai showsql how many distinct movie genres?;
 
RESPONSE
-----------------------------------------------------------------------------------------
SELECT COUNT(DISTINCT g."GENRE_NAME") AS "Number of Movie Genres" FROM "ADB_USER"."GENRES" g
 
SQL> SELECT sql_id FROM v$mapped_sql WHERE sql_text = 'select ai showsql how many distinct movie genres?';
 
SQL_ID
-------------
852w8u83gktc1
 
SQL> exec DBMS_CLOUD_AI.FEEDBACK(profile_name=>'OCI_FEEDBACK1', sql_id=> '852w8u83gktc1', feedback_type=>'positive', operation=>'add');
 
PL/SQL procedure successfully completed.
 
SQL> SELECT content, attributes FROM OCI_FEEDBACK1_FEEDBACK_VECINDEX$VECTAB WHERE JSON_VALUE(attributes, '$.sql_id') ='852w8u83gktc1';
 
 CONTENT                                               
---------------------------------------------------------------------------------------------------- 
how many distinct movie genres?
ATTRIBUTES
----------------------------------------------------------------------------------------------------
{"response":"SELECT COUNT(DISTINCT g.\"GENRE_NAME\") AS \"Number of Movie Genres\" FROM \"ADB_USER\".\"GENRES\" g","feedback_type":"positive","sql_id":"852w8u83gktc1","sql_text":"select ai showsql how many distinct movie genres?","feedback_content":null}
Exemplo: Fornecer Feedback sem Uso Anterior

Você pode fornecer feedback para prompts SQL mesmo que o prompt não tenha sido usado anteriormente. Por exemplo:

BEGIN
  DBMS_CLOUD_AI.FEEDBACK(
    profile_name=>'AI_PROFILE',
    sql_text=>'select ai runsql how many products named PAD', -- Prior usage not required
    feedback_type=>'negative',
    response=>'SELECT COUNT(*) AS "Num" FROM "PRODUCTS"."CATG" o WHERE UPPER(o."NAME") LIKE ''%PAD%''',
    feedback_content=>'Use LIKE instead of ='
  );
END;
/

Nesse caso, o feedback do prompt select ai runsql how many products named PAD é enviado sem a necessidade de usar o prompt antecipadamente.

Exemplo: Adicionar ou Excluir Seu Feedback para o SQL Gerado
O exemplo a seguir demonstra como adicionar ou excluir seu feedback para a SQL gerada especificando os parâmetros de procedimento DBMS_CLOUD_AI.FEEDBACK. Este exemplo demonstra o uso de sql_id e sql_text junto com outros parâmetros.

Observação:

Selecionar IA permite apenas uma única entrada de feedback para cada sql_id. Se você fornecer feedback adicional para o mesmo sql_id, Selecionar IA substituirá a entrada anterior pela nova.

Consulte para saber mais detalhes sobre os parâmetros.

EXEC DBMS_CLOUD_AI.FEEDBACK(profile_name=>'OCI_FEEDBACK1',
                                   sql_id=> '852w8u83gktc1',
                                   feedback_type=>'positive',
                                   operation=>'add');
EXEC DBMS_CLOUD_AI.FEEDBACK(profile_name=>'OCI_FEEDBACK1',
                                   sql_text=> 'select ai showsql how many movies',
                                   feedback_type=> 'negative',
                                   response=>'SELECT SUM(1) FROM "ADB_USER"."MOVIES"',
                                   feedback_content=>'Use SUM instead of COUNT');
EXEC DBMS_CLOUD_AI.FEEDBACK(profile_name=>'OCI_FEEDBACK1',
                                   sql_id=> '852w8u83gktc1',
                                   operation=>'delete');
Exemplo: Usar Ação de Feedback com o Último AI SQL para Fornecer Feedback Negativo

Este exemplo demonstra o uso da ação feedback para melhorar a SQL gerada sugerindo as modificações usando linguagem natural.

BEGIN
  DBMS_CLOUD_AI.CREATE_PROFILE(
    profile_name=>'OCI_FEEDBACK1',
    attributes=>'{"provider": "oci",                                                                 
      "credential_name": "GENAI_CRED",
      "oci_compartment_id": "ocid1.compartment.oc1..aaaa...",
      "object_list": [{"owner": "ADB_USER", "name": "users"},
                      {"owner": "ADB_USER", "name": "movies"},
                      {"owner": "ADB_USER", "name": "genres"},
                      {"owner": "ADB_USER", "name": "watch_history"},
                      {"owner": "ADB_USER", "name": "movie_genres"},
                      {"owner": "ADB_USER", "name": "employees1"},
                      {"owner": "ADB_USER", "name": "employees2"}
                        ]
      }');
END;
/
 
EXEC DBMS_CLOUD_AI.SET_PROFILE('OCI_FEEDBACK1');

 
PL/SQL procedure successfully completed.
 

select ai showsql rank movie duration;
 
RESPONSE
-------------------------------------------------------------------------------
SELECT "DURATION" AS "Movie Duration" FROM "ADB_USER"."MOVIES" ORDER BY "DURATION"
 
select ai feedback use ascending sorting;
 
RESPONSE
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Based on your feedback, the SQL query for prompt "rank movie duration" is successfully refined. The refined SQL query as following:
SELECT m."DURATION" AS "Movie Duration" FROM "ADB_USER."MOVIES" m ORDER BY m."DURATION" ASC
 
 
select ai showsql rank the movie duration;
 
RESPONSE
-----------------------------------------------------------------------------------------
SELECT m."DURATION" AS "Movie Duration" FROM "ADB_USER."MOVIES" m ORDER BY m."DURATION" ASC
Exemplo: Usar Ação de Feedback com o Último AI SQL para Fornecer Feedback Positivo

Este exemplo demonstra como usar a ação feedback para aceitar a SQL gerada usando linguagem natural.

--Positive feedback

select ai showsql which movies are comedy?;
 
RESPONSE
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SELECT DISTINCT m."TITLE" AS "Movie Title" FROM "ADB_USER"."MOVIES" m INNER JOIN "ADB_USER"."MOVIE_GENRES" mg ON m."MOVIE_ID" = mg."MOVIE_ID" INNER JOIN "ADB_USER"."GENRES" g ON mg."GENRE_ID" = g."GENRE_ID" WHERE g."GENRE_NAME" = 'comedy'
 
select ai feedback this is correct;
 
RESPONSE
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Thank you for your positive feedback. The SQL query for prompt "which movies are comedy?" is correctly implemented and delivering the expected results. It will be referenced for future optimizations and improvements.


Select AI Feedback Action Referring SQL_ID
Exemplo: Usar Ação de Feedback com SQL_ID para Fornecer Feedback

Este exemplo demonstra o uso do SQL_ID com a ação feedback para fornecer feedback para uma consulta SQL gerada específica. Você pode obter o SQL_ID consultando a tabela v$MAPPED_SQL.

-- Query mentioned with SQL_ID

select ai showsql how many movies are in each genre;
 
RESPONSE
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SELECT g."GENRE_NAME" AS "Genre Name", COUNT(m."MOVIE_ID") AS "Number of Movies" FROM "ADB_USER"."MOVIES" m INNER JOIN "ADB_USER"."MOVIE_GENRES" mg ON m."MOVIE_ID" = mg."MOVIE_ID" INNER JOIN "ADB_USER"."GENRES" g ON mg."GENRE_ID" = g."GENRE_ID" GROUP BY g."GENRE_NAME"
 
select sql_id from v$cloud_ai_sql where sql_text = 'select ai showsql how many movies are in each genre';
 
SQL_ID
-------------
8azkwc0hr87ga
 
select ai feedback for query with sql_id = '8azkwc0hr87ga', rank in descending sorting;
 
RESPONSE
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Based on your feedback, the SQL query for prompt "how many movies are in each genre" is successfully refined. The refined SQL query as following:
SELECT g."GENRE_NAME" AS "Genre Name", COUNT(m."MOVIE_ID") AS "Number of Movies"
FROM "ADB_USER"."MOVIES" m
INNER JOIN "ADB_USER"."MOVIE_GENRES" mg ON m."MOVIE_ID" = mg."MOVIE_ID"
INNER JOIN "ADB_USER"."GENRES" g ON mg."GENRE_ID" = g."GENRE_ID"
GROUP BY g."GENRE_NAME"
ORDER BY COUNT(m."MOVIE_ID") DESC
Exemplo: Usar Ação de Feedback com Texto de Consulta

Este exemplo mostra a ação feedback para uma consulta específica Selecionar IA, incluindo o prompt Selecionar IA entre aspas seguido pelo seu feedback.

-Query mentioned with SQL_TEXT

select ai showsql how many watch history in total;
 
RESPONSE
----------------------------------------------------------------------------------
SELECT COUNT(w."WATCH_ID") AS "Total Watch History" FROM "ADB_USER"."WATCH_HISTORY" w
 
select ai feedback for query "select ai showsql how many watch history in total", name the column as total_watch;
 
RESPONSE
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Based on your feedback, the SQL query for prompt "how many watch history in total" is successfully refined. The refined SQL query as following:
SELECT COUNT(w."WATCH_ID") AS "total_watch" FROM "ADB_USER"."WATCH_HISTORY" w

Exemplo: Selecionar IA para Gráficos de Propriedades

Este exemplo mostra como você pode usar o procedimento DBMS_CLOUD_AI.GENERATE e um prompt de linguagem natural para gerar consultas de gráfico PGQ para consultar dados de gráfico.

Exemplo: Especificar Vários Gráficos no Perfil do AI

Este exemplo mostra como definir vários gráficos de propriedades em seu perfil do AI, incluindo uma consulta de amostra e sua saída.

BEGIN
  DBMS_CLOUD_AI.CREATE_PROFILE(
      profile_name =>'OPENAI',
      attributes   =>'{"provider": "openai",
        "model": "gpt-4o",
        "credential_name": "OPENAI_CRED",
        "object_list": [{"owner": "ADB_USER", "name": "LDBC_GRAPH"},
                        {"owner": "ADB_USER", "name": "G"}]
       }');                                                                  
END;                                                                         
/

SQL> EXEC DBMS_CLOUD_AI.SET_PROFILE(profile_name => 'OPENAI');

PL/SQL procedure successfully completed.

SQL> select ai who bought a dress;

CUSTOMER_N
----------
Kate

1 row selected.

Exemplo: Prompts de Amostra para Gráficos de Propriedades

Esses exemplos mostram como criar dados de amostra e exibir o SQL gerado usando a ação showsql para um determinado prompt.

Exemplo: Criar Tabela de Gráfico de Propriedade

O exemplo a seguir cria tabelas de amostra e um gráfico de propriedades.

CREATE TABLE Person
(
    id         NUMBER PRIMARY KEY,
    firstName  VARCHAR2(20 CHAR),
    lastName   VARCHAR2(20 CHAR),
    age        NUMBER,
    jsonProp   VARCHAR2(40 CHAR)
);

CREATE TABLE Post
(
    id         NUMBER PRIMARY KEY,
    content    VARCHAR2(20 CHAR)
);

CREATE TABLE personLikesPost
(
    idPerson NUMBER REFERENCES Person (id),
    idPost   NUMBER REFERENCES Post (id)
);

CREATE TABLE personKnowsPerson
(
    idPerson1 NUMBER REFERENCES Person (id),
    idPerson2 NUMBER REFERENCES Person (id)
);

CREATE PROPERTY GRAPH person_graph
  VERTEX TABLES (
    Person KEY (id) LABEL Person
      PROPERTIES (firstName, lastName, age, jsonProp),
    Post KEY (id) LABEL Post
      PROPERTIES(content)
  )
  EDGE TABLES (
    personLikesPost
      KEY(idPerson, idPost)
      SOURCE KEY (idPerson) REFERENCES Person (id)
      DESTINATION KEY (idPost) REFERENCES POST (id)
      LABEL Likes NO PROPERTIES,
    personKnowsPerson
      KEY(idPerson1, idPerson2)
      SOURCE KEY (idPerson1) REFERENCES Person (id)
      DESTINATION KEY (idPerson2) REFERENCES Person (id)
      LABEL Knows NO PROPERTIES
  );

insert into Person values (1, 'John', 'Doe',23, '{"key1":"value1","key2":"value2"}');
insert into Person values (2, 'Scott', 'Tiger', 25, '{"key1":"value3","key2":"value4"}');
insert into Person values (3, 'Max', 'Power', 27, '{"key1":"value5","key2":"value6"}');
insert into Person values (4, 'Jane', 'Doe', 22, '{"key1":"value7","key2":"value8"}');
insert into Person (id, Firstname, age) values (5, 'Hans', 23);
insert into Person (id, Firstname, age) values (6, 'Franz', 24);
 
INSERT INTO Post VALUES (10, 'Lorem ipsum...');
INSERT INTO Post VALUES (11, 'Nulla facilisi...');
INSERT INTO Post VALUES (12, 'Vestibulum eget ..');
INSERT INTO Post VALUES (13, 'Sed fermentum...');
INSERT INTO Post VALUES (14, 'Fusce at ...');
INSERT INTO Post VALUES (15, 'Pellentesque sit ...');
INSERT INTO Post VALUES (16, 'Integer...');
INSERT INTO Post VALUES (17, 'Curabitur luctus ...');
INSERT INTO Post VALUES (18, 'Nam in ...');
INSERT INTO Post VALUES (19, 'Etiam ac ...');
 
insert into personKnowsPerson values (1, 2);
insert into personKnowsPerson values (2, 3);
insert into personKnowsPerson values (3, 4);
insert into personKnowsPerson values (4, 5);
insert into personKnowsPerson values (5, 6);
insert into personKnowsPerson values (6, 2);
insert into personKnowsPerson values (5, 3);
 
INSERT INTO personLikesPost VALUES (1, 10);
INSERT INTO personLikesPost VALUES (1, 11);
INSERT INTO personLikesPost VALUES (1, 12);
INSERT INTO personLikesPost VALUES (2, 10);
INSERT INTO personLikesPost VALUES (2, 13);
INSERT INTO personLikesPost VALUES (2, 14);
INSERT INTO personLikesPost VALUES (3, 11);
INSERT INTO personLikesPost VALUES (3, 15);
INSERT INTO personLikesPost VALUES (3, 16);
INSERT INTO personLikesPost VALUES (4, 12);
INSERT INTO personLikesPost VALUES (4, 17);
INSERT INTO personLikesPost VALUES (4, 18);
INSERT INTO personLikesPost VALUES (5, 13);
INSERT INTO personLikesPost VALUES (5, 14);
INSERT INTO personLikesPost VALUES (5, 19);
INSERT INTO personLikesPost VALUES (6, 15);
INSERT INTO personLikesPost VALUES (6, 16);
INSERT INTO personLikesPost VALUES (6, 17);
INSERT INTO personLikesPost VALUES (1, 18);
INSERT INTO personLikesPost VALUES (2, 19);

commit;
Exemplo: Correspondência de Vértices sem Labels

Prompt: Find all the people IDs

SELECT person_id
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (v IS "PERSON")
    COLUMNS (VERTEX_ID(v) AS person_id))
Exemplo: Correspondência de Bordas sem Labels

Prompt: Find all the edge IDs

SELECT edge_id
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (v1) -[e]-> (v2)
    COLUMNS (EDGE_ID(e) AS edge_id))
Exemplo: Correspondência de Bordas com Labels

Prompt: Find all the knows relationship IDs

SELECT knows_id
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (p1 IS "PERSON") -[e IS "KNOWS"]-> (p2 IS "PERSON")
    COLUMNS (EDGE_ID(e) AS knows_id))
Exemplo: Correspondência de Padrões de Caminho Incluindo Um ou Vários Saltos

Prompt: List all people who know someone who liked the post 'Sed fermentum...'

SELECT person_id, person_firstname, person_lastname
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (p1 IS "PERSON") -[e1 IS "KNOWS"]-> (p2 IS "PERSON") -[e2 IS "LIKES"]-> (post IS "POST")
    WHERE UPPER(post."CONTENT") = UPPER('Sed fermentum...')
    COLUMNS (VERTEX_ID(p1) AS person_id, p1."FIRSTNAME" AS person_firstname, p1."LASTNAME" AS person_lastname))
Exemplo: Acessando Propriedades de Vértice e Borda

Prompt: Find first name and last name of all people

SELECT first_name, last_name
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (p IS "PERSON")
    COLUMNS (p."FIRSTNAME" AS first_name, p."LASTNAME" AS last_name))
Exemplo: Filtrando dados

Prompt: Find post contents liked by John Doe

SELECT post_content
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (p IS "PERSON") -[e IS "LIKES"]-> (post IS "POST")
    WHERE UPPER(p."FIRSTNAME") = UPPER('John') AND UPPER(p."LASTNAME") = UPPER('Doe')
    COLUMNS (post."CONTENT" AS post_content))
Exemplo: Funções e Expressão

Prompt: Show all people (full name) and display their key1 value from jsonProp property

SELECT person_fullname, json_key1
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (p IS "PERSON")
    COLUMNS (
	(p."FIRSTNAME" || ' ' || p."LASTNAME") AS person_fullname,
	JSON_QUERY(p."JSONPROP", '$.key1') AS json_key1
    )
)
Exemplo: Classificando Dados

Prompt: Find friends of Scott Tiger ordered by their last name

SELECT friend_firstname, friend_lastname
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (p IS "PERSON") -[e IS "KNOWS"]-> (f IS "PERSON")
    WHERE UPPER(p."FIRSTNAME") = UPPER('Scott') AND UPPER(p."LASTNAME") = UPPER('Tiger')
    COLUMNS (f."FIRSTNAME" AS friend_firstname, f."LASTNAME" AS friend_lastname)
)
ORDER BY friend_lastname
Exemplo: Limitação de Linha

Prompt: Find all people ordered by first name. Skip one result and return 2 results only

SELECT person_firstname
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (p IS "PERSON")
    COLUMNS (p."FIRSTNAME" AS person_firstname))
ORDER BY person_firstname
OFFSET 1 ROWS FETCH NEXT 2 ROWS ONLY

Consultas não suportadas

Para as consultas a seguir, determinados LLMs geram um NL2SQL válido, mas o SQL resultante usa recursos que ainda não são suportados no Oracle AI Database 26ai.

Exemplo: Consultas que Requerem Não Corresponder a um Determinado Padrão

Prompt: Find people that do not know Scott.

A subconsulta EXISTS não é suportada.

SELECT person_id, first_name, last_name
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (p1 IS "PERSON")
    WHERE NOT EXISTS (
	SELECT 1
	FROM GRAPH_TABLE("ADB_USER"."PERSONGRAPH"
	    MATCH (p2 IS "PERSON") -[e IS "PERSONKNOWSPERSON"]-> (p3 IS "PERSON"
)
	    WHERE p2."ID" = p1."ID" AND UPPER(p3."FIRSTNAME") = UPPER('Scott')
	    COLUMNS (1 AS dummy_value))
    )
    COLUMNS (p1."ID" AS person_id, p1."FIRSTNAME" AS first_name, p1."LASTNAME" A
S last_name))
Exemplo: Consultas que Requerem Correspondência Opcional com um Determinado Padrão

Prompt: Show all people and how many posts they have liked (show people even if they have not liked a post).

A correspondência de OPTIONAL não é suportada.

SELECT person_id, person_firstname, person_lastname, liked_post_ids
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
MATCH (p is "PERSON") OPTIONAL MATCH (p) -[l is "PERSONLIKESPOST"]-> (post is "POST")
COLUMNS(
    VERTEX_ID(p) as person_id,
    p."FIRSTNAME" as person_firstname,
    p."LASTNAME" as person_lastname,
    JSON_ARRAYAGG(VERTEX_ID(post)) as liked_post_ids
))
Exemplo: Padrões de Caminho Recursivo Não Vinculado

Prompt: Find all people that Scott can reach.

Não há suporte para consultas que usam quantificadores não vinculados.

SELECT person_id, person_firstname, person_lastname
FROM GRAPH_TABLE("ADB_USER"."PERSONGRAPH"
    MATCH (src IS "PERSON") -[e IS "PERSONKNOWSPERSON"]->* (dst IS "PERSON")
    WHERE src."FIRSTNAME" = 'Scott'
    COLUMNS (
	VERTEX_ID(dst) AS person_id,
	dst."FIRSTNAME" AS person_firstname,
	dst."LASTNAME" AS person_lastname
    )
)

Consultas Intermitentes

Os LLMs demonstraram dificuldade ao traduzir consultas que exigem mais de um operador GRAPH_TABLE. Estes são alguns exemplos:

Prompt: Show people who have liked all the same posts as Hans

SELECT person_id, person_name
FROM GRAPH_TABLE("PERSON_GRAPH"
  MATCH (hans is "PERSON") -[likes_hans is "PERSONLIKESPOST"]-> (post is "POST"),
	(other_person is "PERSON") -[likes_other is "PERSONLIKESPOST"]-> (post)
  WHERE hans."FIRSTNAME" = 'Hans'
  COLUMNS (VERTEX_ID(other_person) as person_id, other_person."FIRSTNAME" AS person_name)
)
WHERE NOT EXISTS (
  SELECT 1
  FROM GRAPH_TABLE("PERSONGRAPH"
    MATCH (hans is "PERSON") -[likes_hans is "PERSONLIKESPOST"]-> (post is "POST")
    WHERE hans."FIRSTNAME" = 'Hans'
    COLUMNS (VERTEX_ID(post) as post_id)
  ) hans_posts
  LEFT JOIN GRAPH_TABLE("PERSONGRAPH"
    MATCH (other_person is "PERSON") -[likes_other is "PERSONLIKESPOST"]-> (post
 is "POST")
    COLUMNS (VERTEX_ID(post) as post_id)
  ) other_posts
  ON hans_posts.post_id = other_posts.post_id
  WHERE other_posts.post_id IS NULL
)
Exemplo: Correspondência de Padrões de Caminho Recursivo com Limites Definidos.

Prompt: Find all names of the people that can be reached in a 1 to 3 edge path

SELECT person_name
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (start_person IS "PERSON") -[e IS "KNOWS"]->{1,3} (end_person IS "PERSON")
    COLUMNS (end_person."FIRSTNAME" AS person_name))
Exemplo: Filtrando Dados para Nós em um Caminho Recursivo

Prompt: Find all names of the people that can be reached in a 1 to 3 edge path where each person is younger than the next one

SELECT person_name
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (start_person IS "PERSON") ((v1 IS "PERSON") -[e IS "KNOWS"]-> (v2 IS"PERSON") WHERE v1."AGE" < v2."AGE"){1,3} (end_person IS "PERSON")
    COLUMNS (end_person."FIRSTNAME" AS person_name))
Exemplo: Agrupamento e Agregação

Os LLMs geralmente lutam para traduzir consultas que exigem agrupamento e agregação. Um erro comum é colocar agregações na cláusula COLUMNS em vez da cláusula SELECT.

Prompt: Find the average number of posts liked by all the users

SELECT AVG(COUNT(post)) AS average_liked_count
FROM GRAPH_TABLE("PERSON_GRAPH"
MATCH (p IS "PERSON") -[e IS "PERSONLIKESPOST"]-> (post IS "POST")
COLUMNS (VERTEX_ID(p) AS person, VERTEX_ID(post) AS post))
GROUP BY person;