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 ad 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 si utilizza 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 la generazione di 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:

Piattaforme supportate

Select AI è supportata su Autonomous AI Database Serverless e Autonomous AI Database sull'infrastruttura Exadata dedicata e su Cloud at Customers.

Terminologia correlata

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

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 mescolare 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, garantendo che solo gli utenti autorizzati o i sistemi possano accedere e manipolare i dati memorizzati nel database.
Allucinazione in LLM L'allucinazione nel contesto dei modelli linguistici di grandi dimensioni si riferisce a un fenomeno in cui il modello genera testo non corretto, privo di senso o non correlato al prompt di input. Nonostante sia il risultato del tentativo del modello di generare testo coerente, queste istanze possono contenere informazioni fabbricate, fuorvianti o puramente immaginative. L'allucinazione può verificarsi a causa di pregiudizi 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 l'accesso alle tue risorse cloud. È possibile controllare il tipo di accesso di un gruppo di utenti e a quali risorse specifiche. Per ulteriori informazioni, vedere Panoramica di Identity and Access Management.
Perfezionamento iterativo

La raffinatezza iterativa è un processo di miglioramento graduale di una soluzione o di un modello attraverso cicli ripetuti di aggiustamenti basati sul feedback o sulla valutazione. Inizia con un'approssimazione iniziale, la perfeziona passo dopo passo e continua fino a raggiungere l'accuratezza o il risultato desiderato. Ogni iterazione si basa sulla precedente, incorporando correzioni o ottimizzazioni per avvicinarsi all'obiettivo.

Nella generazione del sintetico di testo, la ridefinizione iterativa può essere utile per l'elaborazione di file o documenti di grandi dimensioni. Il processo divide il testo in blocchi di dimensioni gestibili, ad esempio, che rientrano nei limiti di token di un LLM, genera un riepilogo per un chunk e quindi migliora il riepilogo incorporando sequenzialmente i chunk seguenti.

Casi d'uso per il perfezionamento iterativo:

  • Ideale per situazioni in cui l'accuratezza e la coerenza contestuali sono fondamentali, ad esempio quando si riassumono testi complessi o altamente interconnessi in cui ogni parte si basa sul precedente.
  • Ideale per attività su scala ridotta in cui l'elaborazione sequenziale è accettabile.

Vedere Tecniche di riepilogo.

MapReduce

In generale, il modello di programmazione MapReduce consente l'elaborazione di dati di grandi volumi dividendo le attività in due fasi: Mappa e Riduci.

  • Mappa: elabora i dati di input e li trasforma in coppie chiave-valore.
  • Riduci: aggrega e riepiloga i dati mappati in base alle chiavi. MapReduce esegue l'elaborazione parallela di set di dati di grandi dimensioni.

Nel caso di Select AI Summarize, le partizioni MapReduce vengono testate in più chunk ed elaborate in parallelo e in modo indipendente, generando singoli riepiloghi per ogni chunk. Questi riassunti vengono poi combinati per formare un riassunto complessivo coerente.

Casi d'uso per la riduzione della mappa:

  • Ideale per attività parallele su larga scala in cui velocità e scalabilità sono priorità, come il riepilogo di set di dati o documenti molto grandi.
  • Ideale per le situazioni in cui l'indipendenza del pezzo è accettabile e i riepiloghi possono essere aggregati in seguito.

Vedere Tecniche di riepilogo.

Metadati

I metadati sono dati che descrivono i dati. Nel caso di Select AI, i metadati sono metadati del database, che si riferiscono AI dati che descrivono la struttura, l'organizzazione e le proprietà delle tabelle e delle viste del database.

Per le tabelle e le viste di database, i metadati includono nomi e tipi di colonna, vincoli e chiavi, definizioni delle viste, relazioni, derivazione, indicatori di qualità e freschezza, classificazioni di sicurezza e criteri di accesso. Metadati ben gestiti consentono di scoprirebilità, uso corretto, ottimizzazione delle prestazioni e compliance. Select AI incrementa i prompt NL2SQL con metadati di tabella che includono la definizione della tabella (nome tabella, nomi colonne e relativi tipi di dati) e, facoltativamente, commenti, annotazioni e vincoli di tabelle e colonne.

Integrazione dei metadati

La pratica di aumentare gli schemi di database con descrizioni, commenti e annotazioni di alta qualità in modo che un LLM possa comprendere meglio l'intento per tabelle e colonne, chiarire il significato aziendale e generare istruzioni SQL più accurate. Trasforma i nomi di tabelle o colonne nude in asset ben documentati con intenti, relazioni e vincoli chiari.

Informazioni sul candidato da includere:

  • Descrizioni di tabelle e colonne: scopo, definizioni aziendali, unità e intervalli di valori consentiti
  • Chiavi e relazioni: chiavi primarie/esterne, percorsi di join
  • Semantica dei dati: granularità del tempo, dimensioni che cambiano lentamente, regole di deduplicazione
  • Vincoli e qualità: annullabilità, unicità, regole di convalida, freschezza dei dati
  • Sinonimi e alias: termini aziendali comuni mappati a nomi tecnici
  • Esempi e pattern: valori di esempio, filtri o aggregazioni comuni

Per ulteriori informazioni sull'aggiunta di tali metadati mediante Oracle SQL Developer for VS Code tramite Visual Studio Code, vedere Panoramica sull'arricchimento AI.

Prompt linguaggio naturale I prompt del linguaggio naturale sono istruzioni o richieste leggibili dall'utente fornite per guidare i modelli di intelligenza artificiale generativa, come 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 più conversazionale o in linguaggio naturale. I modelli generano quindi l'output in base al prompt fornito.
Lista di controllo dell'accesso (ACL, Network Access Control List) Una lista di controllo dell'accesso di rete è un set di regole o autorizzazioni che definiscono quale traffico di rete è consentito 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.
Aree di memorizzazione vettori 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:

Linee guida sull'uso

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

Destinazione d'uso

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

Sebbene sia possibile fornire qualsiasi prompt, inclusi quelli che non sono correlati alla produzione dei risultati delle query SQL, Select AI si concentra sulla generazione delle query SQL. Selezionare AI per sottomettere richieste generali con l'azione chat.

Prompt - Dati augmentation

Il database aumenta il prompt specificato dall'utente con i metadati del database per mitigare le allucinazioni del 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 a tabelle e colonne e contenuti disponibili nel dizionario dati e nel catalogo. Ai fini della generazione SQL, il database non fornisce il contenuto di tabelle o viste (valori effettivi di righe o colonne) durante l'aumento del prompt.

L'azione narrate, tuttavia, fornisce il risultato della query, che può contenere dati di database, al 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'ampia gamma di documenti e contenuti testuali, in genere provenienti da Internet. Di conseguenza, gli LLM potrebbero avere modelli incorporati da contenuti non validi o dannosi, inclusa l'iniezione SQL. Pertanto, sebbene gli LLM siano 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 tuo conto dal provider LLM specificato dall'utente verranno eseguite nel tuo database. L'utilizzo di questa funzione da parte Vostra è unicamente a Vostro rischio e, in deroga a eventuali altri termini e condizioni relativi ai servizi forniti da Oracle, costituisce accettazione di tale rischio e l'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-visione
  • meta.llama-3.2-11b istruzioni-visione
  • 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 veloce

Fare riferimento a quanto riportato di seguito.

  • cohere.embed-english-v3.0 (impostazione predefinita)
  • cohere.embed-multilinguale-v3.0
  • cohere.emblish-english-light-v3.0
  • cohere.embed-multilinguale-luce-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.
Compatibile con OpenAI

Modelli di provider compatibili con OpenAI come:

  • 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)
  • Istruzioni meta-lama-3-70B
  • 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-embed-testo-v1
  • amazon.titan-embed-testo-v2:0
  • cohere.emblish-english-v3
Supporta una vasta gamma di casi d'uso.

Nota:

Configura profili AI mediante 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 i nomi delle tabelle di database, i nomi delle colonne, i tipi di dati delle colonne e i commenti. È possibile creare e configurare profili AI utilizzando le procedure DBMS_CLOUD_AI.CREATE_PROFILE e DBMS_CLOUD_AI.SET_PROFILE.

Requisiti per DBMS_CLOUD_AI

Per eseguire DBMS_CLOUD_AI, è necessario quanto segue:

Per configurare DBMS_CLOUD_AI:

  1. Concedere il privilegio EXECUTE sul pacchetto DBMS_CLOUD_AI all'utente che desidera utilizzare Select AI.

    Per impostazione predefinita, solo all'utente ADMIN viene concesso il privilegio EXECUTE. 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 o Oracle Database 26ai PL/SQL Packages and Types Reference.

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

    Per ulteriori informazioni, vedere Procedura CREDENTIAL.

    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`');
    

Parametri funzione APPEND_HOST_ACE

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 host o dominio non fa distinzione tra maiuscole e minuscole.

Per OpenAI, utilizzare api.openai.com.

Per Cohere, utilizzare api.cohere.ai.

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

Per Google, utilizza 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 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, Azure OpenAI Service, 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. Avviare 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: è necessario eseguire DBMS_CLOUD_AI.SET_PROFILE in ogni nuova sessione del database (connessione) prima di utilizzare SELECT AI.

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;
/
--
-- Enable AI profile in current session
--
EXEC DBMS_CLOUD_AI.set_profile('OPENAI');

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 come SQL Developer, OML Notebooks e strumenti di terze parti per interagire con il database in linguaggio naturale.

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

Sintassi

La sintassi per l'esecuzione del prompt AI è:

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 è facoltativo specificare questo parametro.
showsql Visualizza l'istruzione SQL per un prompt in linguaggio naturale.
narrate L'output del prompt è 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 delle interazioni o dei 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

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 selezionare le conversazioni AI è 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 su 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: la selezione delle conversazioni AI supporta 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.

Nota: se si utilizzano sia le conversazioni multiple che l'impostazione conversation: [true|false], l'impostazione conversation viene ignorata.

Nel contesto della generazione di 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:

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 si abilita? 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 Attributi CREATE_CONVERSATION.

È possibile eliminare singoli prompt? No, non è possibile eliminare manualmente il singolo prompt. È possibile eliminare singoli prompt specifici utilizzando l'ID prompt specificato nella procedura USER_CLOUD_AI_CONVERSATION_PROMPTS View e utilizzando 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 i dettagli, vedere Viste DBMS_CLOUD_AI.

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 in 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 SELECT AI NL2SQL. È 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:

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.

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:

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) alle strutture del grafico consentendo 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 delle 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:

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.

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:

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:

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

Genera sintetico con AI selezionata

Select AI consente di generare un riepilogo del testo, in particolare dei testi di grandi dimensioni, supportando in genere fino a 1 GB utilizzando i provider AI. Puoi estrarre insight chiave da testi o file di grandi dimensioni in base alle tue esigenze specifiche. Questa funzione utilizza l'LLM specificato nel profilo AI per generare un riepilogo per un determinato testo.

Selezionare AI per riepilogare i contenuti nei modi riportati di seguito.

Nota:

Tecniche di generazione sintetico

È possibile riepilogare un documento di grandi dimensioni immettendo il testo completo come prompt per l'LLM. Tuttavia, poiché gli LLM hanno limiti di token, Select AI applica tecniche diverse per riepilogare documenti di grandi dimensioni.

Select AI utilizza perfezionamento iterativo e MapReduce come tecniche di riepilogo. Per ulteriori informazioni, vedere Terminologia correlata.

Basato sulla dimensione massima del token di un dato LLM, Select AI può suddividere contenuti di grandi dimensioni in blocchi più piccoli e facili da gestire che si adattano AI limiti del LLM. Select AI può quindi utilizzare la ridefinizione iterativa o la tecnica di riduzione della mappa per generare il riepilogo. Selezionare AI utilizza MapReduce come impostazione predefinita. Per ulteriori dettagli, vedere Funzione SUMMARIZE e Parametri SUMMARIZE.

Traduci testo con Select AI

Con Select AI, puoi utilizzare l'AI generativa del servizio di traduzione OCI per tradurre il tuo testo nella lingua che preferisci.

È possibile utilizzare questa funzione insieme alla RAG Select AI esistente. È possibile combinare translate con DBMS_CLOUD_AI.GENERATE o narrate per utilizzare l'intelligenza artificiale generativa per la produzione di output tradotti nella lingua preferita.

Per ulteriori informazioni, vedere Funzione TRANSLATE, Funzione GENERATE ed Esempio: selezione della traduzione AI.

Vantaggi dell'utilizzo di Translate

La funzione di traduzione in Seleziona AI consente di tradurre il testo di input in diverse lingue per i seguenti vantaggi:

Come utilizzare Translate

Selezionare AI consente di tradurre l'input di testo nella lingua preferita utilizzando l'azione translate o chiamando le funzioni DBMS_CLOUD_AI.GENERATE o DBMS_CLOUD_AI.TRANSLATE.

Per utilizzare la funzione Seleziona traduzione AI, è necessario disporre delle autorizzazioni dei criteri IAM appropriate per accedere AI servizi Oracle Cloud Infrastructure Language.

Concedere l'autorizzazione per utilizzare la risorsa ai-service-language-family nel criterio IAM. Di seguito è riportata un'istruzione di criterio di esempio per concedere l'autorizzazione a un gruppo di utenti in un compartimento specifico.

allow group <your group name> to use ai-service-language-family in compartment <your_compartment>

Un gruppo dinamico identifica risorse quali database o funzioni mediante la corrispondenza dei relativi OCID o tag, mentre un gruppo di utenti contiene singoli utenti IAM.

Utilizzare un gruppo dinamico quando il criterio si applica alle risorse OCI e utilizzare un gruppo di utenti quando il criterio si applica agli utenti umani. Per informazioni dettagliate sulla creazione di gruppi dinamici e di utenti, vedere Gestione dei gruppi dinamici.

Per ulteriori informazioni, vedere Criteri linguistici.

È possibile tradurre il testo utilizzando quanto segue:

Seleziona AI per Python

Select AI for Python integra funzionalità di intelligenza artificiale generativa nei flussi di lavoro di Autonomous AI Database. Select AI for Python fornisce una libreria client, select_ai, che consente di utilizzare le funzionalità DBMS_CLOUD_AI in Autonomous AI Database di Python. Select AI for Python supporta flussi di lavoro di intelligenza artificiale generativa avanzati, riepilogo, meccanismi di feedback, gestione coerente dei metadati e funzionalità di intelligenza artificiale autentica. Supporta anche Python 3.14 e include un sito di documentazione HTML aggiornato (Nuovo)

Azioni che è possibile eseguire

Piattaforme supportate

Select AI for Python è certificato per Autonomous Database 19c e Autonomous AI Database 26ai. Selezionare AI per Python può funzionare su altre piattaforme, tuttavia non è certificato.

Fare clic su https://github.com/oracle/python-select-ai/issues per segnalare i problemi.

Nota: selezionare l'agente AI per Python non è disponibile in Autonomous AI Database on Dedicated Exadata Infrastructure.

Funzioni supportate per il profilo AI selezionato (sincrono e asincrono)

Quando si inviano prompt tramite un profilo, è possibile scegliere tra diverse funzioni definite per gli oggetti profilo AI. Alcuni sono i seguenti:

Per un elenco completo delle funzioni, vedere la guida Select AI for Python. Per ulteriori informazioni sulle azioni Seleziona intelligenza artificiale, vedere anche Usa parola chiave AI per immettere i prompt.

Classi supportate

La libreria include classi per la gestione di provider, profili, conversazioni, indici vettoriali e dati sintetici. Sono disponibili sia versioni sincrone che asincrone.

Per le classi Profile, Conversation e VectorIndex esistono equivalenti asincroni.

Per un riferimento completo alle API, vedere la guida Select AI for Python.

Miglioramenti all'aggiornamento di API e attributi

Sono disponibili i seguenti miglioramenti:

Privilegio e accesso HTTP

La gestione dei privilegi è separata dalla configurazione dell'accesso HTTP.

API privilegi:

I privilegi vengono aggiornati per includere quanto riportato di seguito.

API di accesso HTTP:

Altri miglioramenti

Esempi di utilizzo di Select AI

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

select ai how many customers exist;
CUSTOMER_COUNT
--------------
         55500
select ai showsql how many customers exist;
RESPONSE
----------------------------------------------------
SELECT COUNT(*) AS total_customers
FROM SH.CUSTOMERS
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 constantly changes due to various factors such as population growth, new businesses, and customer turnover. Additionally, the term "customer" can refer to individuals, businesses, or organizations, making it difficult to provide a specific number.
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:
select ai feedback for query "select ai showsql how many watch histories in total", please use sum instead of count;
-- Positive feedback example:
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:
select ai feedback please use sum instead of count for sql_id  1v1z68ra6r9zf;
-- Positive feedback example:
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:
select ai feedback please use ascending sorting for ranking;
-- Positive feedback example:
select ai feedback the result is correct;
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 Istruzioni specifiche di AWS in Configura profili AI mediante DBMS_CLOUD_AI. 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;
/
--
-- 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;
/
--
-- 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;
/
--
-- Enable AI profile in current session
--
EXEC DBMS_CLOUD_AI.SET_PROFILE('AWS');
--
-- 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;
/
--
--Drop the profile
--
EXEC DBMS_CLOUD_AI.DROP_PROFILE('AWS');

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
--
grant execute on DBMS_CLOUD_AI to ADB_USER;

-- Grant Network ACL for OpenAI endpoint
--
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;
/
--
-- Create Credential for AI provider
--
EXEC
DBMS_CLOUD.CREATE_CREDENTIAL(
CREDENTIAL_NAME   => 'OPENAI_CRED',
username          =>  'OPENAI',
password          =>  '`<your_api_token>`');
--
-- 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;
     /
--
-- Enable AI profile in current session
--
EXEC DBMS_CLOUD_AI.SET_PROFILE('OPENAI');
--
-- Get Profile in current session
--
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
EXEC DBMS_CLOUD_AI.DROP_PROFILE('OPENAI');

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:

Esempio: creazione e impostazione di conversazioni personalizzabili

L'esempio seguente mostra 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');

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;

È 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 States, but they have distinct weather patterns due to their unique geography and climate conditions. Here are the main differences:

1. **Rainfall**: Seattle is known for its rainy reputation, with an average annual 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 experiencing a mild oceanic climate. San Francisco tends to be slightly warmer, with average temperatures ranging from 45?F to 67?F, and receives less rainfall, around 20 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 rainfall per year, distributed throughout the year. San Francisco is also known for its fog, particularly during summer, and receives more sunshine, around 160 sunny 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 throughout 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 California respectively, experience a mild oceanic climate. However, there are some notable differences in their weather patterns:
1. **Temperature**: San Francisco tends to be slightly warmer than Seattle, especially 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 temperature 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 annual rainfall of around 37 inches (94 cm). San Francisco receives less rainfall, with an average of around 20 inches (51 cm) per year. However, San Francisco's rainfall 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 other 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 Angeles 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 variation 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 being around $15-20 per person, compared to around $12-18 per person in Los Angeles.

......
-- 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 experiencing a mild oceanic climate. San Francisco tends to be slightly warmer, with average temperatures ranging from 45?F to 67?F, and receives less rainfall, around 20 inches per year, mostly during winter. In contrast, Seattle is cooler, with temperatures ranging from 38?F to 64?F, and rainier, with around 37 inches of rainfall per year, distributed throughout the year. San Francisco is also known for its fog, particularly during summer, and receives more sunshine, around 160 sunny days per year, although it's often filtered through the fog. Overall, San Francisco's weather is warmer and sunnier, with more pronounced seasonal variations, while Seattle's is cooler and rainier, with more consistent temperatures throughout 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 Angeles, mainly due to the higher cost of housing and transportation. New York has a median home price of around $999,000 and average rent of $3,000 per month for a one-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 relatively similar in both cities, the cost of transportation is higher in Los Angeles due to its car-centric culture, but the cost of public transportation is higher in New York. Overall, the total monthly expenses for a single person in New York can range from $4,600, compared to around $4,050 in Los Angeles, making New York 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 conversation. 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 dettagli, vedere Viste DBMS_CLOUD_AI.

Nota: 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 and San Francisco, focusing on the differences in temperature, rainfall, fog, sunshine, 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 Angeles, 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 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
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}');
-- Verify the information for the second conversation
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');
-- 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');

-- 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 di selezione 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 contenente il prompt. Per ulteriori informazioni sugli attributi, vedere Procedura di feedback. 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, vedere Indice vettoriale per feedback.

SQL> select ai showsql how many movies;
RESPONSE
------------------------------------------------------------------------
SELECT COUNT(m."MOVIE_ID") AS "Number of Movies" FROM "ADB_USER"."MOVIES" m
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"');
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 illustra l'approvazione dell'utente all'accettazione e alla 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, vedere Indice vettoriale per feedback.

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
SELECT sql_id FROM v$mapped_sql WHERE sql_text = 'select ai showsql how many distinct movie genres?';
SQL_ID
-------------
852w8u83gktc1
exec DBMS_CLOUD_AI.FEEDBACK(profile_name=>'OCI_FEEDBACK1', sql_id=> '852w8u83gktc1', feedback_type=>'positive', operation=>'add');
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: la selezione di AI consente 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 Procedura di feedback.

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');
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: utilizzo dell'azione 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

Questo esempio mostra 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');
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 riportate di seguito, alcuni LLM generano NL2SQL validi, ma l'SQL risultante utilizza funzioni 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 di questo tipo.

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;

Esempio: miglioramento della generazione delle query SQL

Questi esempi illustrano in che modo i commenti, le annotazioni, la chiave esterna e i vincoli di integrità referenziale nelle tabelle e nelle colonne del database possono migliorare la generazione di query SQL dai prompt in linguaggio naturale.

Esempio: miglioramento della generazione SQL con commenti tabella e colonna

Se nelle tabelle del database sono presenti commenti di tabella e colonna, abilitare il parametro "comments":"true" nella funzione DBMS_CLOUD_AI.CREATE_PROFILE per recuperare i commenti a livello di tabella e colonna. I commenti vengono aggiunti ai metadati dell'LLM per una migliore generazione SQL.

-- Adding comments to table 1, table 2, and table 3. Table 1 has 3 columns, table 2 has 7 columns, table 3 has 2 columns.

-- TABLE1
COMMENT ON TABLE table1 IS 'Contains movies, movie titles and the year it was released';
COMMENT ON COLUMN table1.c1 IS 'movie ids. Use this column to join to other tables';
COMMENT ON COLUMN table1.c2 IS 'movie titles';
COMMENT ON COLUMN table1.c3 IS 'year the movie was released';
-- TABLE2
COMMENT ON TABLE table2 IS 'transactions for movie views - also known as streams';
COMMENT ON COLUMN table2.c1 IS 'day the movie was streamed';
COMMENT ON COLUMN table2.c2 IS 'genre ids. Use this column to join to other tables';
COMMENT ON COLUMN table2.c3 IS 'movie ids. Use this column to join to other tables';
COMMENT ON COLUMN table2.c4 IS 'customer ids. Use this column to join to other tables';
COMMENT ON COLUMN table2.c5 IS 'device used to stream, watch or view the movie';
COMMENT ON COLUMN table2.c6 IS 'sales from the movie';
COMMENT ON COLUMN table2.c7 IS 'number of views, watched, streamed';

-- TABLE3
COMMENT ON TABLE table3 IS 'Contains the genres';
COMMENT ON COLUMN table3.c1 IS 'genre id. use this column to join to other tables';
COMMENT ON COLUMN table3.c2 IS 'name of the genre';


BEGIN
  DBMS_CLOUD_AI.CREATE_PROFILE(
    profile_name => 'myprofile',
    attributes =>
        '{"provider": "azure",
          "azure_resource_name": "my_resource",
          "azure_deployment_name": "my_deployment",
          "credential_name": "my_credential",
          "comments":"true",
          "object_list": [
            {"owner": "moviestream", "name": "table1"},
            {"owner": "moviestream", "name": "table2"},
            {"owner": " moviestream", "name": "table3"}
          ]
          }'
    );

    DBMS_CLOUD_AI.SET_PROFILE(
        profile_name => 'myprofile'
    );

END;
/
--Prompts
select ai what are our total views;
RESPONSE
-------------------------------------------------
TOTAL_VIEWS
-----------
   97890562
select ai showsql what are our total views;
RESPONSE
-------------------------------------------------------------------------
SELECT SUM(QUANTITY_SOLD) AS total_views
FROM "moviestream"."table"
select ai what are our total views broken out by device;
DEVICE                     TOTAL_VIEWS
-------------------------- -----------
mac                           14719238
iphone                        20793516
ipad                          15890590
pc                            14715169
galaxy                        10587343
pixel                         10593551
lenovo                         5294239
fire                           5296916

8 rows selected.
select ai showsql what are our total views broken out by device;
RESPONSE
---------------------------------------------------------------------------------------
SELECT DEVICE, COUNT(*) AS TOTAL_VIEWS
FROM "moviestream"."table"
GROUP BY DEVICE

Esempio: miglioramento della generazione di query SQL con annotazioni di tabella e colonna

In questo esempio viene illustrata l'integrazione delle annotazioni in Select AI, applicabile in Oracle Database 23ai. Le annotazioni vengono aggiunte ai metadati inviati al LLM.

Se nello schema è presente una tabella con annotazioni, abilitare "annotations":"true" nella funzione DBMS_CLOUD_AI.CREATE_PROFILE per indicare a Select AI di aggiungere annotazioni AI metadati.

--
-- Annotations
--

CREATE TABLE emp2 (
    empno NUMBER,
    ename VARCHAR2(50) ANNOTATIONS (display 'lastname'),
    salary NUMBER ANNOTATIONS ("person_salary", "column_hidden"),
    deptno NUMBER ANNOTATIONS (display 'department')
)ANNOTATIONS (requires_audit 'yes', version '1.0', owner 'HR Organization');
BEGIN
  DBMS_CLOUD_AI.CREATE_PROFILE(
   profile_name => 'GOOGLE_ANNOTATIONS',
   attributes   => '{"provider": "google",
      "credential_name": "GOOGLE_CRED",
      "object_list": [{"owner": "ADB_USER", "name": "emp2"}],
      "annotations" : "true"
      }');
END;
/
EXEC DBMS_CLOUD_AI.SET_PROFILE('GOOGLE_ANNOTATIONS');

Esempio: miglioramento della generazione di query SQL con chiave esterna e vincoli chiave referenziale

Questo esempio dimostra la capacità dell'LLM di generare condizioni JOIN accurate recuperando i vincoli della chiave esterna e della chiave referenziale nei metadati dell'LLM. I vincoli di chiave esterna e di chiave referenziale forniscono dati strutturati sulle relazioni tra le tabelle e l'LLM.

Abilitare "constraints":"true" nella funzione DBMS_CLOUD_AI.CREATE_PROFILE per Selezionare AI per recuperare la chiave esterna e la chiave referenziale.

--
-- Referential Constraints
--
CREATE TABLE dept_test (
    deptno NUMBER PRIMARY KEY,
    dname VARCHAR2(50)
);
CREATE TABLE emp3 (
    empno NUMBER PRIMARY KEY,
    ename VARCHAR2(50),
    salary NUMBER,
    deptno NUMBER,
    CONSTRAINT emp_dept_fk FOREIGN KEY (deptno) REFERENCES dept_test(deptno)
);
BEGIN
  DBMS_CLOUD_AI.CREATE_PROFILE(
    profile_name=>'GOOGLE_CONSTRAINTS',
    attribues   =>'{"provider": "google",
      "credential_name": "GOOGLE_CRED",
      "object_list": [{"owner": "ADB_USER", "name": "dept_test"},
                      {"owner": "ADB_USER", "name": "emp3"}],
      "constraints" : "true"
      }');
END;
/
EXEC DBMS_CLOUD_AI.SET_PROFILE('GOOGLE_CONSTRAINTS');

Esempio: rilevamento automatico dei metadati delle tabelle rilevanti

Questi esempi mostrano in che modo Select AI rileva automaticamente le tabelle pertinenti e invia metadati solo per quelle tabelle specifiche rilevanti per la query in Oracle Database 23ai. Per abilitare questa funzione, impostare object_list_mode su automated. In questo modo viene creato automaticamente un indice vettoriale denominato <profile_name>_OBJECT_LIST_VECINDEX. L'indice vettoriale viene inizializzato con attributi e valori predefiniti quali refresh_rate, similarity_threshold e match_limit. È possibile modificare alcuni attributi tramite DBMS_CLOUD_AI.UPDATE_VECTOR_INDEX. Per ulteriori informazioni, vedere UPDATE_VECTOR_INDEX Procedure.

Un profilo è configurato per utilizzare object_list per specificare lo schema o gli oggetti nello schema, mentre l'altro non specifica object_list. Tuttavia, è previsto lo stesso costrutto SQL.

Rivedere Prerequisiti per la selezione di AI per fornire l'accesso al package DBMS_CLOUD_AI e fornire l'accesso di rete al provider AI.

BEGIN
  DBMS_CLOUD_AI.CREATE_PROFILE(
    profile_name=>'OCI_AUTO',
    attributes=>'{"provider": "oci",
      "credential_name": "GENAI_CRED",
      "object_list": [{"owner": "SH"}],
      "oci_compartment_id": "ocid1.compartment.oc1..aaaa...",
      "model" : "meta.llama-3.3-70b-instruct"
      }');
END;
/
EXEC DBMS_CLOUD_AI.SET_PROFILE('OCI_AUTO');
select ai showsql how many customers in San Francisco are married;
RESPONSE
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SELECT COUNT(DISTINCT c."CUST_ID") AS "NUMBER_OF_CUSTOMERS"
FROM "SH"."CUSTOMERS" c
WHERE UPPER(c."CUST_CITY") = UPPER('San Francisco')
AND UPPER(c."CUST_MARITAL_STATUS") = UPPER('married')

Nell'esempio seguente viene confrontato lo stesso scenario senza utilizzare object_list. Quando non si specifica object_list, Select AI sceglie automaticamente tutti gli oggetti disponibili per lo schema corrente.

BEGIN
  DBMS_CLOUD_AI.CREATE_PROFILE(
    profile_name=>'OCI_AUTO1',
    attributes=>'{"provider": "oci",
      "credential_name": "GENAI_CRED",
      "oci_compartment_id": "ocid1.compartment.oc1..aaaa...",
      "object_list_mode": "automated",
      "model" : "meta.llama-3.3-70b-instruct"
      }');
END;
/
EXEC DBMS_CLOUD_AI.SET_PROFILE('OCI_AUTO1');
select ai showsql how many customers in San Francisco are married?;
RESPONSE
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
SELECT COUNT(c."CUST_ID") AS "Number_of_Customers"
FROM "SH"."CUSTOMERS" c
WHERE UPPER(c."CUST_CITY") = UPPER('San Francisco')
AND UPPER(c."CUST_MARITAL_STATUS") = UPPER('Married')

Esempio: Seleziona sintetico AI

Questi esempi mostrano come utilizzare l'azione summarize e la funzione DBMS_CLOUD_AI.SUMMARIZE. Inoltre, personalizzare la generazione di riepilogo per il contenuto utilizzando la funzione.

Esempio: uso dell'azione di riepilogo sulla riga di comando SQL

Nell'esempio seguente viene utilizzato SUMMARIZE come azione Select AI. Utilizzare SELECT AI SUMMARIZE <TEXT> nella riga di comando SQL per generare un riepilogo del testo di input.

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.

Suggerimento: in SQL*Plus, un punto virgoletta singolo (') viene considerato come un delimitatore di stringa. Se il testo contiene virgolette singole, eseguire l'escape raddoppiando il testo (da ' a '') oppure racchiudere il testo utilizzando il meccanismo di quotazione q'[]'. Se il testo contiene virgolette doppie vuote (""), racchiudere il testo utilizzando il meccanismo q'[]'. Ad esempio:

SELECT AI SUMMARIZE q'[this's a text]';

Esempio: utilizzare la procedura DBMS_CLOUD_AI.SUMMARIZE per generare un riepilogo

In questi esempi viene illustrato come generare un riepilogo utilizzando parametri diversi dalla procedura DBMS_CLOUD_AI.SUMMARIZE.

È possibile generare un riepilogo da più di 3000 parole di testo memorizzate in uno storage degli oggetti OCI specificando il collegamento allo storage degli oggetti come parametro location_uri e le credenziali dell'account cloud come credential_name utilizzando DBMS_CLOUD_AI.SUMMARIZE

SELECT DBMS_CLOUD_AI.SUMMARIZE(
                location_uri => 'https://objectstorage.ca-toronto-1.oraclecloud.com/n/' ||
                    'namespace-string/b/bucketname/o/data_folder/' ||
                    'summary/test_4000_words.txt',
                credential_name => 'STORE_CRED',
                profile_name => 'GENAI')
from DUAL;

Un altro modo per generare un riepilogo da un testo memorizzato in uno storage degli oggetti OCI è utilizzare il parametro content per chiamare la procedura DBMS_CLOUD.GET_OBJECT.

SELECT DBMS_CLOUD_AI.SUMMARIZE(
                content => TO_CLOB(
                            DBMS_CLOUD.GET_OBJECT(
                                credential_name => 'STORE_CRED',
                                location_uri => 'https://objectstorage.ca-toronto-1.oraclecloud.com/n/' ||
                    'namespace-string/b/bucketname/o/data_folder/' ||
                    'summary/test_4000_words.txt')),
                profile_name => 'GENAI'>)
from DUAL;

Esempio: generare un riepilogo specificando prompt utente, numero minimo di parole e numero massimo di parole

L'esempio seguente mostra la generazione di un riepilogo di più di 3000 parole specificando i seguenti parametri:

SELECT DBMS_CLOUD_AI.SUMMARIZE(
                content => TO_CLOB(
                             DBMS_CLOUD.GET_OBJECT(
                             credential_name =>'STORE_CRED',
                             location_uri =>'https://objectstorage.ca-toronto-1.oraclecloud.com/n/' ||
                                   'namespace-string/b/bucketname/o/data_folder/' ||
                                   'summary/test_4000_words.txt')),
                profile_name    => 'GENAI',
                user_prompt     => 'The summary should start with ''The summary of ' ||
                                   'the article is: ''',
                params          => '{"min_words":50,"max_words":100}')
As response FROM dual;
RESPONSE
--------------------------------------------------------------------------------
The summary of the article is: The music streaming industry, led by Spotify, has revolutionized the way people consume music, with streaming accounting for about eighty per cent of the American recording industry's revenue. However, this shift has also raised concerns about the impact on artists, with many struggling to make a living due to low royalty rates and the dominance of playlists. The article explores the history of music streaming, from the early days of Napster to the current landscape, and how it has changed the way people listen to music. It also delves into the issues of autonomy and creativity in the music industry, with some artists feeling pressured to conform to certain styles or formulas to succeed on platforms like Spotify. The article cites examples of artists who have spoken out against the streaming economy, including Taylor Swift and Neil Young, and discusses the rise of alternative platforms like Bandcamp and Nina. Ultimately, the article suggests that the streaming economy has created a perverse vision for art, where music is valued for its ability to be ignored rather than appreciated, and that this has significant implications for the future of music and creativity. With the rise of AI-generated music and the increasing importance of data-driven decision making in the music industry, the article asks what the m
usic we're not hearing sounds like, and what the consequences of this shift will be for artists and listeners alike. The article concludes by highlighting the need for a more nuanced understanding of the music industry and the impact of streaming on artists and listeners, and for alternative models that prioritize creativity and autonomy over profit and convenience.

Esempio: generare un riepilogo specificando prompt utente, numero massimo di parole e stile di riepilogo

L'esempio seguente mostra la generazione di un riepilogo di più di 12000 parole specificando i seguenti parametri:

SELECT DBMS_CLOUD_AI.SUMMARIZE(
                location_uri    => 'https://objectstorage.ca-toronto-1.' ||
                                   'oraclecloud.com/n/namespace-string/b/' ||
                                   '/bucketname/o/data_folder/' ||
                                   'summary/dreams.txt',
                credential_name => 'STORE_CRED',
                profile_name    => 'GENAI',
                user_prompt     => 'The summary should start with ''The summary of ' ||
                                   'the article is: ''',
                params          => '{"max_words":100, "summary_style":"list"}')
As response FROM dual;
RESPONSE
--------------------------------------------------------------------------------
The summary of the article is:
- The book "Dreams" by Henri Bergson explores the concept of dreams and their significance in understanding human consciousness.
- Bergson argues that dreams are not just random thoughts, but rather a way for our unconscious mind to process and consolidate memories.
- He suggests that dreams are a result of the relaxation of our mental faculties, which allows our unconscious mind to freely associate and create new connections between memories.
- The book also discusses the role of sensations, such as visual and auditory impressions, in shaping our dreams.
- Bergson's theory of dreams is compared to other theories, including those of Freud and Jung, and is seen as a unique and insightful contribution to the field of psychology.
- The book concludes by highlighting the importance of studying dreams in order to gain a deeper understanding of human consciousness and the workings of the mind.

Esempio: generazione di un riepilogo di un registro

In questo esempio viene illustrato come passare un file MiB 35.66 come input per generare un riepilogo. La funzione DBMS_CLOUD_AI.SUMMARIZE utilizza il metodo di perfezionamento iterativo per elaborare i chunk. Per ulteriori informazioni, vedere Selezionare la terminologia AI.

SELECT DBMS_CLOUD_AI.SUMMARIZE(
       location_uri    => 'https://objectstorage.ca-toronto-1.oraclecloud.com/n/namespace-string/b/' ||
                          'bucketname/o/data_folder/summary/Descartes_An_Intellectual_Biography.pdf',
       credential_name => 'STORE_CRED',
       profile_name    => 'GENAI',
       params          =>  '{"chunk_processing_method":"iterative_refinement"}')
AS response FROM dual;
RESPONSE
--------------------------------------------------------------------------------
Stephen Gaukroger's intellectual biography of Rene Descartes provides a detailed  examination of the philosopher's crucial role in shaping modern thought, placing him within the cultural, religious, and scientific context of the early seventeenth century. It traces Descartes' intellectual journey from his education at La Fleche, where he rejected Aristotelian logic, to his influential interactions with figures like Isaac Beeckman, which shaped his mechanistic worldview evident in works like his hydrostatics manuscript and *Compendium Musicae*. The biography underscores Descartes' dual commitment to philosophy and science, highlighting his social status among the gentry, mathematical innovations such as solving the Pappus problem through algebraic geometry, and his epistemology based on clear and distinct ideas. It explores his mechanistic explanations of bodily functions, challenging traditional soul-body distinctions, and his extensive natural philosophy in texts like *Le Monde* and *L'Homme*. Gaukroger also delves into Descartes' cosmological theories, including the vortex theory and laws of motion linked to divine immutability, as well as his nuanced perspectives on animal cognition versus human consciousness. Central to the narrative is Descartes' use of hyperbolic doubt to combat skepticism and establish metaphysical foundations through the *cogito*, alongside his classification of ideas and theological proofs of God's existence. The complex relationship between his natural philosophy and metaphysics, especially in defining motion as a mode, and his innovative approach to the passions in *Passions of the Soul*, rejecting Stoic views for a mind-body union, are key themes. This portrayal captures Descartes' struggle with traditional paradigms during a transformative era, emphasizing his enduring impact on p
hilosophy and science.

Esempio: Seleziona traduzione AI

In questi esempi viene illustrato come utilizzare la funzionalità translate.

Per utilizzare la funzione Seleziona traduzione AI, è necessario disporre delle autorizzazioni dei criteri IAM appropriate per accedere AI servizi Oracle Cloud Infrastructure Language.

Concedere l'autorizzazione per utilizzare la risorsa ai-service-language-family nel criterio IAM. Di seguito è riportata un'istruzione di criterio di esempio per concedere l'autorizzazione a un gruppo di utenti in un compartimento specifico.

allow group <your group name> to use ai-service-language-family in compartment <your_compartment>

Un gruppo dinamico identifica risorse quali database o funzioni mediante la corrispondenza dei relativi OCID o tag, mentre un gruppo di utenti contiene singoli utenti IAM.

Utilizzare un gruppo dinamico quando il criterio si applica alle risorse OCI e utilizzare un gruppo di utenti quando il criterio si applica agli utenti umani. Per informazioni dettagliate sulla creazione di gruppi dinamici e di utenti, vedere Gestione dei gruppi dinamici.

Per ulteriori informazioni, vedere Criteri linguistici.

Esempio: uso dell'azione di traduzione nella riga di comando SQL

L'esempio seguente mostra l'uso dell'azione translate nella riga di comando SQL.

Nota: il profilo AI deve specificare la lingua di destinazione. Questa funzionalità è supportata solo per il provider OCI.

--Create an AI profile with language parameters
BEGIN
DBMS_CLOUD_AI.CREATE_PROFILE(
      profile_name =>'GENAI_NEW',
      attributes   =>'{"provider": "oci",
        "credential_name": "GENAI_CRED",
		"target_language": "french",
		"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"}]
       }');
END;
/
exec DBMS_CLOUD_AI.SET_PROFILE('GENAI_NEW');
select ai translate I need to translate this;
RESPONSE
---------------------
Je dois traduire ceci

Esempio: Usa traduzione in funzione DBMS_CLOUD_AI.GENERATE

Gli esempi riportati di seguito mostrano l'utilizzo di translate come azione Select AI all'interno della funzione DBMS_CLOUD_AI.GENERATE. Per ulteriori informazioni, vedere Funzione GENERATE.

Nota: il profilo AI può saltare la specifica del parametro della lingua di destinazione se viene passato come attributo in DBMS_CLOUD_AI.GENERATE.

L'azione translate viene fornita nella funzione DBMS_CLOUD_AI.GENERATE insieme a target_language e source_language. In questo esempio viene utilizzata la traduzione dell'AI generativa. Il testo di input this is a document in inglese (source_language: "en") viene tradotto in francese (target_language: "fr").

SELECT DBMS_CLOUD_AI.GENERATE('select ai translate text to be translated')
          FROM dual;

      DECLARE
         l_attributes  clob := '{"target_language": "fr", "source_language": "en"}';
         output clob;
      BEGIN
         output := DBMS_CLOUD_AI.GENERATE(
                        prompt            => 'this is a document',
                        profile_name      => 'oci_translate',
                        action            => 'translate',
                        attributes        => l_attributes
                     );

Esempio: utilizzare la funzione DBMS_CLOUD_AI.TRANSLATE per la traduzione

In questo esempio la funzione DBMS_CLOUD_AI.TRANSLATE viene chiamata per utilizzare la traduzione AI generativa, convertendo il testo di input dall'inglese (source_language) in francese (target_language) utilizzando il profilo AI specificato.

Per ulteriori informazioni, vedere Funzione TRANSLATE.

BEGIN
   output_text := DBMS_CLOUD_AI.TRANSLATE(
   profile_name    => 'GENAI_NEW'
   text            => 'text to be translated',
   source_language => 'English',
   target_language => 'French');
END;
/

Esempio: visualizzazione delle lingue supportate per un provider

Eseguire una query sulla vista AI_TRANSLATION_LANGUAGES per visualizzare un elenco di lingue supportate dal provider AI. Per ulteriori informazioni, vedere Vista AI_TRANSLATION_LANGUAGES.

SELECT* FROM AI_TRANSLATION_LANGUAGES;
LANGUAGE_NAME        LANGUAGE_CODE        PROVIDER
-------------------- -------------------- ---------------
ARABIC               ar                   OCI
CROATIAN             hr                   OCI
CZECH                cs                   OCI
DANISH               da                   OCI
GERMAN               de                   OCI
GREEK                el                   OCI
ENGLISH              en                   OCI
SPANISH              es                   OCI
FINNISH              fi                   OCI
FRENCH               fr                   OCI
FRENCH CANADA        fr-CA                OCI
HEBREW               he                   OCI
HUNGARIAN            hu                   OCI
ITALIAN              it                   OCI

Contenuto correlato