Beispiele für die Verwendung von Select AI

Erfahren Sie, wie Sie die Select AI von Oracle mit verschiedenen unterstützten KI-Providern integrieren, um SQL aus Eingabeaufforderungen in natürlicher Sprache zu generieren, auszuführen und zu erklären oder mit dem LLM zu chatten.

Beispiel: AI-Aktionen auswählen

Diese Beispiele veranschaulichen gängige Select AI-Aktionen.

Das folgende Beispiel zeigt Aktionen wie runsql (Standard), showsql, narrate, chat, explainsql, feedback und summarize, die Sie mit SELECT AI ausführen können. In diesen Beispielen wird das Schema sh mit AI-Provider- und Profilattributen verwendet, die in der Funktion DBMS_CLOUD_AI.CREATE_PROFILE angegeben sind. Verwenden Sie "AI-Aktionen auswählen", nachdem Sie Ihr AI-Profil mit der Prozedur DBMS_CLOUD_AI.SET_PROFILE in der aktuellen Session festgelegt haben.

Um eine Übersicht über den Text zu generieren, verwenden Sie SELECT AI SUMMARIZE <TEXT>.

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


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

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

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

Beispiel: AI mit RAG einrichten und verwenden

In diesem Beispiel werden Sie durch das Einrichten von Zugangsdaten, das Konfigurieren des Netzwerkzugriffs und das Erstellen eines Vektorindex zur Integration von OCI Generative AI Vektorspeicher-Cloud-Services mit OpenAI mit Oracle Autonomous AI Database geführt.

Das Setup endet mit der Erstellung eines KI-Profils, das den Vektorindex verwendet, um LLM-Antworten zu verbessern. In diesem Beispiel wird schließlich die Aktion "AI auswählen narrate" verwendet, die eine Antwort zurückgibt, die mit Informationen aus der angegebenen Vektordatenbank verbessert wurde.

Das folgende Beispiel zeigt das Erstellen und Abfragen von Vektorindizes in Oracle Database 23ai.

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

--Grants EXECUTE privilege DBMS_CLOUD_PIPELINE to ADB_USER
GRANT EXECUTE on DBMS_CLOUD_PIPELINE to ADB_USER;

-- Create the OpenAI credential
BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'OPENAI_CRED',
        username => 'OPENAI_CRED',
        password => '<your_api_key>'
      );
END;
/

PL/SQL procedure successfully completed.

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

PL/SQL procedure successfully completed.

 
-- Create the object store credential
BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'OCI_CRED',
        username => '<your_username>',
        password => '<OCI_profile_password>'
      );
END;
/

PL/SQL procedure successfully completed.

 -- Create the profile with the vector index.

BEGIN
      DBMS_CLOUD_AI.CREATE_PROFILE(
          profile_name =>'OPENAI_ORACLE',
          attributes   =>'{"provider": "openai",
            "credential_name": "OPENAI_CRED",
            "vector_index_name": "MY_INDEX",
            "temperature": 0.2,
            "max_tokens": 4096,
            "model": "gpt-3.5-turbo-1106"
          }');
END;
/

PL/SQL procedure successfully completed.

-- Set profile
EXEC DBMS_CLOUD_AI.SET_PROFILE('OPENAI_ORACLE');

PL/SQL procedure successfully completed.                                            
 
-- create a vector index with the vector store name, object store location and
-- object store credential
BEGIN
       DBMS_CLOUD_AI.CREATE_VECTOR_INDEX(
         index_name  => 'MY_INDEX',
         attributes  => '{"vector_db_provider": "oracle",
                          "location": "https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/v1/my_namespace/my_bucket/my_data_folder",
                          "object_storage_credential_name": "OCI_CRED",
                          "profile_name": "OPENAI_ORACLE",
                          "vector_dimension": 1536,
                          "vector_distance_metric": "cosine",
                          "chunk_overlap":128,
                          "chunk_size":1024
      }');
END;
/
PL/SQL procedure successfully completed.  
                                                                                
-- After the vector index is populated, we can now query the index.




-- Set profile
EXEC DBMS_CLOUD_AI.SET_PROFILE('OPENAI_ORACLE');

PL/SQL procedure successfully completed.

-- Select AI answers the question with the knowledge available in the vector database.

set pages 1000
set linesize 150
SELECT AI narrate how can I deploy an oracle machine learning model;
RESPONSE                                                  
To deploy an Oracle Machine Learning model, you would first build your model within the Oracle database. Once your in-database models are built, they become immediately available for use, for instance, through a SQL query using the prediction operators built into the SQL language. 

The model scoring, like model building, occurs directly in the database, eliminating the need for a separate engine or environment within which the model and corresponding algorithm code operate. You can also use models from a different schema (user account) if the appropriate permissions are in place.

Sources:
  - Manage-your-models-with-Oracle-Machine-Learning-on-Autonomous-Database.txt (https://objectstorage.../v1/my_namespace/my_bucket/my_data_folder/Manage-your-models-with-Oracle-Machine-Learning-on-Autonomous-Database.txt)
  - Develop-and-deploy-machine-learning-models-using-Oracle-Autonomous-Database-Machine-Learning-and-APEX.txt (https://objectstorage.../v1/my_namespace/my_bucket/my_data_folder/Develop-and-deploy-machine-learning-models-using-Oracle-Autonomous-Database-Machine-Learning-and-APEX.txt)

Beispiel: AI mit datenbankinternen Transformer-Modellen auswählen

Dieses Beispiel zeigt, wie Sie ein vortrainiertes Transformatormodell, das im Oracle-Objektspeicher gespeichert ist, in Ihre Oracle Database 23ai-Instanz importieren und dann das importierte datenbankinterne Modell im AI-Profil "Select" verwenden können, um Vektoreinbettungen für Dokument-Chunks und Benutzer-Prompts zu generieren.

Um datenbankinterne Transformer-Modelle in Ihrem Select AI-Profil zu verwenden, stellen Sie sicher, dass Folgendes vorhanden ist:
  • Ihr vortrainiertes Modell, das in Ihre Oracle Database 23ai-Instanz importiert wurde.

  • optional Zugriff auf Oracle Object Storage.

Importieren Sie ein vortrainiertes Transformer-Modell in Oracle Database 23ai aus Oracle Object Storage

Lesen Sie die Schritte unter Vorgeschulte Modelle im ONNX-Format für die Vektorgenerierung in der Datenbank importieren und im Blog Vorgefertigtes Einbettungsgenerierungsmodell für Oracle AI Database 26ai, um ein vorgeschultes Transformatormodell in Ihre Datenbank zu importieren.

Das folgende Beispiel zeigt, wie Sie ein vordefiniertes Transformatormodell aus dem Oracle-Objektspeicher in die Datenbank importieren und dann das importierte Modell anzeigen.

- Create a Directory object, or use an existing directory object
CREATE OR REPLACE DIRECTORY ONNX_DIR AS 'onnx_model';
 
-- Object storage bucket
VAR location_uri VARCHAR2(4000);
EXEC :location_uri := 'https://adwc4pm.objectstorage.us-ashburn-1.oci.customer-oci.com/p/eLddQappgBJ7jNi6Guz9m9LOtYe2u8LWY19GfgU8flFK4N9YgP4kTlrE9Px3pE12/n/adwc4pm/b/OML-Resources/o/';
 
-- Model file name
VAR file_name VARCHAR2(512);
EXEC :file_name := 'all_MiniLM_L12_v2.onnx';
 
-- Download ONNX model from object storage into the directory object
BEGIN
  DBMS_CLOUD.GET_OBJECT(                           
        credential_name => NULL,
        directory_name  => 'ONNX_DIR',
        object_uri      => :location_uri || :file_name);
END;
/
 
-- Load the ONNX model into the database
BEGIN
  DBMS_VECTOR.LOAD_ONNX_MODEL(
        directory  => 'ONNX_DIR',
        file_name  => :file_name,
        model_name => 'MY_ONNX_MODEL');
END;
/
 
-- Verify
SELECT model_name, algorithm, mining_function
FROM user_mining_models
WHERE  model_name='MY_ONNX_MODEL';
Datenbankinterne Transformer-Modelle in ausgewählten KI-Profilen verwenden

Diese Beispiele veranschaulichen, wie datenbankinterne Transformatormodelle in einem Select AI-Profil verwendet werden. Ein Profil ist nur für die Generierung von Vektoreinbettungen konfiguriert, während das andere sowohl Select AI-Aktionen als auch die Erstellung von Vektorindizes unterstützt.

Prüfen Sie Anforderungen zum Konfigurieren des Packages DBMS_CLOUD_AI, um die Voraussetzungen zu erfüllen.

Im Folgenden finden Sie ein Beispiel für die Generierung von Vektoreinbettungen:

BEGIN
  DBMS_CLOUD_AI.CREATE_PROFILE(
     profile_name => 'EMBEDDING_PROFILE',
     attributes   => '{"provider" : "database",
                       "embedding_model": "MY_ONNX_MODEL"}'
  );
END;
/

Im Folgenden finden Sie ein Beispiel für allgemeine Select AI-Aktionen und Vektorindexgenerierung, bei denen Sie einen unterstützten AI-Provider angeben können. In diesem Beispiel werden das KI-Profil und die Zugangsdaten der OCI-Generation verwendet. In wird eine Liste der unterstützten Provider angezeigt. Wenn Sie jedoch das datenbankinterne Transformatormodell zum Generieren von Vektoreinbettungen verwenden möchten, verwenden Sie "database: <MY_ONNX_MODEL>" im Attribut embedding_model:

BEGIN                                                                        
  DBMS_CLOUD.CREATE_CREDENTIAL(                                              
    credential_name => 'GENAI_CRED',                                         
    user_ocid       => 'ocid1.user.oc1..aaaa...',
    tenancy_ocid    => 'ocid1.tenancy.oc1..aaaa...',
    private_key     => '<your_api_key>',
    fingerprint     => '<your_fingerprint>'     
  );                                                                         
END;                                                                        
/

BEGIN
  DBMS_CLOUD_AI.CREATE_PROFILE(
     profile_name => 'OCI_GENAI',
     attributes   => '{"provider": "oci",
                       "model": "meta.llama-3.3-70b-instruct",
                       "credential_name": "GENAI_CRED",
                       "vector_index_name": "MY_INDEX",
                       "embedding_model": "database: MY_ONNX_MODEL"}'
  );
END;
/
Select AI mit einem datenbankinternen Transformatormodell aus einem anderen Schema verwenden

In diesem Beispiel wird gezeigt, wie Sie Select AI mit einem datenbankinternen Transformatormodell verwenden, wenn ein anderer Schemaeigentümer Eigentümer des Modells ist. Geben Sie schema_name.object_name als vollqualifizierten Namen des Modells im Attribut embedding_model an. Wenn der aktuelle Benutzer der Schemaeigentümer oder Eigentümer des Modells ist, können Sie den Schemanamen weglassen.

Stellen Sie sicher, dass Sie über die folgenden Berechtigungen verfügen, wenn ein anderer Schemaeigentümer Eigentümer des Modells ist:
  • CREATE ANY MINING MODEL-Systemberechtigung
  • SELECT ANY MINING MODEL-Systemberechtigung
  • SELECT MINING MODEL-Objektberechtigung für das spezifische Modell

Um eine Systemberechtigung zu erteilen, benötigen Sie entweder die Systemberechtigung mit der ADMIN OPTION oder die Systemberechtigung GRANT ANY PRIVILEGE.

Informationen zu den Berechtigungen finden Sie unter Systemberechtigungen für Oracle Machine Learning for SQL.

Mit den folgenden Anweisungen kann ADB_USER1 Daten bewerten und Modelldetails in jedem Schema anzeigen, solange SELECT-Zugriff auf die Daten erteilt wurde. ADB_USER1 kann jedoch nur Modelle im Schema ADB_USER1 erstellen.

GRANT CREATE MINING MODEL TO ADB_USER1;
GRANT SELECT ANY MINING MODEL TO ADB_USER1;
BEGIN
  DBMS_CLOUD_AI.CREATE_PROFILE(
     profile_name => 'OCI_GENAI',
     attributes   => '{"provider": "oci",
                       "credential_name": "GENAI_CRED",
                       "vector_index_name": "MY_INDEX",
                       "embedding_model": "database: ADB_USER1.MY_ONNX_MODEL"}'
  );
END;
/

Das folgende Beispiel zeigt, wie Sie den Modellobjektnamen für die Groß-/Kleinschreibung angeben können:

BEGIN
  DBMS_CLOUD_AI.CREATE_PROFILE(
     profile_name => 'OCI_GENAI',
     attributes   => '{"provider": "oci",
                       "credential_name": "GENAI_CRED",
                       "model": "meta.llama-3.3-70b-instruct",
                       "vector_index_name": "MY_INDEX",
                       "embedding_model": "database: \"adb_user1\".\"my_model\""}'
  );
END;
/
End-to-End-Beispiele mit verschiedenen KI-Providern

Diese Beispiele zeigen End-to-End-Schritte für die Verwendung des datenbankinternen Transformatormodells mit Select AI RAG. Ein Profil verwendet database als die provider, die ausschließlich zum Generieren von Einbettungsvektoren erstellt wurde, während das andere Profil oci als die provider verwendet, die für Select AI-Aktionen sowie für Vektorindizes erstellt wurden.

Prüfen Sie Anforderungen zum Konfigurieren des Packages DBMS_CLOUD_AI, um die Voraussetzungen zu erfüllen.

--Grant create any directory privilege to the user
GRANT CREATE ANY DIRECTORY to ADB_USER;

- Create a Directory object, or use an existing directory object
CREATE OR REPLACE DIRECTORY ONNX_DIR AS 'onnx_model';
 
-- Object storage bucket
VAR location_uri VARCHAR2(4000);
EXEC :location_uri := 'https://adwc4pm.objectstorage.us-ashburn-1.oci.customer-oci.com/p/eLddQappgBJ7jNi6Guz9m9LOtYe2u8LWY19GfgU8flFK4N9YgP4kTlrE9Px3pE12/n/adwc4pm/b/OML-Resources/o/';
 
-- Model file name
VAR file_name VARCHAR2(512);
EXEC :file_name := 'all_MiniLM_L12_v2.onnx';
 
-- Download ONNX model from object storage into the directory object
BEGIN
  DBMS_CLOUD.GET_OBJECT(                           
        credential_name => NULL,
        directory_name  => 'ONNX_DIR',
        object_uri      => :location_uri || :file_name);
END;
/
 
-- Load the ONNX model into the database
BEGIN
  DBMS_VECTOR.LOAD_ONNX_MODEL(
        directory  => 'ONNX_DIR',
        file_name  => :file_name,
        model_name => 'MY_ONNX_MODEL');
END;
/
 
-- Verify
SELECT model_name, algorithm, mining_function
FROM user_mining_models
WHERE  model_name='MY_ONNX_MODEL';


--Administrator grants EXECUTE privilege to ADB_USER
GRANT EXECUTE on DBMS_CLOUD_AI to ADB_USER; 

--Administrator grants EXECUTE privilege DBMS_CLOUD_PIPELINE to ADB_USER
GRANT EXECUTE on DBMS_CLOUD_PIPELINE to ADB_USER;
 
-- Create the object store credential
BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'OCI_CRED',
        username => '<your_username>',
        password => '<OCI_profile_password>'
      );
END;
/

PL/SQL procedure successfully completed.

 -- Create the profile with Oracle Database.

BEGIN
      DBMS_CLOUD_AI.CREATE_PROFILE(
          profile_name =>'EMBEDDING_PROFILE',
          attributes   =>'{"provider": "database",
            "embedding_model": "MY_ONNX_MODEL"
          }');
END;
/

PL/SQL procedure successfully completed.

-- Set profile
EXEC DBMS_CLOUD_AI.SET_PROFILE('EMBEDDING_PROFILE');

PL/SQL procedure successfully completed.                                            
 

In diesem Beispiel wird oci als provider verwendet.

--Grant create any directory privilege to the user
GRANT CREATE ANY DIRECTORY to ADB_USER;

- Create a Directory object, or use an existing directory object
CREATE OR REPLACE DIRECTORY ONNX_DIR AS 'onnx_model';
 
-- Object storage bucket
VAR location_uri VARCHAR2(4000);
EXEC :location_uri := 'https://adwc4pm.objectstorage.us-ashburn-1.oci.customer-oci.com/p/eLddQappgBJ7jNi6Guz9m9LOtYe2u8LWY19GfgU8flFK4N9YgP4kTlrE9Px3pE12/n/adwc4pm/b/OML-Resources/o/';
 
-- Model file name
VAR file_name VARCHAR2(512);
EXEC :file_name := 'all_MiniLM_L12_v2.onnx';
 
-- Download ONNX model from object storage into the directory object
BEGIN
  DBMS_CLOUD.GET_OBJECT(                           
        credential_name => NULL,
        directory_name  => 'ONNX_DIR',
        object_uri      => :location_uri || :file_name);
END;
/
 
-- Load the ONNX model into the database
BEGIN
  DBMS_VECTOR.LOAD_ONNX_MODEL(
        directory  => 'ONNX_DIR',
        file_name  => :file_name,
        model_name => 'MY_ONNX_MODEL');
END;
/
 
-- Verify
SELECT model_name, algorithm, mining_function
FROM user_mining_models
WHERE  model_name='MY_ONNX_MODEL';


–-Administrator Grants EXECUTE privilege to ADB_USER
GRANT EXECUTE on DBMS_CLOUD_AI to ADB_USER; 

--Administrator Grants EXECUTE privilege DBMS_CLOUD_PIPELINE to ADB_USER
GRANT EXECUTE on DBMS_CLOUD_PIPELINE to ADB_USER;

-- Create the object store credential
BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'OCI_CRED',
        username => '<your_username>',
        password => '<OCI_profile_password>'
      );
END;
/
--Create GenAI credentials
BEGIN                                                                        
  DBMS_CLOUD.CREATE_CREDENTIAL(                                              
    credential_name => 'GENAI_CRED',                                         
    user_ocid       => 'ocid1.user.oc1..aaaa...',
    tenancy_ocid    => 'ocid1.tenancy.oc1..aaaa...',
    private_key     => '<your_api_key>',
    fingerprint     => '<your_fingerprint>'     
  );                                                                         
END;                                                                        
/
--Create OCI AI profile
BEGIN
  DBMS_CLOUD_AI.CREATE_PROFILE(
     profile_name => 'OCI_GENAI',
     attributes   => '{"provider": "oci",
                       "model": "meta.llama-3.3-70b-instruct",
                       "credential_name": "GENAI_CRED",
                       "vector_index_name": "MY_INDEX",
                       "embedding_model": "database: MY_ONNX_MODEL"}'
  );
END;
/

-- Set profile
EXEC DBMS_CLOUD_AI.SET_PROFILE('OCI_GENAI');

PL/SQL procedure successfully completed.                                            
 
-- create a vector index with the vector store name, object store location and
-- object store credential
BEGIN
       DBMS_CLOUD_AI.CREATE_VECTOR_INDEX(
         index_name  => 'MY_INDEX',
         attributes  => '{"vector_db_provider": "oracle",
                          "location": "https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/v1/my_namespace/my_bucket/my_data_folder",
                          "object_storage_credential_name": "OCI_CRED",
                          "profile_name": "OCI_GENAI",
                          "vector_dimension": 384,
                          "vector_distance_metric": "cosine",
                          "chunk_overlap":128,
                          "chunk_size":1024
      }');
END;
/
PL/SQL procedure successfully completed.  
                                                                               

-- Set profile
EXEC DBMS_CLOUD_AI.SET_PROFILE('OCI_GENAI');

PL/SQL procedure successfully completed.

-- Select AI answers the question with the knowledge available in the vector database.

set pages 1000
set linesize 150
SELECT AI narrate how can I deploy an oracle machine learning model;
RESPONSE                                                  
To deploy an Oracle Machine Learning model, you would first build your model within the Oracle database. Once your in-database models are 
built, they become immediately available for use, for instance, through a SQL query using the prediction operators built into the SQL 
language. 

The model scoring, like model building, occurs directly in the database, eliminating the need for a separate engine or environment within 
which the model and corresponding algorithm code operate. You can also use models from a different schema (user account) if the appropriate 
permissions are in place.

Sources:
  - Manage-your-models-with-Oracle-Machine-Learning-on-Autonomous-Database.txt (https://objectstorage.../v1/my_namespace/my_bucket/
my_data_folder/Manage-your-models-with-Oracle-Machine-Learning-on-Autonomous-Database.txt)
  - Develop-and-deploy-machine-learning-models-using-Oracle-Autonomous-Database-Machine-Learning-and-APEX.txt 
(https://objectstorage.../v1/my_namespace/my_bucket/my_data_folder/Develop-and-deploy-machine-learning-models-using-Oracle-Autonomous-
Database-Machine-Learning-and-APEX.txt)

Beispiel: Synthetische Daten generieren

In diesem Beispiel wird erläutert, wie Sie synthetische Daten generieren können, die Eigenschaften und die Verteilung realer Daten nachahmen.

Hinweis:

Unterstützung für die Generierung synthetischer Daten ist ab Version 19.29 in Oracle Database 19c und ab Version 23.26 in Oracle Database 26ai verfügbar.

Das folgende Beispiel zeigt, wie Sie einige Tabellen in Ihrem Schema erstellen, OCI Generative AI als AI-Provider verwenden, um ein AI-Profil zu erstellen, Daten mit der Funktion DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA in diesen Tabellen zu synthetisieren und Antworten auf Eingabeaufforderungen in natürlicher Sprache mit Select AI abzufragen oder zu generieren.

--Create tables or use cloned tables

CREATE TABLE ADB_USER.Director (
    director_id     INT PRIMARY KEY,
    name            VARCHAR(100)
);
CREATE TABLE ADB_USER.Movie (
    movie_id        INT PRIMARY KEY,
    title           VARCHAR(100),
    release_date    DATE,
    genre           VARCHAR(50),
    director_id     INT,
    FOREIGN KEY (director_id) REFERENCES ADB_USER.Director(director_id)
);
CREATE TABLE ADB_USER.Actor (
    actor_id        INT PRIMARY KEY,
    name            VARCHAR(100)
);
CREATE TABLE ADB_USER.Movie_Actor (
    movie_id        INT,
    actor_id        INT,
    PRIMARY KEY (movie_id, actor_id),
    FOREIGN KEY (movie_id) REFERENCES ADB_USER.Movie(movie_id),
    FOREIGN KEY (actor_id) REFERENCES ADB_USER.Actor(actor_id)
);

-- Create the GenAI credential
BEGIN                                                                       
  DBMS_CLOUD.create_credential(                                             
    credential_name => 'GENAI_CRED',                                        
    user_ocid       => 'ocid1.user.oc1....',
    tenancy_ocid    => 'ocid1.tenancy.oc1....',
    private_key     => 'vZ6cO...',
    fingerprint     => '86:7d:...'    
  );                                                                        
END;                                                                       
/
 
-- Create a profile
BEGIN                                                                      
  DBMS_CLOUD_AI.CREATE_PROFILE(                                            
      profile_name =>'GENAI',                                                           
      attributes  =>'{"provider": "oci",                                                                 
        "credential_name": "GENAI_CRED",                                   
        "object_list": [{"owner": "ADB_USER", 
		"oci_compartment_id": "ocid1.compartment.oc1...."}]          
       }');                                                                
END;                                                                       
/
 
 
EXEC DBMS_CLOUD_AI.set_profile('GENAI');

-- Run the API for single table
BEGIN
    DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA(
        profile_name => 'GENAI',
        object_name  => 'Director',
        owner_name   => 'ADB_USER',
        record_count => 5
    );
END;
/
PL/SQL procedure successfully completed.
 
 
-- Query the table to see results
SQL> SELECT * FROM ADB_USER.Director;
 
DIRECTOR_ID NAME
----------- ----------------------------------------------------------------------------------------------------
          1 John Smith
          2 Emily Chen
          3 Michael Brown
          4 Sarah Taylor
          5 David Lee
 
 
-- Or ask select ai to show the results
SQL> select ai how many directors are there;
 
NUMBER_OF_DIRECTORS
-------------------
                  5
Beispiel: Synthetische Daten für mehrere Tabellen generieren

Nachdem Sie Ihr AI-Providerprofil erstellt und festgelegt haben, generieren Sie Daten für mehrere Tabellen mit der DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA. Sie können Select AI abfragen oder verwenden, um auf die Eingabeaufforderungen in natürlicher Sprache zu reagieren.

BEGIN
    DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA(
        profile_name => 'GENAI',
        object_list => '[{"owner": "ADB_USER", "name": "Director","record_count":5},
                         {"owner": "ADB_USER", "name": "Movie_Actor","record_count":5},
                         {"owner": "ADB_USER", "name": "Actor","record_count":10},
                         {"owner": "ADB_USER", "name": "Movie","record_count":5,"user_prompt":"all movies released in 2009"}]'
    );
END;
/
PL/SQL procedure successfully completed.
 
 
-- Query the table to see results
SQL> select * from ADB_USER.Movie;

 MOVIE_ID TITLE                                                     RELEASE_D                            GENRE                                 DIRECTOR_ID	
---------- -------------------------------------------------------- --------- --------------------------------------------------------------- -----------	
         1 The Dark Knight                                           15-JUL-09                              Action                              8	
         2 Inglourious Basterds                                      21-AUG-09                              War                                 3	
         3 Up in the Air                                             04-SEP-09                              Drama                               6	
         4 The Hangover                                              05-JUN-09                              Comedy                              1	
         5 District 9                                                14-AUG-09                              Science Fiction                     10	
	

 
-- Or ask select ai to show the results
SQL> select ai how many actors are there;
 
Number of Actors
----------------
              10
Beispiel: Anleitung zur Generierung synthetischer Daten mit Beispielzeilen

Um den AI-Service beim Generieren synthetischer Daten zu unterstützen, können Sie nach dem Zufallsprinzip vorhandene Datensätze aus einer Tabelle auswählen. Beispiel: Wenn Sie dem Argument params {"sample_rows": 5} hinzufügen, können Sie 5 Beispielzeilen aus einer Tabelle an den AI-Provider senden. In diesem Beispiel werden 10 zusätzliche Zeilen basierend auf den Beispielzeilen aus der Tabelle Transactions generiert.

BEGIN
  DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA(
    profile_name => 'GENAI',
    object_name  => 'Transactions',
    owner_name   => 'ADB_USER',
    record_count => 10,
    params       => '{"sample_rows":5}'
  );
END;
/
Beispiel: Synthetische Datengenerierung mit Benutzer-Prompts anpassen

Mit dem Argument user_prompt können Sie zusätzliche Regeln oder Anforderungen für die Datengenerierung angeben. Dies kann auf eine einzelne Tabelle oder als Teil des Arguments object_list für mehrere Tabellen angewendet werden. Beispiel: Bei den folgenden Aufrufen von DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA weist der Prompt die KI an, synthetische Daten für Filme zu generieren, die 2009 veröffentlicht wurden.

-- Definition for the Movie table CREATE TABLE Movie 

CREATE TABLE Movie (
    movie_id        INT PRIMARY KEY,
    title           VARCHAR(100),
    release_date    DATE,
    genre           VARCHAR(50),
    director_id     INT,
    FOREIGN KEY (director_id) REFERENCES Director(director_id)
);
 
 
 
BEGIN
  DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA(
    profile_name      => 'GENAI',
    object_name       => 'Movie',
    owner_name        => 'ADB_USER',
    record_count      => 10,
    user_prompt       => 'all movies are released in 2009',
    params            => '{"sample_rows":5}'
  );
END;
/
 
BEGIN
    DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA(
        profile_name => 'GENAI',
        object_list => '[{"owner": "ADB_USER", "name": "Director","record_count":5},
                         {"owner": "ADB_USER", "name": "Movie_Actor","record_count":5},
                         {"owner": "ADB_USER", "name": "Actor","record_count":10},
                         {"owner": "ADB_USER", "name": "Movie","record_count":5,"user_prompt":"all movies are released in 2009"}]'
    );
END;
/
Beispiel: Synthetische Datenqualität mit Tabellenstatistiken verbessern

Wenn eine Tabelle Spaltenstatistiken enthält oder aus einer Datenbank geklont wird, die Metadaten enthält, kann Select AI diese Statistiken verwenden, um Daten zu generieren, die den ursprünglichen Daten ähnlich oder konsistent sind.

Bei NUMBER-Spalten leiten die Werte für "Hoch" und "Niedrig" aus den Statistiken den Wertebereich. Beispiel: Wenn die Spalte SALARY in der ursprünglichen Tabelle EMPLOYEES zwischen 1000 und 10000 liegt, fallen auch die synthetischen Daten für diese Spalte in diesen Bereich.

Für Spalten mit eindeutigen Werten, wie z.B. eine Spalte STATE mit den Werten CA, WA und TX, verwenden die synthetischen Daten diese spezifischen Werte. Sie können dieses Feature mit dem Parameter {"table_statistics": true/false} verwalten. Standardmäßig sind die Tabellenstatistiken aktiviert.

BEGIN
  DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA(
    profile_name      => 'GENAI',
    object_name       => 'Movie',
    owner_name        => 'ADB_USER',
    record_count      => 10,
    user_prompt => 'all movies released in 2009',
    params            => '{"sample_rows":5,"table_statistics":true}'
  );
END;
/
Beispiel: Mit Spaltenkommentaren die Datengenerierung steuern

Wenn Spaltenkommentare vorhanden sind, schließt Select AI diese automatisch ein, um während der Datengenerierung zusätzliche Informationen für das LLM bereitzustellen. Beispiel: Ein Kommentar in der Spalte Status einer Transaktionstabelle kann zulässige Werte auflisten, wie successful, failed, pending, canceled und need manual check. Sie können auch Kommentare hinzufügen, um die Spalte weiter zu erläutern und KI-Services präzisere Anweisungen oder Hinweise zur Generierung genauer Daten zu geben. Standardmäßig sind Kommentare deaktiviert. Weitere Informationen finden Sie unter Optionale Parameter.

-- Use comment on column
COMMENT ON COLUMN Transaction.status IS 'the value for state should either be ''successful'', ''failed'', ''pending'' or ''canceled''';
/
 
BEGIN
    DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA(
        profile_name  => 'GENAI',
        object_name   => 'employees',
        owner_name    => 'ADB_USER',
        record_count  => 10
        params        => '{"comments":true}'
 
    );
END;
/
Beispiel: Eindeutige Werte in der Generierung synthetischer Daten festlegen

Wenn große Mengen synthetischer Daten mit LLMs generiert werden, treten wahrscheinlich doppelte Werte auf. Um dies zu verhindern, richten Sie einen eindeutigen Constraint für die relevante Spalte ein. Dadurch wird sichergestellt, dass Select AI Zeilen mit doppelten Werten in der LLM-Antwort ignoriert. Um außerdem Werte für bestimmte Spalten einzuschränken, können Sie die user_prompt verwenden oder Kommentare hinzufügen, um die zulässigen Werte anzugeben, wie z.B. die Begrenzung einer STATE-Spalte auf CA, WA und TX.

-- Use 'user_prompt'
BEGIN
    DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA(
        profile_name  => 'GENAI',
        object_name   => 'employees',
        owner_name    => 'ADB_USER',
        user_prompt   => 'the value for state should either be CA, WA, or TX',
        record_count  => 10
    );
END;
/
 
 
-- Use comment on column
COMMENT ON COLUMN EMPLOYEES.state IS 'the value for state should either be CA, WA, or TX'
/
Beispiel: Synthetische Datengenerierung durch parallele Verarbeitung verbessern

Um die Laufzeit zu reduzieren, teilt Select AI Aufgaben zur synthetischen Datengenerierung in kleinere Chunks für Tabellen ohne Primärschlüssel oder mit numerischen Primärschlüsseln auf. Diese Aufgaben werden parallel ausgeführt und interagieren mit dem KI-Provider, um Daten effizienter zu generieren. Der Parallelitätsgrad (DOP) in Ihrer Datenbank, der von Ihrer Autonomous AI Database on Dedicated Exadata Infrastructure-Serviceebene und den ECPU- oder OCPU-Einstellungen beeinflusst wird, bestimmt die Anzahl der Datensätze, die jeder Chunk-Prozess verarbeitet. Die parallele Ausführung von Aufgaben verbessert im Allgemeinen die Performance, insbesondere wenn große Datenmengen über viele Tabellen hinweg generiert werden. Um die parallele Verarbeitung der synthetischen Datengenerierung zu verwalten, legen Sie priority als optionalen Parameter fest. Siehe Optionale Parameter.

Beispiel: Datenzugriff aktivieren oder deaktivieren

Dieses Beispiel veranschaulicht, wie Administratoren den Datenzugriff kontrollieren und verhindern können, dass Select AI tatsächliche Schematabellen an das LLM sendet.

Datenzugriff deaktivieren

Um den Zugriff auf Schematabellen einzuschränken, melden Sie sich als Administrator an, und führen Sie das folgende Verfahren aus.

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

Deaktivieren von Datenzugriffsbeschränkungen Wählen Sie die narrate-Aktion von AI und die Generierung synthetischer Daten aus. Die Aktion narrate und die Generierung synthetischer Daten lösen einen Fehler aus.

Melden Sie sich als Datenbankbenutzer an, und erstellen und konfigurieren Sie Ihr AI-Profil. Prüfen Sie , um Ihr KI-Profil zu konfigurieren.

BEGIN
  DBMS_CLOUD_AI.CREATE_PROFILE(
          profile_name =>'DATA_ACCESS',
          attributes   =>'{"provider": "openai",
            "credential_name": "OPENAI_CRED",
            "object_list": [{"owner":"SH"}]
          }');
END;
/

EXEC DBMS_CLOUD_AI.SET_PROFILE('DATA_ACCESS');
 

select ai how many customers;

NUM_CUSTOMERS
55500

select ai narrate what are the top 3 customers in San Francisco;

ORA-20000: Data access is disabled for SELECT AI.
ORA-06512: at "C##CLOUD$SERVICE.DBMS_CLOUD", line 2228
ORA-06512: at "C##CLOUD$SERVICE.DBMS_CLOUD_AI", line 13157
ORA-06512: at line 1 https://docs.oracle.com/error-help/db/ora-20000/
The stored procedure 'raise_application_error' was called which causes this error to be generated
Error at Line: 1 Column: 6

Das folgende Beispiel zeigt die Fehler, die ausgelöst werden, wenn Sie versuchen, synthetische Daten zu generieren.

BEGIN
DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA(
profile_name => 'DATA_ACCESS_SDG',
object_name => 'CUSTOMERS_NEW',
owner_name => 'ADB_USER,
record_count => 5
);
END;
/ 

ERROR at line 1:

ORA-20000: Data access is disabled for SELECT AI.
ORA-06512: at "C##CLOUD$SERVICE.DBMS_CLOUD", line 2228
ORA-06512: at "C##CLOUD$SERVICE.DBMS_CLOUD_AI", line 13401

ORA-06512: at line 2
Datenzugriff aktivieren

Das folgende Beispiel zeigt, wie Sie den Datenzugriff aktivieren. Melden Sie sich als Administrator an, und führen Sie das folgende Verfahren aus:

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

Melden Sie sich als Datenbankbenutzer an, und erstellen und konfigurieren Sie Ihr AI-Profil. Prüfen Sie , um Ihr KI-Profil zu konfigurieren. Führen Sie die Aktion narrate aus, und generieren Sie synthetische Daten separat.

BEGIN
  DBMS_CLOUD_AI.CREATE_PROFILE(
          profile_name =>'DATA_ACCESS_NEW',
          attributes   =>'{"provider": "openai",
            "credential_name": "OPENAI_CRED",
            "object_list": [{"owner":"SH"}]
          }');
   END;
   /

PL/SQL procedure successfully completed.

EXEC DBMS_CLOUD_AI.SET_PROFILE('DATA_ACCESS_NEW');

PL/SQL procedure successfully completed.


select ai how many customers;

NUM_CUSTOMERS
55500

select ai narrate what are the top 3 customers in San Francisco;

"RESPONSE"
"The top 3 customers in San Francisco are Cody Seto, Lauren Yaskovich, and Ian Mc"

Das folgende Beispiel zeigt eine erfolgreiche Generierung synthetischer Daten nach dem Aktivieren des Datenzugriffs.

BEGIN
DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA(
profile_name => 'DATA_ACCESS_SDG',
object_name => 'CUSTOMERS_NEW',
owner_name => 'ADB_USER',
record_count => 5
);
END;
/ 

PL/SQL procedure successfully completed.