フォーム読み込み中
RAGは実装だけでなく、データの取り込みや更新等の運用がハードルになりがちです。データの置き場所がオンプレミス、ファイル、別データベース等環境が違うほど、移行や同期の手間が増えます。
Oracle APEX + Oracle Databaseなら、RAGに必要な処理を画面操作中心に実装できるため、何百行ものコードを書く必要がないのが強みです。
そこで本記事では、Oracle APEX 24.2で追加された機能を活用し、RAGアプリの主要部分を「画面設定+最小限のSQL」で組み立てる方法を紹介します。実際にCSVファイルからFAQデータを取り込み、APEX上でAIチャット画面を作成するまでの流れをハンズオン形式でまとめます。
「RAGを使ったアプリって、ローコードツールを使うとこんなに手軽に作れるんだ!」という感動を、ぜひ皆さまも体験してみてください。
※社内データの取り扱いは各社ポリシーに従ってください。
Oracle APEXは、ウェブブラウザー上の直感的な操作だけで、本格的な業務アプリを作成できるローコード開発プラットフォームです。Oracle Databaseと密接に連携しているため、データベースを中心に「画面」「処理」「データ」をまとめて構築しやすいのが特徴的です。
データ入力画面から一覧表、そして今回構築する「AIチャット画面」まで、すべて1つのプラットフォーム上で完結できるのが大きな魅力です。
社内FAQを基に、ユーザーの質問に回答してくれるチャットボットを作成していきます。
図の通り、仕組みは大きく2つのフェーズに分かれます。
通常、上記RAGアプリの仕組みを構築するためには、複雑なコード実装が必要となります。しかし、今回はOracle APEX 24.2の標準機能を使って、簡単にRAGアプリを構築していく手順をご紹介します。
完成イメージを紹介します。
下の例のように、ユーザーが入力した質問内容について、生成AIが関連する内容をFAQデータから検索し回答を生成します。
以降の章では、この画面ができるまでの手順を順番に解説します。
※画面はサンプルです、回答内容はモデルや設定により変動します。
ここでのポイントは、通常の文字列に加えてOracle Databaseの「VECTOR(ベクトル)型」の列を1つ追加するという点です。
実行しているコード(本ブログ例)
CREATE TABLE faq_docs(
id NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
question VARCHAR2(4000),
answer VARCHAR2(4000),
content_vector VECTOR
);
次に、テキストのベクトル化やチャット回答を行ってくれる生成AIモデルをAPEXに連携させます。
テーブルとAIの準備ができたら、社内FAQデータ(CSV形式)をデータベースに取り込みます。
APEX標準の[Shared Components]>[Data Load Definitions]機能を使うと、画面の案内に従うだけで、CSVの読み込みからテーブル保存までを行う画面が自動生成されます。これで、担当者自身がFAQデータをアップロードできる「管理画面」が完成します。
AIの検索(RAG)を機能させるには、取り込んだテキストをベクトル化して、ベクトル列に格納する必要があります。そこで、CSVを取り込んだ後に、自動的にベクトル化を行う処理が走るように設定します。
実行しているコード(本ブログ例)
DECLARE
v_vector VECTOR;
v_text CLOB;
BEGIN
FOR rec IN (
SELECT id, question, answer
FROM faq_docs
WHERE content_vector IS NULL
) LOOP
v_text := TO_CLOB(rec.question) || CHR(10) || TO_CLOB(rec.answer);
v_vector := APEX_AI.GET_VECTOR_EMBEDDINGS(
p_value => v_text,
p_service_static_id => 'oci_genai_embed' -- 第1章で作成したベクトル化用AIのStaticIDを記入
);
UPDATE faq_docs SET content_vector = v_vector WHERE id = rec.id;
END LOOP;
COMMIT;
END;
ここで活躍するのが、APEX 24.2で追加された関数「APEX_AI.GET_VECTOR_EMBEDDINGS」です。
以前はAIを呼び出す複雑なプログラムが必要でしたが、APEX 24.2ではこの関数を1行記述するだけでベクトル化を実行できます。データが追加されると第1章で登録した「Vector Provider」を使って、空っぽだったベクトル列を次々と埋めます。
※データ件数が多い場合は、バックグランド処理も検討してください。
「CSVをドラッグ&ドロップするだけで、RAGデータとして蓄積される」という処理を簡単に実装することができます。
RAGの頭脳となる生成AIの設定は、「AI構成(AI Configurations)」を使って、画面上から直感的に設定していきます。
[Shared Components]>[AI Configurations]から新規作成します。
システムプロンプトを設定したら、一度「Create(作成)」を押します。
下部の「RAG Sources」から検索処理を追加します。Source Typeに「SQL Query」を選択し、以下のSQLを貼り付けます。
入力するコード(本ブログ例)
WITH q_vector AS (
SELECT APEX_AI.GET_VECTOR_EMBEDDINGS(
p_value => :APEX$AI_LAST_USER_PROMPT,
p_service_static_id => 'oci_genai_embed’
) AS vec
FROM dual
WHERE :APEX$AI_LAST_USER_PROMPT IS NOT NULL
)
SELECT
'Q: ' || d.question || chr(10) ||
'A: ' || d.answer AS context
FROM faq_docs d
CROSS JOIN q_vector q
WHERE d.content_vector IS NOT NULL
ORDER BY VECTOR_DISTANCE(d.content_vector, q.vec) ASC
FETCH FIRST 3 ROWS ONLY
APEXは「:APEX$AI_LAST_USER_PROMPT」という変数で、ユーザーの質問を自動で受け取ってくれます。これを使うことでユーザーの質問に応じて検索対象を動的に絞るSQLを書くことができます。
※SQL Queryの結果は必要な列だけ抽出し、件数を絞ることをおすすめします。
裏側のAI設定が完了したので、最後にユーザーが操作するチャット画面を作ります。
新規ページを作成し、ページ・デザイナーで以下3つのアイテムを配置します。
送信ボタン(BTN_OPEN_AI)に「動的アクション」を設定します。
この設定だけでボタン押下時に次の処理が一連で実行されます。
本記事では、Oracle APEX 24.2で追加された機能を活用して、RAGアプリを短期間で構築する方法を紹介しました。
今回紹介した内容はAPEX 24.2の機能のほんの一部です。他にもまだ紹介しきれていない便利な機能がたくさんありますので、ぜひ皆さんも実際に触って、新しい活用方法を探してみてください!
この記事が、皆さんの開発現場におけるAI活用のヒントになれば幸いです。
条件に該当するページがございません