Gerar SQL de Prompts de Linguagem Natural Usando Selecionar IA
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.
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_AIque 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 |
|
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 Os modelos de texto Gerar do OCI só são suportados para a ação Para configurar os atributos de perfil, consulte Atributos de perfil. |
|
Serviço Azure OpenAI |
|
incorporação de texto-ada-002 |
Mais adequado para gerar SQL a partir de prompts de linguagem natural, ação |
|
OpenAI |
|
incorporação de texto-ada-002 |
Mais adequado para gerar SQL a partir de prompts de linguagem natural, ação |
|
OpenAI-Compatível |
Modelos de provedores compatíveis com OpenAI, como:
|
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 |
|
inglês-v2.0 |
Mais adequado para a ação |
|
|
|
text-embedding-004 (padrão) |
Mais adequado para gerar SQL a partir de prompts de linguagem natural, ação |
|
Antrópico |
|
NA |
Mais adequado para gerar SQL a partir de prompts de linguagem natural, ação |
|
Hugging Face |
|
NA |
Mais adequado para gerar SQL a partir de prompts de linguagem natural, ação |
|
AWS |
|
Suporta uma ampla gama de casos de uso. |
Observação:
-
Especifique o provedor compatível com OpenAI por meio do parâmetro
provider_endpointem vez do parâmetroprovider. 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-instructoferece 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:
- 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.
- 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.
- 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
- 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.
- Vá para Google AI Studio.
- Clique em Iniciar sessão no Google AI Studio.
- Clique em Obter chave de API na tela de prompt.
- Selecione todas as opções aplicáveis na próxima página.
- Clique em Create API key.
-
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.
- Vá para Console do Desenvolvedor Antrópico.
- Cadastre-se para uma conta se você ainda não tiver uma.
- Depois de fazer log-in, navegue até a seção API ou o painel de controle.
- Procure uma opção para gerar ou exibir chaves de API.
- Clique para criar uma nova chave de API.
-
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.
- Vá para Abraçando o Rosto.
- Cadastre-se para uma conta se você ainda não tiver uma.
- Navegue até as configurações da sua conta.
- No menu de navegação, localize os Tokens de Acesso.
- Clique para criar uma nova chave de API.
- 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:
- Inscreva-se em uma conta da AWS se você ainda não tiver uma.
- Crie suas chaves de acesso e chaves secretas no Console do AWS Bedrock.
- Copie as chaves geradas e salve-as.
- Solicitar acesso aos seus modelos de base. Consulte Acessar modelos básicos do Amazon Bedrock.
- 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:- um modelo base, especifique o ID do modelo ou seu ARN(Amazon Resource Names). Para obter uma lista de IDs de modelo para modelos base, consulte IDs de modelo base do Amazon Bedrock
- um perfil de inferência, especifique o ID perfil de inferência ou seu ARN. Para obter uma lista de IDs de perfil de inferência, consulte Regiões e modelos com suporte para inferência entre regiões.
- um modelo provisionado, especifique o ARN do Throughput Provisionado. Para obter mais informações, consulte Executar inferência usando um Throughput Provisionado.
- um modelo personalizado, compre o Throughput Provisionado para ele. Em seguida, especifique o ARN do modelo provisionado resultante. Para obter mais informações, consulte Usar um modelo personalizado no Amazon Bedrock.
- um modelo do Amazon Bedrock Marketplace, especifique o ID ou ARN do ponto de extremidade do marketplace que você criou. Consulte Amazon Bedrock Marketplace.
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.
DBMS_CLOUD_AI:
-
Conceda o privilégio
EXECUTEno pacoteDBMS_CLOUD_AIao 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égioEXECUTEa outros usuários.O exemplo a seguir concede o privilégioEXECUTEparaADB_USER:grant execute on DBMS_CLOUD_AI to ADB_USER;O exemplo a seguir concede a
ADB_USERo 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; / -
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.
- 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.
EXECDBMS_CLOUD.CREATE_CREDENTIAL('OPENAI_CRED', 'OPENAI', 'your_api_token');
APPEND_HOST_ACE Parâmetros de Função
| Parâmetro | Descrição |
|---|---|
|
|
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 Para o Google, use generativelanguage.googleapis.com. Para Anthropic, use api.anthropic.com. Para abraçar o rosto, use api-inference.huggingface.co. |
|
|
Entradas de controle de acesso (ACE). O tipo |
Parâmetros DBMS_CLOUD.CREATE_CREDENTIAL
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-chaveAI.
Sintaxe
SELECT AI action natural_language_promptParâmetros
| Parâmetro | Descrição |
|---|---|
|
|
Execute o comando SQL fornecido usando um prompt de linguagem natural. Essa é a ação padrão e é opcional especificar esse parâmetro. |
|
|
Exibe a instrução SQL de um prompt de linguagem natural. |
|
|
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. |
|
|
Gera uma resposta diretamente do LLM com base no prompt. Se |
|
|
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
AInão suportado no Database Actions ou no APEX Service. Você só pode usar a funçãoDBMS_CLOUD_AI.GENERATE. -
A palavra-chave
AIsó é suportada em uma instruçãoSELECT. -
Não é possível executar instruções PL/SQL, instruções DDL ou instruções DML usando a palavra-chave
AI. -
A sequência é
SELECTseguido porAI. Essas palavras-chave não distinguem maiúsculas de minúsculas. Depois que umDBMS_CLOUD_AI.SET_PROFILEé configurado, o texto apósSELECT AIé um prompt de idioma natural. Se um perfil do AI não estiver definido,SELECTAIreportará 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 AInão consiga executar o SQL gerado para um prompt de linguagem natural específico. -
É possível que
SELECT AInão consiga gerar SQL para um prompt de linguagem natural específico.
Nesse cenário,
SELECT AIresponde com informações para ajudá-lo a gerar SQL válido. -
-
Use a ação
chat, comSELECT AI chat, para saber mais sobre construções SQL. Para obter melhores resultados com a açãochat, 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
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_IDe executeSELECT AI <ACTION> <PROMPT>. -
Informe o
conversation_idno argumentoparamsda funçãoDBMS_CLOUD_AI.GENERATE.
Observação:
Se você usar várias conversas e a definiçãoconversation: [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.
- 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 |
Use o procedimento |
|
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 |
|
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 |
|
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 |
|
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 |
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.
-
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 AIfalharem em gerar o SQL correto, você poderá fornecer as melhorias necessárias da consulta SQL usandoSELECT AI feedback <feedback>ou usando o procedimentoDBMS_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.
- 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.
-
SQL_TEXT: Inclua o feedback entre aspas para sua consulta SQL atual ou você pode obter oSQL_TEXTpara uma consulta específica consultando a viewV$MAPPED_SQL. -
SQL_ID: Você pode obter aSQL_IDconsultando a viewV$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égioREADnas tabelassys.v_$sessionev_$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.
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
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_TABLEpara 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.
-
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:
-
Geração de dados sintéticos
-
Mistura de gráficos de propriedades com outros tipos de objeto no perfil AI
-
Consultas não suportadas e intermitentes. Consulte Exemplo: Prompts de Amostra para Gráficos de Propriedades para obter mais detalhes.
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>.
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.GENERATEe 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
- Criar uma conversa
- Definir a conversa na sessão do usuário atual
- Usar
Select AI <action> <prompt>
- Use a função
DBMS_CLOUD_AI.CREATE_CONVERSATIONe, em seguida, defina a conversa usandoDBMS_CLOUD_AI.SET_CONVERSATION_ID. - Chame o procedimento
DBMS_CLOUD_AI.CREATE_CONVERSATIONdiretamente para criar e definir a conversa em uma etapa.
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 completedO 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-9C6D4664EC3AVocê 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-9C6D46644B92Depois 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.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.
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:
OAs 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 2Você 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 20Você 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É 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 2Exemplo: 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.
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}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}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.
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 cadasql_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');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" ASCEste 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_IDEste 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
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" wExemplo: 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.
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.
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;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))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))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))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))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))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))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
)
)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_lastnamePrompt: 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 ONLYConsultas 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.
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))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
))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
)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))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))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;