検索拡張生成(RAG)を使用した自然言語プロンプトの拡張

Select AI with RAGは、セマンティック類似性検索を使用して指定されたベクトル・ストアからコンテンツを取得することで、自然言語プロンプトを強化します。これにより、特定の最新のコンテンツを使用することで幻覚が軽減され、プロンプトに対してより適切な自然言語応答が提供されます。

Select AIは、Retrieval Augmented Generation (RAG)プロセスを自動化します。この手法では、AIベクトル検索を使用してエンタープライズ・ソースからデータを取得し、指定した大規模言語モデル(LLM)のユーザー・プロンプトを強化します。エンタープライズ・データ・ストアからの情報を活用することで、RAGは幻覚を軽減し、接地された応答を生成します。

RAGは、ベクトル索引のAIベクトル検索を使用して、指定された質問のセマンティックに類似したデータを検索します。ベクトル・ストアは、テキスト、イメージ、オーディオなどの様々なデータ・ポイントの数学的表現であるベクトル埋込みを処理します。これらの埋込みによってデータの意味が取得され、効率的な処理および分析が可能になります。ベクトル埋込みおよびAIベクトル検索の詳細は、AIベクトル検索の概要を参照してください。

Select AIは、Oracle Autonomous AI Database 26aiで利用可能なAIベクトル検索と統合され、ベクトル埋込みを使用した類似性検索を実現します。

Select AI RAGのメリット

LLMが使用しているソースを確認することで、クエリを簡素化し、現在のデータでレスポンスの精度を向上させ、透明性を確保します。

Select AI RAGには、次の利点があります。

ベクトル・ストアの構築

Select AIは、入力ドキュメント(PDF、DOC、JSON、XML、HTMLなど)をオブジェクト・ストアからプレーン・テキストに変換することで、ベクトル・ストアの作成と移入を自動化します。Oracle Textでは、約150種類のファイル・タイプがサポートされています。サポートされているすべてのドキュメント形式の完全なリストは、サポートされているドキュメント形式を参照してください。

Select AIは、ドキュメントをチャンクに自動的に処理し、埋込みを生成し、指定されたベクトル・ストアに格納し、新しいデータが到着するとベクトル索引を更新します。

オブジェクト・ストレージからの入力をSelect AI RAGで使用する方法を次に示します:

図adb-obj-storage-select-ai-rag.pngの説明

  1. 入力: データは、最初はオブジェクト・ストレージに格納されます。

  2. Oracle Autonomous Databaseは、入力データまたはドキュメントを取得してチャンクし、チャンクを埋込みモデルに送信します。

  3. 埋込みモデルは、チャンク・データを処理し、ベクトル埋込みを返します。

  4. ベクトル埋込みは、RAGで使用するためにベクトル・ストアに格納されます。コンテンツが追加されると、ベクトル索引が自動的に更新されます。

RAGは、エンタープライズ・データベースから関連する情報を取得し、ユーザーの質問に回答します。この情報は、ユーザー・プロンプトとともに、指定された大規模言語モデルに提供されます。Select AIは、この追加の企業情報を使用してプロンプトを強化し、LLMの応答を改善します。RAGは、ベクトル・ストアからの最新の企業情報により、レスポンス品質を向上させることができます。

図adb-diagram-third-party-vector-db-select-ai-rag.pngの説明

Select AIは、次のようにRAGを実装します。

  1. 入力: ユーザーは、Select AI narrateアクションを使用して質問(プロンプトを指定)します。

  2. Select AIは、AIプロファイルで指定された埋込みモデルを使用して、プロンプトのベクトル埋込みを生成します。

  3. ベクトル検索索引では、質問のベクトル埋込みを使用して、索引付けされた顧客のエンタープライズ・データ(ベクトル・ストアを検索)から一致するコンテンツを検索します。

  4. ベクトル検索では、Autonomous AI Databaseインスタンスへの入力に似た上位Kテキストが返されます。

  5. Autonomous AI Databaseは、これらの上位Kクエリー結果をユーザー質問とともにLLMに送信します。

  6. LLMは、自律型AIデータベース・インスタンスにレスポンスを返します。

  7. Autonomous AI Database Select AIは、ユーザーにレスポンスを提供します。

DBMS_CLOUD_AIを使用したベクトル索引の作成および管理

DBMS_CLOUD_AIパッケージを使用して、ベクトル索引を作成および管理し、ベクトル・データベースのJSONパラメータを構成します。

資格証明を作成し、ベクトル・データベースおよびAIプロバイダへのネットワーク・アクセスを提供すると、Autonomous AI DatabaseインスタンスはAIプロファイルを使用してLLMへのアクセスを構成します。Select AI文での設定および使用の詳細は、「例: RAGを使用したSelect AIの設定および使用」を参照してください。

ノート:表データまたはベクトル検索ドキュメントをLLMに送信しない場合、管理者権限を持つユーザーは、指定されたデータベースのすべてのユーザーに対してこのようなアクセスを無効にできます。これにより、RAGのnarrateアクションが無効になります。

DBMS_CLOUD_AIパッケージを使用して、「AIプロバイダおよびLLMの選択」にリストされているプロバイダのAIプロファイルを構成できます。

データベース内トランスフォーマ・モデルの使用

Select AI RAGでは、Oracle Database 23aiインスタンスのデータベースにインポートされた事前トレーニング済ONNXトランスフォーマ・モデルを使用して、ドキュメント・チャンクおよびユーザー・プロンプトから埋込みベクトルを生成できます。

事前トレーニング済ONNXモデルのOracle Database 23aiインスタンスへのインポートについてさらに学習するには、次を参照してください:

ノート:インポートされたデータベース内トランスフォーマ・モデルでSelect AI RAGを使用するには、事前トレーニング済ONNX形式のトランスフォーマ・モデルをOracle Database 23aiインスタンスにインポートする必要があります。サポートされるAIプロバイダの他のトランスフォーマ・モデルを使用することもできます。

機能の詳細は、例: データベース内トランスフォーマ・モデルを使用したSelect AIを参照してください。

例: RAGを使用した Select AIの設定および使用

この例では、Oracle Autonomous AI Databaseを使用してOCI Generative AIベクトル・ストア・クラウド・サービスをOpenAIと統合するための資格証明の設定、ネットワーク・アクセスの構成、ベクトル索引の作成をガイドします。

この設定は、ベクトル索引を使用してLLMレスポンスを拡張するAIプロファイルの作成で完了します。最後に、この例では、指定されたベクトル・データベースからの情報を使用して拡張されたレスポンスを返すSelect AI narrateアクションを使用しています。

次の例は、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)

例: データベース内トランスフォーマ・モデルを使用したSelect AI

この例では、Oracleオブジェクト・ストレージに格納された事前トレーニング済トランスフォーマ・モデルをOracle Database 23aiインスタンスにインポートし、Select AIプロファイルでインポートされたデータベース内モデルを使用して、ドキュメント・チャンクおよびユーザー・プロンプトのベクトル埋込みを生成する方法を示します。

Select AIプロファイルでデータベース内トランスフォーマ・モデルを使用するには、次のものがあることを確認してください。

Oracle Object StorageからOracle Database 23aiへの事前トレーニング済トランスフォーマ・モデルのインポート

データベース内でのベクトル生成のためのONNX形式での事前トレーニング済モデルのインポートおよびブログのOracle AI Database 26aiの事前構築済埋込み生成モデルのステップを確認して、事前トレーニング済トランスフォーマ・モデルをデータベースにインポートします。

次の例は、事前トレーニング済トランスフォーマ・モデルをOracleオブジェクト・ストレージからデータベースにインポートし、インポートされたモデルを表示する方法を示しています。

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

Select AIプロファイルでのデータベース内トランスフォーマ・モデルの使用

これらの例は、Select AIプロファイル内でデータベース内トランスフォーマ・モデルを使用する方法を示しています。1つのプロファイルはベクトル埋込みを生成するためにのみ構成され、もう1つのプロファイルはSelect AIアクションとベクトル索引作成の両方をサポートしています。

前提条件を完了するには、「DBMS_CLOUD_AIパッケージを構成するための要件」を参照してください。

次に、ベクトル埋込みのみを生成する例を示します。

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

次に、サポートされているAIプロバイダを指定できる一般的なSelect AIアクションおよびベクトル索引生成の例を示します。この例では、OCI Gen AIプロファイルと資格証明を使用します。サポートされているプロバイダのリストは、AIプロバイダおよびLLMの選択を参照してください。ただし、ベクトル埋込みの生成にデータベース内トランスフォーマ・モデルを使用する場合は、embedding_model属性で"database: <MY_ONNX_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の使用

この例では、別のスキーマ所有者がモデルを所有している場合、データベース内トランスフォーマ・モデルでSelect AIを使用する方法を示します。embedding_model属性で、モデルの完全修飾名としてschema_name.object_nameを指定します。現在のユーザーがスキーマ所有者であるか、モデルを所有している場合は、スキーマ名を省略できます。

別のスキーマ所有者がモデルを所有している場合は、次の権限が必要です。

システム権限を付与するには、ADMIN OPTIONを指定したシステム権限またはGRANT ANY PRIVILEGEシステム権限が付与されている必要があります。

権限を確認するには、Oracle Machine Learning for SQLのためのシステム権限を参照してください。

次の文は、ADB_USER1による任意のスキーマ内のデータのスコア付けおよびモデルの詳細の表示を許可します(SELECTアクセス権がデータに付与されている場合)。ただし、ADB_USER1ADB_USER1スキーマにのみモデルを作成できます。

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

次の例は、大/小文字を区別するモデル・オブジェクト名を指定する方法を示しています。

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

様々なAIプロバイダによるエンドツーエンドの例

これらの例は、Select AI RAGでデータベース内トランスフォーマ・モデルを使用するためのエンドツーエンドのステップを示しています。一方のプロファイルでは、埋込みベクトルの生成用に排他的に作成されたproviderとしてdatabaseを使用し、もう一方のプロファイルでは、Select AIアクションおよびベクトル索引用に作成されたproviderとしてociを使用します。

前提条件を完了するには、「DBMS_CLOUD_AIパッケージを構成するための要件」を参照してください。

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

この例では、ociproviderとして使用します。

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

関連コンテンツ