Genera istruzioni SQL da prompt linguaggio naturale mediante selezione AI

Autonomous AI Database on Dedicated Exadata Infrastructure Select AI consente di eseguire query sui dati utilizzando il linguaggio naturale.

La funzione Select AI consente a Autonomous AI Database di utilizzare l'intelligenza artificiale generativa con LLM (Large Language Models) per convertire il testo di input dell'utente in Oracle SQL. Select AI elabora il prompt del linguaggio naturale, integra il prompt con i metadati e quindi genera ed esegue una query SQL.

Informazioni su Select AI

Utilizza il linguaggio naturale per interagire con il tuo database e gli LLM attraverso SQL per migliorare la produttività degli utenti e sviluppare applicazioni basate sull'intelligenza artificiale. Select AI semplifica e automatizza l'utilizzo dell'intelligenza artificiale generativa, indipendentemente dal fatto che generi, esegua e spieghi SQL da un prompt del linguaggio naturale, utilizzando la retrieval augmented generation con le memorie di vettore, generando dati sintetici o chiacchierando con l'LLM.

Quando utilizzi Select AI, Autonomous AI Database gestisce il processo di conversione del linguaggio naturale in SQL. Ciò significa che è possibile fornire un prompt in linguaggio naturale anziché un codice SQL per interagire con i dati. Select AI funge da strumento di produttività per utenti e sviluppatori SQL e consente agli utenti SQL non esperti di ricavare insight utili dai propri dati, senza dover comprendere strutture di dati o linguaggi tecnici.

Select AI automatizza anche il processo di retrieval augmented generation (RAG) dalla generazione di incorporamenti vettoriali al recupero di contenuti pertinenti in base al prompt attraverso la ricerca di somiglianza semantica utilizzando la memoria di vettore. Altre funzioni includono la generazione di dati sintetici, il supporto della cronologia delle chat per le conversazioni e altre funzioni, tutte da un'interfaccia SQL.

Il pacchetto DBMS_CLOUD_AI consente l'integrazione con un LLM specificato dall'utente per generare codice SQL utilizzando i prompt in linguaggio naturale. Per la generazione dal linguaggio naturale a SQL, questo package fornisce un prompt aumentato all'LLM contenente i metadati dello schema di database pertinenti. Ciò consente di generare, eseguire e spiegare le query SQL in base ai prompt in linguaggio naturale. Inoltre, facilita il recupero della generazione aumentata utilizzando le memorie di vettore, la generazione di dati sintetici e consente di chattare con l'LLM. Il pacchetto DBMS_CLOUD_AI funziona con i provider AI elencati in Select your AI Provider and LLMs.

Nota

  • Devi avere un account con il provider AI e fornire le credenziali tramite gli oggetti DBMS_CLOUD_AI utilizzati dal database AI autonomo.

  • È possibile sottomettere i prompt in più lingue. La qualità del risultato dipende dalle abilità dello specifico LLM o del modello di incorporamento (trasformatore) utilizzato. Per il supporto in più lingue, controllare la documentazione del modello LLM o di incorporamento.

Piattaforme supportate

Select AI è supportata su Autonomous AI Database serverless e Autonomous AI Database su infrastruttura Exadata dedicata e cloud at Customers.

  • Database AI autonomo Serverless
  • Database AI autonomo su un'infrastruttura Exadata dedicata
  • Database AI autonomo su un'infrastruttura Exadata dedicata
  • Database AI autonomo Cloud@Customer

Terminologia correlata

È importante comprendere i vari termini utilizzati con Select AI prima di utilizzarlo.

Di seguito sono riportati i termini correlati alla funzione Seleziona AI.

Termine Definizione
Conversazioni

Le conversazioni in Select AI rappresentano uno scambio interattivo tra l'utente e il sistema, consentendo agli utenti di eseguire query o interagire con il database tramite una serie di prompt in linguaggio naturale. Select AI incorpora conversazioni a breve termine basate su sessioni per generare risposte contestuali per il prompt corrente in base alle interazioni precedenti. Fino a 10 prompt precedenti sono incorporati nella richiesta corrente con conversazioni a breve termine, creando un prompt aumentato che viene inviato all'LLM. Select AI supporta l'utilizzo di conversazioni personalizzabili a lungo termine che consentono di utilizzare Select AI con argomenti diversi senza combinare contesto, che possono essere configurate tramite API di conversazione dal package DBMS_CLOUD_AI. Per ulteriori dettagli, vedere Usa e personalizza conversazioni.

Credenziale database

Le credenziali del database sono credenziali di autenticazione utilizzate per accedere e interagire con i database. In genere sono costituiti da un nome utente e una password, a volte integrati da fattori di autenticazione aggiuntivi come i token di sicurezza. Queste credenziali vengono utilizzate per stabilire una connessione sicura tra un'applicazione o un utente e un database, in modo da garantire che solo gli utenti o i sistemi autorizzati possano accedere e manipolare i dati memorizzati nel database.

Allucinazione in LLM

L'allucinazione nel contesto dei modelli di linguaggio di grandi dimensioni si riferisce a un fenomeno in cui il modello genera testo non corretto, non sensato o non correlato al prompt di input. Pur essendo il risultato del tentativo del modello di generare testo coerente, queste istanze possono contenere informazioni fabbricate, fuorvianti o puramente fantasiose. L'allucinazione può verificarsi a causa di distorsioni nei dati di addestramento, mancanza di una corretta comprensione del contesto o limitazioni nel processo di addestramento del modello.

IAM Oracle Cloud Infrastructure Identity and Access Management (IAM) ti consente di controllare chi può accedere alle tue risorse cloud. È possibile controllare il tipo di accesso di un gruppo di utenti e le risorse specifiche. Per ulteriori informazioni, vedere Panoramica di Identity and Access Management.

Prompt linguaggio naturale

I prompt del linguaggio naturale sono istruzioni o richieste leggibili dall'utente fornite per guidare i modelli di intelligenza artificiale generativa, ad esempio i modelli di linguaggio di grandi dimensioni. Invece di utilizzare linguaggi o comandi di programmazione specifici, gli utenti possono interagire con questi modelli inserendo prompt in una forma di linguaggio più conversazionale o naturale. I modelli generano quindi l'output in base al prompt fornito.

Lista di controllo dell'accesso di rete (ACL)

Una lista di controllo dell'accesso di rete è un set di regole o autorizzazioni che definiscono il traffico di rete che può passare attraverso un dispositivo di rete, ad esempio un router, un firewall o un gateway. Le ACL vengono utilizzate per controllare e filtrare il traffico in entrata e in uscita in base a vari criteri, ad esempio indirizzi IP, numeri di porta e protocolli. Svolgono un ruolo cruciale nella sicurezza della rete consentendo agli amministratori di gestire e limitare il traffico di rete per prevenire accessi non autorizzati, potenziali attacchi e violazioni dei dati.

Ricerca somiglianza

La ricerca di somiglianza identifica e recupera i datapoint che corrispondono strettamente a una determinata query confrontando i vettori di funzioni in una memoria di vettore.

Distanze vettoriali

Le distanze vettoriali misurano la somiglianza o la dissimilanza tra vettori di feature calcolando la distanza tra loro in uno spazio multidimensionale.

Indice vettore

Un indice vettoriale organizza e memorizza i vettori di funzioni per consentire una ricerca efficiente della somiglianza e il recupero dei dati correlati.

Area di memorizzazione vettore

Una memoria di vettore include sistemi che memorizzano, gestiscono e abilitano la ricerca di somiglianza semantica che coinvolge incorporamenti di vettori. Ciò include database vettoriali standalone e Oracle Database 23ai AI Vector Search.

Seleziona casi d'uso AI

Select AI migliora l'interazione dei dati e consente agli sviluppatori di creare applicazioni basate sull'intelligenza artificiale direttamente da SQL, trasformando i prompt del linguaggio naturale in query SQL e risposte di testo, supportando l'interazione della chat con gli LLM, migliorando l'accuratezza delle risposte con i dati attuali utilizzando la RAG e generando dati sintetici.

I casi d'uso includono:

  • Genera SQL da prompt in linguaggio naturale

    Produttività degli sviluppatori: Select AI migliora notevolmente la produttività degli sviluppatori fornendo rapidamente query SQL "starter". Gli sviluppatori possono inserire prompt in linguaggio naturale e Select AI genera SQL in base alle tabelle e alle viste dello schema di database. Ciò riduce i tempi e gli sforzi necessari per scrivere query complesse da zero, consentendo agli sviluppatori di concentrarsi sul perfezionamento e l'ottimizzazione delle query generate per le loro esigenze specifiche.

    Query in linguaggio naturale per gli utenti finali: Select AI consente agli utenti finali di interagire con le tabelle di dati e le viste sottostanti dell'applicazione utilizzando query in linguaggio naturale. Questa funzionalità consente agli utenti senza esperienza SQL di porre domande e recuperare i dati direttamente, rendendo l'accesso ai dati più intuitivo e intuitivo rispetto alle funzionalità di LLM in uso e alla qualità dei metadati dello schema disponibili.

    Altre funzionalità per la generazione SQL: le funzionalità evidenziate riportate di seguito sono supportate anche per la generazione da linguaggio naturale a SQL.

    • Specifica schema o tabelle o viste: Select AI consente di specificare una lista di oggetti costituita da schema e, facoltativamente, tabelle o viste all'interno di tale schema.

    • Rileva automaticamente i metadati delle tabelle pertinenti: Select AI rileva automaticamente le tabelle pertinenti e invia i metadati solo per quelle tabelle specifiche, pertinenti alla query, in Oracle Database 26ai.

    • Limita accesso alle tabelle: selezionare AI consente di limitare l'accesso alle tabelle prendendo in considerazione solo le tabelle elencate negli attributi del profilo AI per la generazione SQL.
    • Specifica la distinzione tra maiuscole e minuscole per le colonne: Select AI consente all'utente di specificare la distinzione tra maiuscole e minuscole in modo che l'LLM produca risposte senza distinzione tra maiuscole e minuscole dal database e dall'LLM.
  • Conversazioni

    Abilita funzioni simili a chatbot con Select AI, consentendo agli utenti di avere conversazioni naturali per l'esecuzione di query sui dati ed eseguire azioni. Queste chat possono tenere traccia del contesto, fornendo risposte di follow-up che chiariscono o espandono le domande originali. Questo scenario aumenta il coinvolgimento e semplifica le query complesse attraverso la conversazione.

  • Flussi di lavoro Agentic con Seleziona agente AI

    Utilizza Select AI Agent per coordinare agenti, strumenti (SQL, RAG, Websearch, Notifications) e task per scenari a più fasi quali il recupero dei dati e la notifica. Per ulteriori informazioni, consulta la sezione Creare agenti autonomi con Select AI Agent.

  • Generazione multimediale personalizzata

    È possibile utilizzare l'intelligenza artificiale per generare contenuti multimediali personalizzati, ad esempio e-mail personalizzate in base AI dettagli dei singoli clienti. Ad esempio, nel tuo prompt potresti istruire l'LLM a creare un'e-mail amichevole e ottimista che incoraggi un cliente a provare una serie di prodotti consigliati. Questi suggerimenti potrebbero essere basati sui dati demografici dei clienti o su altre informazioni specifiche disponibili nel tuo database. Questo livello di personalizzazione migliora il coinvolgimento dei clienti offrendo contenuti pertinenti e accattivanti direttamente al cliente.

  • Generazione del codice

    Con l'azione Seleziona AI chat, è possibile utilizzare Seleziona AI per chiedere all'LLM specificato di generare codice da prompt in linguaggio naturale. Questa funzione supporta vari linguaggi di programmazione come SQL, Python, R e Java. Di seguito vengono forniti alcuni esempi.

    • Codice Python: "Scrivere il codice Python per calcolare una matrice di confusione su un DataFrame con colonne ACTUAL e PREDICTED".
    • SQL DDL: "Scrivere la DDL per una tabella SQL con il nome, l'età, il reddito e il paese delle colonne".
    • Query SQL: "Scrivi la query SQL che utilizzerà il modello in-database di Oracle Machine Learning denominato CHURN_DT_MODEL per prevedere quali clienti abbandoneranno e con quale probabilità".
  • Retrieval-augmented generation (RAG)

    Utilizza il contenuto della memoria di vettore per la ricerca della somiglianza semantica per migliorare l'accuratezza e la pertinenza dei prompt nelle risposte LLM.

  • Generazione di dati sintetici

    Genera dati sintetici utilizzando LLM conformi allo schema per test delle soluzioni, proof of concept e altri usi. I dati sintetici possono supportare test migliori delle tue applicazioni in assenza di dati reali, portando alla qualità complessiva della tua applicazione.

Linee guida sull'uso

Fornisce istruzioni d'uso che garantiscono l'uso efficace e corretto dei prompt del linguaggio naturale per la generazione SQL per garantire un'esperienza utente migliorata.

Destinazione d'uso

Questa funzione è destinata alla generazione e all'esecuzione di query SQL derivanti da prompt di linguaggio naturale forniti dall'utente. Automatizza ciò che un utente potrebbe fare manualmente in base ai metadati dello schema in combinazione con un modello di linguaggio di grandi dimensioni (LLM) di sua scelta.

Sebbene sia possibile fornire qualsiasi prompt, inclusi quelli che non si riferiscono alla produzione dei risultati delle query SQL, Select AI si concentra sulla generazione delle query SQL. Select AI abilita l'invio di richieste generali con l'azione chat.

Dati incremento prompt

Il database aumenta il prompt specificato dall'utente con i metadati del database per mitigare le allucinazioni dell'LLM. Il prompt aumentato viene quindi inviato all'LLM specificato dall'utente per produrre la query.

Il database aumenta il prompt solo con i metadati dello schema. Questi metadati possono includere definizioni di schema, commenti di tabella e colonna e contenuto disponibile dal dizionario dati e dal catalogo. Ai fini della generazione SQL, il database non fornisce il contenuto della tabella o della vista (valori effettivi di riga o colonna) quando si aumenta il prompt.

L'azione narrate, tuttavia, fornisce il risultato della query, che può contenere dati del database, all'LLM specificato dall'utente da cui generare testo in linguaggio naturale che descriva i risultati della query.

AVVERTENZA

I modelli LLM (Large Language Model) sono stati formati su un ampio set di documenti e contenuti di testo, in genere da Internet. Di conseguenza, i LLM possono avere modelli incorporati da contenuti non validi o dannosi, inclusa l'iniezione SQL. Pertanto, mentre i LLM sono abili a generare contenuti utili e pertinenti, possono anche generare informazioni errate e false, incluse query SQL che producono risultati imprecisi e / o compromettono la sicurezza dei tuoi dati.

Le query generate per conto dell'utente dal provider LLM specificato dall'utente verranno eseguite nel database. L'utilizzo di questa funzione è a proprio rischio e, nonostante tutti gli altri termini e condizioni relativi ai servizi forniti da Oracle, costituisce accettazione di tale rischio ed espressa esclusione della responsabilità di Oracle per eventuali danni derivanti da tale utilizzo.

Seleziona provider AI e LLM

Scegli un provider AI e un LLM che soddisfi i tuoi standard di sicurezza e si allinei alle tue esigenze specifiche, come la generazione di testo o codice.

Diversi LLM eccellono in varie attività in base ai dati di formazione e allo scopo previsto. Alcuni modelli sono eccellenti per la generazione di testo, ma potrebbero non funzionare bene nella generazione del codice, mentre altri sono specificamente ottimizzati per le attività di codifica. Scegli un LLM che meglio si adatta alle tue esigenze.

Provider AI LLM Modello di incorporamento per RAG Scopo

AI generativa OCI

  • meta.llama-3.3-70b-instruct (impostazione predefinita)
  • meta.llama-3.2-90b-istruzioni di visualizzazione
  • meta.llama-3.2-11b-istruzioni di visualizzazione
  • meta.llama-3.1-70b-instruct
  • meta.llama-3.1-405b-instruct
  • cohere.command-r-08-2024
  • cohere.command-r-plus-08-2024
  • cohere.command-r-16k (obsoleto)
  • cohere.command–r-plus (obsoleto)
  • xai.grok-3
  • xai.grok-3-fast
  • cohere.embed-english-v3.0 (impostazione predefinita)
  • cohere.embed-multilingue-v3.0
  • cohere.embed-english-light-v3.0
  • cohere.embed-luce-multilingua-v3.0

Vedere Informazioni sull'incorporamento dei modelli nell'AI generativa.

I modelli di chat AI generativa OCI sono supportati per tutte le azioni SELECT AI, ad esempio runsql, showsql, explainsql, narrate e chat.

I modelli di testo di generazione OCI sono supportati solo per l'azione SELECT AI chat.

Per configurare gli attributi del profilo, vedere Attributi profilo.

Servizio OpenAI di Azure

  • GPT-4o
  • GPT-4
  • GPT-4 Turbo con Visione
  • GPT-3.5-Turbo

inserimento testo-ada-002

Ideale per generare istruzioni SQL dai prompt in linguaggio naturale, dall'azione chat e da Select AI RAG.

OpenAI

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

inserimento testo-ada-002

Ideale per generare istruzioni SQL dai prompt in linguaggio naturale, dall'azione chat e da Select AI RAG.

OpenAI-Compatibile

Modelli di provider compatibili con OpenAI, ad esempio:
  • Fuochi d'artificio AI
  • xAI
  • Altre
Incorporamento di modelli da provider compatibili con OpenAI. Ad esempio, vedere Modelli di incorporamento AI Fireworks.

Supporta una vasta gamma di casi d'uso.

Cohere

  • comando (predefinito)
  • comando notturno (sperimentale)
  • comando-r
  • comando-r-plus
  • spia comando
  • comando-luce-notte (sperimentale)
  • modelli personalizzati

embed-english-v2.0

Ideale per l'azione chat.

Google

  • gemini-1.5-flash (predefinito)
  • gemini-1.5-pro
  • gemini-1.0-pro
text-embedding-004 (predefinito)

Ideale per generare istruzioni SQL dai prompt in linguaggio naturale, dall'azione chat e da Select AI RAG.

Antropico

  • claude-3-5-sonnet-20240620 (predefinito)
  • claude-3-opus-20240229
  • claude-3-sonnet-20240229
  • claude-3-haiku-20240307
ND

Ideale per generare istruzioni SQL dai prompt in linguaggio naturale, dall'azione chat e da Select AI RAG.

Hugging Face

  • Mixtral-8x7B-Instruct-v0.1 (impostazione predefinita)
  • Meta-Llama-3-70B-Istruzioni
  • Qwen1.5-1.8B
  • altri modelli di chat
ND

Ideale per generare istruzioni SQL dai prompt in linguaggio naturale, dall'azione chat e da Select AI RAG.

AWS

  • amazon.titan-testo-embed-v1
  • amazon.titan-testo-embed-v2:0
  • cohere.embed-inglese-v3

Supporta una vasta gamma di casi d'uso.

Nota

  • Specificare il provider compatibile con OpenAI tramite provider_endpoint anziché il parametro provider. Vedere Attributi profilo.

  • Per i modelli che accettano immagini, utilizzare meta.llama-3.2-90b-vision-instruct. Questo modello è specificamente addestrato per la visione e le immagini. Sebbene possa essere utilizzato per la generazione di testo e SQL, il modello è più adatto per le immagini. Per ulteriori informazioni, vedere Chat in OCI Generative AI.

    Il modello meta.llama-3.2-11b-vision-instruct offre solide funzionalità multimodali.

  • I modelli di incorporamento sono noti anche come modelli di trasformatori.

Configurare i profili AI utilizzando DBMS_CLOUD_AI

Autonomous AI Database utilizza i profili AI per facilitare e configurare l'accesso a un LLM e per impostare la generazione, l'esecuzione e la spiegazione di SQL in base AI prompt del linguaggio naturale. Inoltre facilita il recupero della generazione aumentata utilizzando modelli di incorporamento e indici vettoriali e consente di chattare con l'LLM.

I profili AI includono oggetti di database che sono la destinazione per le query in linguaggio naturale. I metadati utilizzati da queste destinazioni possono includere nomi di tabelle di database, nomi di colonne, tipi di dati di colonna e commenti. Per creare e configurare i profili AI, utilizzare le procedure DBMS_CLOUD_AI.CREATE_PROFILE e DBMS_CLOUD_AI.SET_PROFILE.

Requisiti per DBMS_CLOUD_AI

Per eseguire DBMS_CLOUD_AI è necessario effettuare le operazioni riportate di seguito.

  • Accesso a un account cloud Oracle Cloud Infrastructure e a un'istanza di Autonomous AI Database.
  • Un account API a pagamento per un provider AI supportato, uno dei seguenti:
    • OpenAI: per consentire a OpenAI di generare istruzioni SQL dai prompt di linguaggio naturale, ottenere le chiavi API dall'account a pagamento OpenAI.

      La chiave API segreta è disponibile nelle impostazioni utente.

    • Cohere: per consentire a Cohere di generare le istruzioni SQL dai prompt del linguaggio naturale, ottenere le chiavi API dall'account a pagamento Cohere.

      Fare clic su Dashboard e fare clic su Chiavi API nella navigazione a sinistra. Copiare la chiave API predefinita o crearne un'altra. Per ulteriori informazioni, vedere API-Keys.

    • Servizio OpenAI di Azure: per abilitare Servizio OpenAI di Azure a generare SQL dai prompt del linguaggio naturale, configurare e fornire l'accesso al provider AI.

      Per utilizzare Servizio OpenAI di Azure, effettuare le operazioni riportate di seguito.

      1. Ottenere le chiavi API segrete. È possibile trovare le chiavi API nella sezione Resource Management del portale Azure. Nella pagina Risorsa Servizio OpenAI di Azure fare clic su Chiavi ed endpoint. È possibile copiare KEY1 o KEY2.
      2. Creare una risorsa di Azure OpenAI Service e distribuire un modello: Creare e distribuire una risorsa di Azure OpenAI Service.

        Suggerimento

        • Prendere nota del nome della risorsa e del nome della distribuzione poiché tali parametri vengono utilizzati per fornire l'autorizzazione di accesso alla rete e creare il profilo Servizio OpenAI di Azure utilizzando la procedura DBMS_CLOUD_AI.CREATE_PROFILE.
        • Per ulteriori informazioni sui limiti di frequenza per il token al minuto in un modello, vedere Quota e limiti del servizio OpenAI di Azure.
      3. Consentire l'accesso al servizio OpenAI di Azure:
        • È possibile utilizzare la chiave API segreta per consentire l'accesso al servizio OpenAI di Azure. Per ulteriori informazioni, vedere l'esempio in Esempi di utilizzo di Select AI.
    • AI generativa OCI: vedere How to Generate the API Signing Key.
    • Google: per consentire a Google AI Studio di generare risposte SQL e di testo AI prompt del linguaggio naturale, ottenere le chiavi API dall'account a pagamento Google AI Studio.
      1. Vai a Google AI Studio.
      2. Fare clic su Accedi a Google AI Studio.
      3. Fare clic su Ottieni chiave API nella schermata del prompt.
      4. Selezionare tutte le opzioni applicabili nella pagina successiva.
      5. Fare clic su Crea chiave API.
      6. Fare clic su Crea chiave API nel nuovo progetto.

        La schermata visualizza lo stato di avanzamento e genera una chiave API. Copiare la chiave e salvarla.

    • Antropico: per consentire ad Anthropic Developer Console di generare risposte SQL e di testo ai prompt del linguaggio naturale, ottenere le chiavi API dall'account a pagamento Anthropic Developer Console.
      1. Andare a Anthropic Developer Console.
      2. Registra un account se non ne hai già uno.
      3. Una volta eseguito il login, passare alla sezione API o al dashboard.
      4. Cercare un'opzione per generare o visualizzare le chiavi API.
      5. Fare clic per creare una nuova API Key.
      6. Copiare la chiave API generata e salvarla.

        L'API Claude è un servizio a pagamento. Prima di poter utilizzare la chiave API, dovrai aggiungere crediti al tuo account.

    • Hugging Face: per abilitare Hugging Face come provider AI per generare risposte SQL e di testo AI prompt del linguaggio naturale, ottenere le chiavi API dall'account a pagamento Hugging Face.
      1. Passare a Hugging Face.
      2. Registra un account se non ne hai già uno.
      3. Accedere alle impostazioni dell'account.
      4. Nel menu di navigazione individuare i token di accesso.
      5. Fare clic per creare una nuova API Key.
      6. Copiare la chiave API generata e salvarla.
    • AWS: per abilitare AWS, ottieni la tua chiave API e l'ID modello.

      Ottenere la chiave API e utilizzarla per creare le credenziali tramite DBMS_CLOUD.CREATE_CREDENTIAL.

      Seguire questo processo per ottenere la chiave API e il nome del modello:

      1. Registrati per un account AWS se non ne hai già uno.
      2. Creare le chiavi di accesso e le chiavi segrete da AWS Bedrock Console.
      3. Copiare le chiavi generate e salvarle.
      4. Richiedi l'accesso ai loro modelli di base. Vedere Accedi ai modelli di base di Amazon Bedrock.
      5. Ottenere l'ID modello. È necessario disporre dell'ID modello nella procedura DBMS_CLOUD_AI.CREATE_PROFILE. L'ID modello dipende dalle risorse utilizzate. Se si utilizza:

        Nota

        Il modello importato non è supportato con l'API Bedrock Converse.

      Per utilizzare AWS come provider, vedere Esempio: selezionare AI con AWS.

  • Privilegi ACL di rete per accedere al provider AI esterno.

    Nota

    L'ACL di rete non è applicabile per l'AI generativa OCI.
  • Credenziale che fornisce l'accesso al provider AI.
Per configurare DBMS_CLOUD_AI:
  1. Concedere il privilegio EXECUTE sul package DBMS_CLOUD_AI all'utente che desidera utilizzare Select AI.

    Per impostazione predefinita, il privilegio EXECUTE viene concesso solo all'utente ADMIN. L'utente ADMIN può concedere il privilegio EXECUTE ad altri utenti.

    L'esempio seguente concede il privilegio EXECUTE a ADB_USER:
    grant execute on DBMS_CLOUD_AI to ADB_USER;

    L'esempio seguente concede a ADB_USER il privilegio di utilizzare l'endpoint api.openai.com.

    BEGIN  
        DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
             host => 'api.openai.com',
             ace  => xs$ace_type(privilege_list => xs$name_list('http'),
                                 principal_name => 'ADB_USER',
                                 principal_type => xs_acl.ptype_db)
       );
    END;
    /
    
  2. Concedere l'accesso ACL di rete all'utente che desidera utilizzare Select AI e per l'endpoint del provider AI.

    L'utente ADMIN può concedere l'accesso all'ACL di rete. Per ulteriori informazioni, vedere APPEND_HOST_ACE Procedure in Oracle Database 19c PL/SQL Packages and Types Reference oppure Oracle Database 26ai PL/SQL Packages and Types Reference.

  3. Creare una credenziale per abilitare l'accesso al provider AI.

    Per ulteriori informazioni, vedere CREATE_CREDENTIAL Procedura.

    Di seguito è riportato un esempio di come creare una credenziale per abilitare l'accesso a OpenAI.

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

APPEND_HOST_ACE Parametri funzione

Parametro Descrizione

host

L'host, che può essere il nome o l'indirizzo IP dell'host. È possibile utilizzare un carattere jolly per specificare un dominio o una subnet IP. Il nome dell'host o del dominio non distingue tra maiuscole e minuscole.

Per OpenAI, utilizzare api.openai.com.

Per Cohere, utilizzare api.cohere.ai.

Per Servizio OpenAI di Azure, utilizzare <azure_resource_name>.openai.azure.com. Per ulteriori informazioni su azure_resource_name, vedere Attributi profilo.

Per Google, utilizzare generativelanguage.googleapis.com.

Per Anthropic, utilizzare api.anthropic.com.

Per Hugging Face, utilizzare api-inference.huggingface.co.

ace

Voci di controllo dell'accesso (ACE, Access Control Entries). Il tipo XS$ACE_TYPE viene fornito per creare ogni voce ACE per l'ACL. Per ulteriori dettagli, vedere Creating ACLs and ACEs in Oracle Database 19c Real Application Security Administrator's and Developer's Guide o Oracle Database 26ai Real Application Security Administrator's and Developer's Guide.

Parametri di DBMS_CLOUD.CREATE_CREDENTIAL

Parametro Descrizione

credential_name

Il nome della credenziale da memorizzare. Il parametro credential_name deve essere conforme alle convenzioni di denominazione degli oggetti Oracle, che non consentono spazi o trattini.

username

Gli argomenti username e password specificano insieme le credenziali del provider AI.

username è un nome utente specificato dall'utente.

password

Gli argomenti username e password specificano insieme le credenziali del provider AI.

password è la chiave API segreta del provider AI e dipende dal provider, ovvero OpenAI, Cohere, Servizio Azure OpenAI, OCI, Google, Anthropic o Hugging Face. Per informazioni dettagliate, vedere .

Creare e impostare un profilo AI

Descrive i passi per creare e abilitare un profilo AI.

Utilizzare DBMS_CLOUD_AI.CREATE_PROFILE per creare un profilo AI. Iniziare quindi DBMS_CLOUD_AI.SET_PROFILE per abilitare il profilo AI in modo da poter utilizzare SELECT AI con un prompt in linguaggio naturale.

Nota

Prima di utilizzare SELECT AI, è necessario eseguire DBMS_CLOUD_AI.SET_PROFILE in ogni nuova sessione del database (connessione).

L'esempio seguente con il provider OpenAI crea un profilo AI denominato OPENAI e imposta il profilo OPENAI per la sessione utente corrente.

-- 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.

Utilizzare la parola chiave AI per immettere i prompt

Utilizzare AI come parola chiave in un'istruzione SELECT per interagire con il database utilizzando i prompt in linguaggio naturale.

La parola chiave AI in un'istruzione SELECT indica al motore di esecuzione SQL di utilizzare l'LLM identificato nel profilo AI attivo per elaborare il linguaggio naturale e generare SQL.

È possibile utilizzare la parola chiave AI in una query con i client Oracle, ad esempio SQL Developer, OML Notebooks e strumenti di terze parti, per interagire con il database in linguaggio naturale.

Nota

Non è possibile eseguire istruzioni PL/SQL, DDL o DML utilizzando la parola chiave AI.

Sintassi

La sintassi per l'esecuzione del prompt AI è la seguente:
SELECT AI action natural_language_prompt

Parametri

Di seguito sono riportati i parametri disponibili per il parametro action.
Parametro Descrizione

runsql

Eseguire il comando SQL fornito utilizzando un prompt del linguaggio naturale. Questa è l'azione predefinita ed è facoltativa specificare questo parametro.

showsql

Visualizza l'istruzione SQL per un prompt in linguaggio naturale.

narrate

L'output del prompt viene spiegato in linguaggio naturale. Questa opzione invia il risultato SQL al provider AI per produrre un riepilogo del linguaggio naturale.

chat

Genera una risposta direttamente dall'LLM in base al prompt. Se conversation nella funzione DBMS_CLOUD_AI.CREATE_PROFILE è impostato su true, questa opzione include il contenuto di interazioni o prompt precedenti, inclusi potenzialmente i metadati dello schema.

explainsql

L'istruzione SQL generata dal prompt viene spiegata in linguaggio naturale. Questa opzione invia l'istruzione SQL generata al provider AI per produrre una spiegazione del linguaggio naturale.

Note sull'uso

  • La selezione di AI non è supportata in Database Actions o nel servizio APEX. È possibile utilizzare solo la funzione DBMS_CLOUD_AI.GENERATE.

  • La parola chiave AI è supportata solo in un'istruzione SELECT.

  • Non è possibile eseguire istruzioni PL/SQL, DDL o DML utilizzando la parola chiave AI.

  • La sequenza è SELECT seguita da AI. Per queste parole chiave non viene applicata la distinzione tra casi. Dopo aver configurato un DBMS_CLOUD_AI.SET_PROFILE, il testo dopo SELECT AI è un prompt in linguaggio naturale. Se un profilo AI non è impostato, SELECT AI segnala il seguente errore:

    ORA-00923: FROM keyword not found where expected
    00923. 00000 -  "FROM keyword not found where expected"
  • Si applicano regole speciali per l'uso dei caratteri in base alle linee guida Oracle. Ad esempio, utilizzare le virgolette singole due volte se si utilizza un apostrofo in una frase.

    select ai how many customers in SF don''t own their own home
  • I LLM sono soggetti a allucinazioni e i risultati non sono sempre corretti:

    • È possibile che SELECT AI non sia in grado di eseguire l'istruzione SQL generata per un prompt specifico del linguaggio naturale.

    • È possibile che SELECT AI non sia in grado di generare SQL per un prompt specifico del linguaggio naturale.

    In questo scenario, SELECT AI risponde con le informazioni necessarie per generare un'istruzione SQL valida.

  • Utilizzare l'azione chat, con SELECT AI chat, per ulteriori informazioni sui costrutti SQL. Per ottenere risultati migliori con l'azione chat, utilizzare le viste di database o le tabelle con nomi di colonna contestuali oppure aggiungere commenti di colonna per spiegare i valori memorizzati nelle colonne.

  • Per accedere alle viste DBA o USER, vedere DBMS_CLOUD_AI Viste.

Utilizzo e personalizzazione delle conversazioni

Le conversazioni in Select AI si riferiscono al dialogo interattivo tra l'utente e il sistema, in cui una sequenza di prompt del linguaggio naturale forniti dall'utente viene memorizzata e gestita per supportare la memoria a lungo termine per le interazioni LLM.

Select AI supporta conversazioni a breve termine basate su sessioni, abilitate nel profilo AI, nonché conversazioni denominate a lungo termine, abilitate mediante procedure o funzioni specifiche e ID di conversazione.

Nota

Il supporto per le conversazioni AI selezionate è disponibile in Oracle Database 19c a partire dalla versione 19.30 e in Oracle Database 26ai a partire dalla versione 23.26.1.

Tipi di conversioni

Select AI supporta conversazioni a breve termine basate su sessioni e conversazioni personalizzabili.

Conversazioni a breve termine basate sulla sessione: la selezione di AI include conversazioni a breve termine basate sulla sessione per generare risposte contestuali per il prompt corrente in base alle interazioni precedenti.

È possibile abilitarlo impostando l'attributo conversation su true|false nel profilo AI. A differenza della funzione di conversazione multipla, le conversazioni basate sulla sessione memorizzano i prompt solo per la durata della sessione. I prompt vengono memorizzati in una tabella temporanea, eliminati automaticamente al termine della sessione e non possono essere riutilizzati e scambiati tra le conversazioni.

Conversazioni a lungo termine personalizzabili: Select AI supporta la creazione e l'utilizzo di conversazioni personalizzabili che consentono di utilizzare Select AI con argomenti diversi senza mescolare contesto, migliorando sia la flessibilità che l'efficienza. È possibile creare, impostare, eliminare e aggiornare le conversazioni mediante le procedure e le funzioni di conversazione DBMS_CLOUD_AI. Quando si abilitano le conversazioni, Select AI recupera la cronologia dei prompt e le invia all'LLM per generare una risposta per il prompt corrente. Queste risposte vengono memorizzate in una tabella persistente per uso futuro.

Nota

Le conversazioni AI selezionate supportano le azioni seguenti: runsql, showsql, explainsql, narrate e chat.

Come utilizzare conversazioni personalizzabili

È possibile utilizzare Select AI per le conversazioni personalizzabili nei modi riportati di seguito.

  • Impostare l'ID conversazione nella sessione utilizzando la procedura DBMS_CLOUD_AI.SET_CONVERSATION_ID ed eseguire SELECT AI <ACTION> <PROMPT>.

  • Passare conversation_id nell'argomento params della funzione DBMS_CLOUD_AI.GENERATE.

Nota

Se si utilizzano più conversazioni e l'impostazione conversation: [true|false], l'impostazione conversation viene ignorata.

Nel contesto della generazione delle query SQL (NL2SQL), le conversazioni consentono un modo più intuitivo e accessibile di lavorare con i dati, rendendo più facile per gli utenti estrarre insight ed eseguire attività senza aver bisogno di una profonda conoscenza tecnica di SQL. Le conversazioni possono essere utilizzate anche con le funzionalità di chat e RAG di Select AI.

Ad esempio, le conversazioni forniscono un modo intuitivo per analizzare i dati:
  • Fai una domanda come "Qual è il numero totale di clienti?"
  • Eseguire il follow-up con domande contestuali quali:
    • "Conteggio break out dei clienti per paese"
    • "Quale fascia d'età è più comune"
    • "Mantieni i primi 5 clienti e il loro paese in base ai loro acquisti e includi una classifica nel risultato"

Per abilitare le conversazioni, vedere Esempio: abilitazione delle conversazioni in Select AI per un esempio completo.

Conversazioni basate sulla sessione e conversazioni personalizzabili

Nella tabella seguente vengono confrontate la conversazione basata sulla sessione e le conversazioni personalizzabili in Select AI:

Domande Conversazioni a breve termine basate sulla sessione Conversazioni a lungo termine personalizzabili

Quando si utilizzano?

Ideale per chat rapide e temporanee in cui si desidera che il modello ricordi le domande e le risposte recenti durante una singola sessione. È utile quando non è necessario salvare o riutilizzare la conversazione in un secondo momento.

Progettato per conversazioni più lunghe o in corso che possono estendersi su più sessioni. È utile quando si desidera tenere traccia, rivedere o gestire la cronologia delle conversazioni o quando parti diverse di un'applicazione devono accedere allo stesso contesto di conversazione nel tempo.

Come faccio ad abilitare?

Impostare {"conversation": true or false} nel profilo AI.

Utilizzare la procedura DBMS_CLOUD_AI.SET_CONVERSATION_ID o DBMS_CLOUD_AI.GENERATE

Quante conversazioni sono consentite?

Uno.

È possibile creare più conversazioni.

Se si specificano in modo esplicito gli ID conversazione, è possibile alternarli per associare i prompt alle conversazioni appropriate in base alle esigenze.

Dove sono memorizzati i prompt e per quanto tempo?

I prompt vengono memorizzati in una tabella temporanea ed eliminati al termine della sessione.

I prompt vengono memorizzati in una tabella permanente.

I prompt vengono conservati nel database per il numero di giorni specificato dal parametro retention_days nella procedura DBMS_CLOUD_AI.CREATE_CONVERSATION. Dopo il periodo di conservazione, la conversazione e i relativi prompt vengono eliminati automaticamente. È inoltre possibile eliminare manualmente i prompt utilizzando la procedura DBMS_CLOUD_AI.DELETE_CONVERSATION_PROMPT.

Quanti prompt vengono memorizzati e quanti prompt vengono inviati all'LLM?

Vengono memorizzati e inviati al LLM un massimo di 10 prompt. Impossibile personalizzare questo limite.

Tutte le richieste vengono memorizzate.

Per impostazione predefinita, il sistema invia i 10 prompt più recenti al LLM. È possibile personalizzare l'operazione utilizzando il parametro conversation_length. Vedere CREATE_CONVERSATION Attributi.

È possibile eliminare singoli prompt?

No, non è possibile eliminare manualmente il singolo prompt.

È possibile eliminare singoli prompt specifici utilizzando l'ID del prompt specificato nella vista USER_CLOUD_AI_CONVERSATION_PROMPTS e la procedura DBMS_CLOUD_AI.DELETE_CONVERSATION_PROMPT.

I profili AI vengono utilizzati per il recupero delle conversazioni?

Sì, Select AI recupera prompt e risposte generati in precedenza utilizzando lo stesso profilo AI.

No, Select AI tiene traccia del profilo AI utilizzato durante la memorizzazione di prompt e risposte, ma non ne limita il recupero in base a tale profilo. Invia tutte le cronologie delle conversazioni all'LLM per guidare la generazione delle risposte, indipendentemente dal profilo utilizzato per generarle.

Dove posso controllare la cronologia dei prompt?

I prompt vengono salvati in una tabella temporanea in CLOUD USER, ma non sono accessibili per l'esecuzione di query.

È possibile eseguire query e rivedere conversazioni e prompt tramite le viste di conversazione DBMS_CLOUD_AI. Per informazioni dettagliate, vedere DBMS_CLOUD_AI Views.

Fornisci feedback per migliorare i LLM

Select AI ti consente di fornire feedback per migliorare la capacità del tuo LLM selezionato di generare query SQL più accurate.

Nota

Questa funzione è disponibile solo su Oracle Database 23ai. È possibile utilizzarlo insieme alle azioni Select AI esistenti: runsql, showsql e explainsql. Assicurarsi che il profilo AI sia configurato per la generazione NL2SQL e non RAG.

È possibile fornire un feedback per migliorare la precisione dell'istruzione SQL generata tramite l'azione feedback o la procedura DBMS_CLOUD_AI.FEEDBACK. Selezionare AI crea un indice vettoriale predefinito denominato <profile_name>_FEEDBACK_VECINDEX con attributi predefiniti quando si utilizza la funzione di feedback per la prima volta. Questo indice consente di perfezionare le istruzioni SQL generate in futuro in base al feedback fornito. Per ulteriori informazioni, vedere Indice vettoriale per FEEDBACK.

Suggerimento

Utilizzare la procedura DBMS_CLOUD_AI.FEEDBACK quando l'LLM specificato non riesce a generare la query SQL corretta o non restituisce il risultato previsto da una delle azioni NL2SQL SELECT AI. È inoltre possibile utilizzare la procedura DBMS_CLOUD_AI.FEEDBACK per aggiungere l'istruzione SQL corretta direttamente alla tabella vettoriale. Ciò consente di guidare la generazione SQL futura fungendo da riferimento per prompt simili.

Sono accettati i seguenti tipi di feedback:
  • Feedback positivo: approva e conferma l'accuratezza dell'istruzione SQL generata. Il sistema memorizza la query confermata per riferimento futuro.

  • Feedback negativo: se i risultati dell'azione NL2SQL SELECT AI non riescono a generare l'istruzione SQL corretta, è possibile fornire i miglioramenti delle query SQL necessari utilizzando SELECT AI feedback <feedback> o la procedura DBMS_CLOUD_AI.FEEDBACK identificando gli errori nella query o fornendo indicazioni su ciò che era previsto in prosa. Il sistema perfeziona la query utilizzando un LLM e memorizza la versione perfezionata per la generazione di query Select AI future. Le query perfezionate memorizzate vengono quindi utilizzate come suggerimenti e inviate all'LLM come parte del prompt aumentato.

Vantaggi dell'utilizzo del feedback

L'azione e la procedura di feedback in Select AI introduce un meccanismo di tuning del prompt che migliora l'accuratezza della generazione delle query SQL.

Il proprietario del profilo AI può fornire un feedback per le query SQL generate e il sistema Select AI impara dall'interazione utente nel tempo. Questo apprendimento comporta l'aggregazione di un repository di prompt e contenuti di feedback in cui la ricerca vettoriale viene utilizzata per identificare prompt simili al prompt corrente. Gli esempi di corrispondenza principali vengono forniti come metadati per l'LLM come parte del prompt aumentato. Di seguito sono riportati i vantaggi.
  • Può migliorare la precisione delle query SQL.
  • Consente al proprietario del profilo AI di fornire feedback confermando le query corrette o suggerendo correzioni fornendo l'intenzione semantica o le definizioni aziendali per produrre una query corretta.
  • Utilizza il feedback cronologico come suggerimenti per la generazione di query future, adattandosi così alle tue esigenze.

Come fornire feedback

Selezionare AI consente di fornire un feedback utilizzando l'azione feedback o richiamando la procedura DBMS_CLOUD_AI.FEEDBACK.

Attenzione

Non utilizzare l'azione di feedback nelle applicazioni in cui più utenti condividono sessioni di database in un singolo utente del database proprietario del profilo AI. Il proprietario del profilo AI deve fornire un feedback solo dopo aver confermato che la query corretta è appropriata per tutti gli utenti di tale profilo.

È possibile fornire un feedback includendo quanto segue:
  • SQL_TEXT: includere il feedback tra virgolette per la query SQL corrente oppure ottenere il valore SQL_TEXT per una query specifica eseguendo una query sulla vista V$MAPPED_SQL.

  • SQL_ID: è possibile ottenere SQL_ID eseguendo una query sulla vista V$MAPPED_SQL.

  • Utilizza l'ultima SQL generata: fornisci il tuo feedback in linguaggio naturale.

    Nota

    Per utilizzare l'ultimo SQL, assicurarsi di impostare l'output del server su Oracle SQL*Plus o Oracle SQLcl. Nelle tabelle sys.v_$session e v_$mapped_sql è necessario disporre del privilegio READ.
    GRANT READ ON SYS.V_$MAPPED_SQL TO ADB_USER;
    GRANT READ ON SYS.V_$SESSION TO ADB_USER;

Per ulteriori informazioni, vedere Procedura FEEDBACK ed Esempio: selezione del FEEDBACK AI.

Dati grafico query con grafici proprietà

Selezionare AI genera Property Graph Query (PGQ) nei grafici delle proprietà Oracle utilizzando il linguaggio naturale. Consente agli utenti di eseguire query sui dati del grafico tramite l'operatore GRAPH_TABLE con una conoscenza minima di SQL.

Select AI estende il proprio linguaggio naturale alla funzionalità SQL (NL2SQL) per rappresentare le strutture del grafico che consentono di eseguire query sui grafici delle proprietà SQL utilizzando il linguaggio naturale. Select AI applica l'operatore GRAPH_TABLE per interpretare relazioni e attributi nei dati strutturati in grafici. Genera query di grafici SQL o PGQ in base agli oggetti dati definiti nel profilo AI. Quando un grafico delle proprietà è incluso nel profilo AI, Select AI utilizza l'intelligenza artificiale generativa per creare una query PGQ che fa riferimento al grafico tramite l'operatore GRAPH_TABLE. LLM riceve automaticamente i metadati dell'oggetto grafico, ad esempio le istruzioni CREATE PROPERTY GRAPH, per generare query accurate. Quando si specifica una tabella, una vista o un oggetto relazionale, Select AI genera una query SQL. Questa funzionalità semplifica le query di corrispondenza dei pattern sui dati dei grafici memorizzati in Oracle AI Database e riduce la dipendenza dalla creazione manuale di query SQL.

Quando si crea un profilo AI con uno o più grafici delle proprietà definiti nell'attributo object_list, l'LLM definito nel profilo AI interpreta i prompt utilizzando il contesto dei grafici delle proprietà specificati. Selezionare AI crea un prompt aumentato che include:
  • Istruzioni per la creazione di query PGQ.

  • Metadati che descrivono i grafici delle proprietà forniti (dalle relative istruzioni CREATE PROPERTY GRAPH).

Questo prompt aumentato viene inviato al LLM. Select AI esegue la query e restituisce i risultati. Se un grafico delle proprietà viene specificato insieme ad altri tipi di oggetto, ad esempio tabelle, schemi o viste, nel profilo AI, Select AI genera un errore.

SQL rispetto a PGQ

Con Select AI, il tipo di query generato dipende dagli oggetti definiti nell'attributo object_list del profilo AI.
  • Query SQL: utilizza dati relazionali quali schema, tabelle o viste.

  • Query PGQ: utilizza i grafici delle proprietà e applica l'operatore GRAPH_TABLE per la corrispondenza dei pattern.

Per ulteriori dettagli, vedere Grafico proprietà SQL e Query SQL GRAPH.

Vantaggi dell'utilizzo di Select AI nei grafici delle strutture

Gli utenti del database possono eseguire query sui grafici delle proprietà utilizzando Select AI per generare query sui grafici dal linguaggio naturale, riducendo il lavoro manuale e migliorando la comprensione delle relazioni tra grafici.

Vantaggi principali:
  • NL2SQL: la funzionalità NL2SQL di Select AI ora si estende alle query di grafici che consentono agli utenti di scrivere prompt in linguaggio naturale come "Trova clienti che hanno acquistato un vestito".

  • SQL o PGQ: a seconda dell'oggetto dati, Select AI genera automaticamente query SQL o PGQ.

  • Produttività: riduce i tempi e gli sforzi per creare query grafiche utilizzando l'operatore GRAPH_TABLE.

  • Conversazioni: mantiene il contesto di conversazione ed esegue query su un grafico delle proprietà.

Limitazioni

Selezionare AI per i grafici delle proprietà non supporta le funzionalità riportate di seguito.

Come utilizzare Seleziona intelligenza artificiale nei grafici delle proprietà

Selezionare AI consente di esplorare i dati del grafico utilizzando la funzione DBMS_CLOUD_AI.GENERATE o Select AI <action> <prompt>.

Dopo aver definito i grafici delle proprietà nell'attributo object_list del profilo AI, è possibile utilizzare:
  • SELECT AI <ACTION> <PROMPT> nella riga di comando SQL per generare un output.

  • DBMS_CLOUD_AI.GENERATE funzione e fornire il prompt all'interno della funzione.

Di seguito sono riportate le azioni supportate: runsql, showsql, explainsql, narrate e showpropmt. Select AI for Property Graph supporta anche conversazioni a breve termine e personalizzabili a lungo termine basate sulla sessione.

Per ulteriori informazioni, vedere Esempio: selezione di AI per i grafici delle proprietà ed Esempio: prompt di esempio per i grafici delle proprietà.

Esempi di utilizzo dell'intelligenza artificiale selezionata

Esplora l'integrazione di Select AI di Oracle con vari provider AI supportati per generare, eseguire e spiegare SQL da prompt in linguaggio naturale o chattare con l'LLM.

Esempio: Seleziona azioni AI

L'esempio seguente illustra azioni quali runsql (impostazione predefinita), showsql, narrate, chat, explainsql, feedback e summarize che è possibile eseguire con SELECT AI. Questi esempi utilizzano lo schema sh con il provider AI e gli attributi di profilo specificati nella funzione DBMS_CLOUD_AI.CREATE_PROFILE. Utilizzare le azioni Seleziona AI dopo aver impostato il profilo AI utilizzando la procedura DBMS_CLOUD_AI.SET_PROFILE nella sessione corrente.

Per generare un riepilogo del testo, utilizzare 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.

Esempio: selezionare AI con AWS

Questo esempio mostra come utilizzare AWS per generare, eseguire e spiegare SQL da prompt in linguaggio naturale o chat utilizzando i modelli disponibili con AWS.

L'esempio seguente mostra come utilizzare AWS come provider AI con Amazon Bedrock e i suoi modelli di base. L'esempio mostra la creazione di credenziali AWS, l'accesso alla rete, la creazione di un profilo AI e l'utilizzo di azioni Select AI per generare query SQL da prompt in linguaggio naturale e chat utilizzando i modelli di base AWS.

Per utilizzare AWS, ottenere la chiave di accesso, le chiavi segrete e l'ID del modello. Vedere . Utilizzare l'ID modello come attributo model nella procedura DBMS_CLOUD_AI.CREATE_PROFILE. È necessario specificare l'attributo model in modo esplicito, poiché non viene fornito alcun modello predefinito.

--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.

Esempio: Abilita conversazioni in AI selezionata

Questi esempi illustrano l'abilitazione delle conversazioni in Select AI.

Nota

Un utente con privilegi di amministratore (ADMIN) deve concedere EXECUTE e abilitare la lista di controllo dell'accesso di rete (ACL, Network Access Control List).

Conversazioni basate su sessione

Crea il tuo profilo AI. Impostare l'attributo conversation su true nel profilo. Questa azione include il contenuto delle interazioni o dei prompt precedenti, inclusi potenzialmente i metadati dello schema, e impostare il profilo. Una volta abilitato il profilo, puoi iniziare a conversare con i tuoi dati. Usa il linguaggio naturale per porre domande e dare seguito alle tue esigenze.


--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.

Conversazioni personalizzabili

Gli esempi riportati di seguito illustrano l'utilizzo dell'API di gestione delle conversazioni che supporta conversazioni personalizzabili. Per utilizzare Select AI per più conversazioni:
  1. Crea una conversazione
  2. Impostare la conversazione nella sessione utente corrente
  3. Usa Select AI <action> <prompt>
È possibile creare e impostare la conversazione nei modi seguenti:
  • Utilizzare la funzione DBMS_CLOUD_AI.CREATE_CONVERSATION, quindi impostare la conversazione utilizzando DBMS_CLOUD_AI.SET_CONVERSATION_ID.
  • Chiamare direttamente la procedura DBMS_CLOUD_AI.CREATE_CONVERSATION per creare e impostare la conversazione in un unico passaggio.
Esempio: creazione e impostazione di conversazioni personalizzabili

Nell'esempio seguente viene illustrato come creare una conversazione utilizzando la funzione DBMS_CLOUD_AI.CREATE_CONVERSATION e impostarla utilizzando la procedura DBMS_CLOUD_AI.SET_CONVERSATION_ID.

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

L'esempio seguente mostra l'esecuzione della procedura DBMS_CLOUD_AI.CREATE_CONVERSATION per creare e impostare direttamente conversation_id.

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

È inoltre possibile personalizzare gli attributi della conversazione, ad esempio title, description, retention_days e conversation_length.

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

È possibile visualizzare se esiste una determinata conversazione eseguendo una query sulla vista 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

È inoltre possibile verificare se una conversazione è impostata chiamando la funzione DBMS_CLOUD_AI.GET_CONVERSATION_ID.

SELECT DBMS_CLOUD_AI.GET_CONVERSATION_ID;
 
 
--------------------------------------------------------------------------------
30C9DB6E-EA4F-AFBA-E063-9C6D46644B92
Esempio: utilizzo di conversazioni personalizzabili con Select AI

Dopo aver creato e impostato la conversazione e abilitato il profilo AI, è possibile iniziare a interagire con i dati. Usa il linguaggio naturale per porre domande e dare seguito alle tue esigenze.

Usare 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.
Esempio: utilizzare la funzione GENERATE per confrontare due conversazioni

L'esempio seguente mostra come due conversazioni vengono utilizzate in modo intercambiabile per porre domande e verificare risposte accurate. Ogni conversazione inizia con una domanda diversa focalizzata sul confronto. In seguito, quando si pone la stessa domanda di follow-up in entrambe le conversazioni, ciascuna restituisce una risposta diversa in base al contesto precedente.

-- 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.

È possibile chiamare la funzione DBMS_CLOUD_AI.GENERATE senza specificare una conversazione; tuttavia, in questi casi, non dovrebbe essere prevista una risposta 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.
Esempio: verifica delle conversazioni tramite le viste DBMS_CLOUD_AI

È possibile eseguire una query sulle viste di conversazione DBMS_CLOUD_AI per esaminare la conversazione e richiedere i dettagli. Per ulteriori informazioni, vedere .

Nota

Gli

Le viste con il prefisso DBA_ sono disponibili solo per gli utenti con privilegi di amministratore (ADMIN).

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

SELECT conversation_id, count(*) FROM dba_cloud_ai_conversation_prompts
     GROUP BY conversation_id;
 
CONVERSATION_ID                COUNT(*)
------------------------------------ ----------
30C9DB6E-EA4D-AFBA-E063-9C6D46644B92          2
30C9DB6E-EA4E-AFBA-E063-9C6D46644B92          2
Esempio: Aggiorna dettagli conversazione

È possibile aggiornare i valori title, description e retention_days di una conversazione utilizzando la procedura DBMS_CLOUD_AI.UPDATE_CONVERSATION. È possibile verificare l'aggiornamento eseguendo una query sulla vista conversazione DBMS_CLOUD_AI.

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

È possibile eliminare un singolo prompt dalle conversazioni e verificare la modifica eseguendo una query sulla vista Conversazione 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
Esempio: eliminazione di una conversazione

È possibile eliminare l'intera conversazione, rimuovendo anche tutti i prompt ad essa associati.

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

Esempio: selezione del feedback AI

In questi esempi viene illustrato come utilizzare la procedura DBMS_CLOUD_AI.FEEDBACK e i diversi scenari per fornire feedback per migliorare la successiva generazione di query SQL.

Nota

È possibile fornire un feedback per i prompt SQL Select AI anche se il prompt non è stato eseguito in precedenza. Selezionare AI non richiede che il prompt SQL venga utilizzato in una query prima di sottomettere il feedback. È possibile fornire feedback per qualsiasi prompt valido in qualsiasi momento.

Esempio: fornire un feedback negativo

L'esempio seguente mostra come fornire correzioni all'istruzione SQL generata come feedback (feedback negativo) utilizzando feedback_type come negative e fornendo la query SQL.

Per aggiungere il feedback al profilo AI denominato OCI_FEEDBACK1, chiamare la procedura DBMS_CLOUD_AI.FEEDBACK con il parametro sql_text che contiene il prompt. Per ulteriori informazioni sugli attributi, vedere . Quindi, è possibile recuperare le colonne content e attributes dalla tabella <profile_name>_FEEDBACK_VECINDEX$VECTAB, che è collegata a tale query SQL specifica. Selezionare AI per creare automaticamente questa tabella vettoriale la prima volta che si utilizza la funzione di feedback. Per ulteriori informazioni, fare riferimento alla sezione .

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}
Esempio: fornire un feedback positivo

L'esempio riportato di seguito mostra di aver approvato l'accettazione e la conferma dell'istruzione SQL generata (feedback positivo) utilizzando feedback_type come positive.

In questo esempio, la query recupera sql_id dalla vista v$mapped_sql per il prompt specificato. Per ulteriori informazioni, vedere V_MAPPED_SQL.

Per aggiungere il feedback al profilo AI denominato OCI_FEEDBACK1, chiamare la procedura DBMS_CLOUD_AI.FEEDBACK con il parametro sql_id. Quindi, è possibile recuperare le colonne content e attributes dalla tabella <profile_name>_FEEDBACK_VECINDEX$VECTAB, che è collegata a tale query SQL specifica. Selezionare AI per creare automaticamente questa tabella vettoriale la prima volta che si utilizza la funzione di feedback. Per ulteriori informazioni, fare riferimento alla sezione .

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}
Esempio: fornire feedback senza uso precedente

È possibile fornire un feedback per i prompt SQL anche se il prompt non è stato utilizzato in precedenza. Ad esempio:

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;
/

In questo caso, il feedback per il prompt select ai runsql how many products named PAD viene inviato senza dover utilizzare il prompt in anticipo.

Esempio: aggiunta o eliminazione del feedback per l'istruzione SQL generata
L'esempio seguente illustra l'aggiunta o l'eliminazione del feedback per l'istruzione SQL generata specificando i parametri della procedura DBMS_CLOUD_AI.FEEDBACK. In questo esempio viene illustrato come utilizzare sql_id e sql_text insieme ad altri parametri.

Nota

Selezionare AI per consentire una sola voce di feedback per ogni sql_id. Se si fornisce un feedback aggiuntivo per lo stesso sql_id, Select AI sostituisce la voce precedente con quella nuova.

Per ulteriori informazioni sui parametri, vedere .

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');
Esempio: utilizzare l'azione di feedback con l'ultima istruzione SQL AI per fornire feedback negativi

In questo esempio viene fornita una dimostrazione dell'uso dell'azione feedback per migliorare l'istruzione SQL generata suggerendo le modifiche utilizzando il linguaggio naturale.

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

 
PL/SQL procedure successfully completed.
 

select ai showsql rank movie duration;
 
RESPONSE
-------------------------------------------------------------------------------
SELECT "DURATION" AS "Movie Duration" FROM "ADB_USER"."MOVIES" ORDER BY "DURATION"
 
select ai feedback use ascending sorting;
 
RESPONSE
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Based on your feedback, the SQL query for prompt "rank movie duration" is successfully refined. The refined SQL query as following:
SELECT m."DURATION" AS "Movie Duration" FROM "ADB_USER."MOVIES" m ORDER BY m."DURATION" ASC
 
 
select ai showsql rank the movie duration;
 
RESPONSE
-----------------------------------------------------------------------------------------
SELECT m."DURATION" AS "Movie Duration" FROM "ADB_USER."MOVIES" m ORDER BY m."DURATION" ASC
Esempio: utilizzare l'azione di feedback con l'ultima istruzione SQL AI per fornire un feedback positivo

Questo esempio illustra l'uso dell'azione feedback per accettare l'istruzione SQL generata utilizzando il linguaggio naturale.

--Positive feedback

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


Select AI Feedback Action Referring SQL_ID
Esempio: utilizzare l'azione Feedback con SQL_ID per fornire feedback

In questo esempio viene illustrato come utilizzare SQL_ID con l'azione feedback per fornire un feedback per una determinata query SQL generata. È possibile ottenere SQL_ID eseguendo una query sulla tabella 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
Esempio: azione di feedback con testo query

Questo esempio mostra l'azione feedback per una specifica query Select AI includendo il prompt Select AI tra apici seguito dal feedback.

-Query mentioned with SQL_TEXT

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

Esempio: selezione AI per grafici struttura

In questo esempio viene illustrato come utilizzare la procedura DBMS_CLOUD_AI.GENERATE e un prompt del linguaggio naturale per generare query del grafico PGQ per eseguire query sui dati del grafico.

Esempio: specificare più grafici nel profilo AI

In questo esempio viene illustrato come definire più grafici delle proprietà nel profilo AI, inclusa una query di esempio e il relativo output.

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.

Esempio: prompt di esempio per grafici struttura

Questi esempi mostrano come creare dati di esempio e visualizzare l'istruzione SQL generata utilizzando l'azione showsql per un determinato prompt.

Esempio: tabella Crea grafico proprietà

Nell'esempio seguente vengono create tabelle di esempio e un grafico delle proprietà.

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;
Esempio: corrispondenza di vertici senza etichette

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))
Esempio: corrispondenza di bordi senza etichette

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))
Esempio: corrispondenza di bordi con etichette

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))
Esempio: corrispondenza di pattern di percorso inclusi uno o più hop

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))
Esempio: accesso alle proprietà Vertex e Edge

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))
Esempio: filtro dei dati

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))
Esempio: funzioni ed espressioni

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
    )
)
Esempio: ordinamento dei dati

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

SELECT friend_firstname, friend_lastname
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (p IS "PERSON") -[e IS "KNOWS"]-> (f IS "PERSON")
    WHERE UPPER(p."FIRSTNAME") = UPPER('Scott') AND UPPER(p."LASTNAME") = UPPER('Tiger')
    COLUMNS (f."FIRSTNAME" AS friend_firstname, f."LASTNAME" AS friend_lastname)
)
ORDER BY friend_lastname
Esempio: limitazione delle righe

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

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

Query non supportate

Per le query seguenti, alcuni LLM generano un NL2SQL valido, ma l'SQL risultante utilizza funzionalità non ancora supportate in Oracle AI Database 26ai.

Esempio: query che richiedono di non corrispondere a un determinato pattern

Prompt: Find people that do not know Scott.

La subquery EXISTS non è supportata.

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))
Esempio: query che richiedono la corrispondenza facoltativa di un determinato pattern

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

Corrispondenza OPTIONAL non supportata.

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
))
Esempio: pattern di percorso ricorsivi non limitati

Prompt: Find all people that Scott can reach.

Le query che utilizzano quantificatori non limitati non sono supportate.

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
    )
)

Query intermittenti

Gli LLM hanno dimostrato di avere difficoltà nella traduzione di query che richiedono più di un operatore GRAPH_TABLE. Di seguito sono riportati alcuni esempi.

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
)
Esempio: corrispondenza dei pattern di percorso ricorsivo con i limiti definiti.

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))
Esempio: filtro dei dati per i nodi lungo un percorso ricorsivo

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))
Esempio: raggruppamento e aggregazione

I LLM spesso hanno difficoltà a tradurre query che richiedono raggruppamento e aggregazione. Un errore comune è quello di inserire le aggregazioni nella clausola COLUMNS anziché nella clausola 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;