みなさん、こんにちは。
AI検証チームの宮井です。

本記事では、Oracle Database 23aiの新機能である AI Vector SearchDBMS_VECTOR_CHAIN を使ったAI連携機能をご紹介します。
今回は初回ということで、生成AIによる回答生成をやってみたいと思います。
Oracle Databaseの強みを生かしたRAG(Retrieval-Augmented Generation)の部分はまた別途紹介できればと思います。

さて、前提ですが、今回環境はOCIのBaseDB環境を利用しました。
また、本手順ではOpenAIのgpt-4.1-nanoを使用していますが、OpenAIのAPIキーの取得が必要になりますので試す方は事前に入手してください。

本記事は、以下マニュアルを参考にしています。

Oracle AI Vector SearchはでぶちゃんAIチャットボットでも利用しています!
Oracleの疑問に即答!『でぶちゃんAIチャットボット』をリリース

ユーザー作成と権限付与

初めに実行ユーザを作成します。

Oracle Database上で新しいユーザー「aitest」を作成し、必要な権限を付与しています。

SQL> CREATE USER aitest identified by ******* DEFAULT TABLESPACE USERS quota unlimited on USERS;

User created.

SQL> GRANT DB_DEVELOPER_ROLE, create credential to aitest;

Grant succeeded.
次にユーザー「aitest」が外部ネットワークに接続できるように、アクセス制御リスト(ACL)に接続権限を追加します。
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE:指定したユーザーに対してネットワーク接続の権限を付与します。
– ここでは全てのホスト(’*’)に対して「connect」権限を与えています。
SQL> BEGIN
  2    DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
  3      host => '*',
  4      ace => xs$ace_type(privilege_list => xs$name_list('connect'),
  5                         principal_name => 'aitest',
  6                         principal_type => xs_acl.ptype_db));
  7  END;
  8  /

PL/SQL procedure successfully completed.

OpenAI API用の認証情報を作成

作成したユーザー「aitest」でデータベースに接続し、Oracle Database内でOpenAIのAPIを利用するためのクレデンシャル(認証情報)を作成しています。
ここで、OpenAIのAPIキーをアクセストークンとして使用します。
SQL> show user
USER is "AITEST"

SQL> declare 
  2   jo json_object_t; 
  3   begin 
  4   jo := json_object_t(); 
   5   jo.put('access_token', '******'); dbms_vector_chain.create_credential( 
   6   credential_name => 'OPENAI_CRED', 
   7   params => json(jo.to_string)); 
   8   end; 
   9   /

 PL/SQL procedure successfully completed.

DBMS_VECTOR_CHAINを使ったテキスト生成の実行例

では、AIによる回答生成を行っていきます。
Oracle Databaseのdbms_vector_chain.utl_to_generate_text関数を使い、OpenAIのAPIを呼び出して質問に対する回答を生成しています。
まずはマニュアル通り、「What is Oracle Text?」という質問をし、問い合わせできていることを確認します。
返答が返ってきますね。
SQL> var params clob;
SQL> exec :params := '{"provider": "openai","credential_name": "OPENAI_CRED","url": "https://api.openai.com/v1/chat/completions","model": "gpt-4.1-nano","max_tokens": 1000,"temperature": 1.0}';

PL/SQL procedure successfully completed.

SQL> select dbms_vector_chain.utl_to_generate_text('What is Oracle Text?',json(:params)) from dual;

DBMS_VECTOR_CHAIN.UTL_TO_GENERATE_TEXT('WHATISORACLETEXT?',JSON(:PARAMS))
--------------------------------------------------------------------------------
Oracle Text is a high-performance, scalable, and flexible text indexing and sear

では、日本語の質問をしてみましょう。
日本語で「Oracle Database 23aiのAI Vector Searchってどんな機能ですか?」と質問しましたが、英語で返ってきてしまいました。
SQL> select dbms_vector_chain.utl_to_generate_text('Oracle Database 23aiのAI Verctor Searchってどんな機能ですか?',json(:params)) from dual;

DBMS_VECTOR_CHAIN.UTL_TO_GENERATE_TEXT('ORACLEDATABASE23AI???AIVERCTORSEARCH????
--------------------------------------------------------------------------------
It appears you're referring to Oracle Database 23c with AI and vector search cap
NLS_LANGを設定していませんでしたので、以下のようにOracleのNLS_LANG環境変数を日本語に設定しました。
[oracle@aitest ~]$ export NLS_LANG=Japanese_Japan.AL32FUTF8
再度質問したところ、今度は日本語で回答が得られました。
文字も見切れてしまっていたので、調整して再度実行すると、回答が返ってきました!
SQL> select dbms_vector_chain.utl_to_generate_text('Oracle Database 23aiのAI Verctor Searchってどんな機能ですか?日本語で返答してください。',json(:params)) from dual;

DBMS_VECTOR_CHAIN.UTL_TO_GENERATE_TEXT('ORACLEDATABASE23AIのAIVERCTORSEARCHって
--------------------------------------------------------------------------------
Oracle Database 23c(2023年版)のAI Vector Searchは、データベース

SQL> set long 10000
SQL> set pages 0

SQL> select dbms_vector_chain.utl_to_generate_text('Oracle Database 23aiのAI Verctor Searchってどんな機能ですか?',json(:params)) from dual;

Oracle Database 23c(またはOracle Database 23のAI関連機能)における「AI Vec
tor Search」についての情報は、私の知識の範囲(2023年10月時点)で
は正式に公開されている詳細な説明が少ないです。ただし、一般的
に「Vector Search」(ベクトル検索)という概念は、次のような特徴を持つことが多い
です。
### AI Vector Searchの一般的な概要
- **概要**: 大規模なデータセットにおいて、アイテムやデータポイントの類似性を効率
的に検索するための技術。特に、画像、音声、テキストなどの非構造化データに対して、
埋め込み(ベクトル)表現を用いて類似検索を行います。
- **特徴**:
- 高次元のベクトル空間での比較
- 近似的な最近傍探索(Approximate Nearest Neighbor Search、A
NN)
- 高速でスケーラブルな検索性能
- 様々なAI・MLモデル(BERT、OpenAIのモデルなど)による埋め込みを用いた検索

### Oracle DatabaseにおけるAI Vector Search
- **目的**: 非構造化データやAIモデルの出力をデータベース内に格納し、類似性に基づ
くクエリ効率化
- **機能**:
- 埋め込みベクトルを使った検索結果の高速化
- 統合されたAI推論と検索機能
- 機械学習モデルと連携した類似度比較
- 既存のSQLインターフェースからシームレスに利用可能

### まとめ
Oracle Database 23cの「AI Vector Search」は、AIモデルから生成された高次元ベクト
ルを用いて、類似性検索や推論を高速かつ効率的に行うための機能と考えられます。これ
により、非構造化データや大量のAI応用データからの情報抽出や推論が強化されると期待
されています。

### 公式情報と確認
最新の詳細や具体的な機能については、Oracleの公式ドキュメントや
リリースノートをご確認ください。また、Oracleのサポートやパートナーに問い合わせる
ことで、より詳細な情報も得られるでしょう。

---
ご質問やさらなる詳細についてあれば、お知らせください。

PL/SQLでも同様に実行可能です。
SQL> set serveroutput on
SQL> 
SQL> declare
  2    input clob;
  3    params clob;
  4    output clob;
  5  begin
  6    input := 'What is Oracle Text?';

  7    params := '{"provider": "openai","credential_name": "OPENAI_CRED","url": "https://api.openai.com/v1/chat/completions","model": "gpt-4.1-nano","max_tokens": 10000,"temperature": 1.0}';

  8    output := dbms_vector_chain.utl_to_generate_text(input, json(params));
  9    dbms_output.put_line(output);
 10    if output is not null then
 11      dbms_lob.freetemporary(output);
 12    end if;
 13  exception
 14    when OTHERS THEN
 15      DBMS_OUTPUT.PUT_LINE (SQLERRM);
 16      DBMS_OUTPUT.PUT_LINE (SQLCODE);
 17  end;
 18  /

Oracle Text is a powerful feature of the Oracle Database that enables
high-performance, full-text indexing and search capabilities within the database
environment. It allows users to efficiently store, index, and query large
volumes of unstructured or semi-structured textual data, such as documents,
emails, web pages, and other text-based content.

Key features of Oracle Text
include:
- Full-Text Indexing: Creates specialized indexes to facilitate rapid
search and retrieval of text data.
- Text Searching: Supports various search
techniques, including keyword searches, phrase searches, and proximity
searches.
- Language Support: Handles multiple languages and character sets,
offering language-specific stemming and stopping.
- Content Classification:
Enables categorization and filtering of text data based on content.
-
Integration: Seamlessly integrates with Oracle Database, allowing for combined
structured and unstructured data management.

Oracle Text is particularly useful
for applications requiring complex search capabilities, such as content
management systems, document repositories, customer support systems, and more.

PL/SQL procedure successfully completed.

さいごに

いかがでしたでしょうか?
非常に簡単な手順で生成AIに対する問い合わせができました。
生成AIに関する記事は随時更新予定です。是非次回もご覧ください。

Oracle Database 23aiも得意な当社にDatabaseの設計・構築・バックアップリカバリーをお任せください!
お問い合わせはこちら

投稿者プロフィール

宮井 聡
宮井 聡
Oracle Database、Oracle Cloud、生成AIに関するエンジニア兼プリセールスなどを担当しています。
社内のOCI検証チームのとりまとめやAI検証チームの技術リーダーをしています。
資格はOracle Cloud Infrastructure Architect Professional 2023等を取得しています