■ はじめに
こんにちは。今日は、OCI Data Catalog 第3回です。
OCI Data Catalogシリーズでは、これまでObject Storage上のデータや文書を、どのように見つけ、管理し、AIから利用できるようにするかを段階的に検証してきました。
| 回 | 内容 |
|---|---|
| 第1回 | Object Storage上のCSV、ParquetファイルをOCI Data Catalogへハーベスト |
| 第2回 | Oracle DatabaseマニュアルPDFと文書インベントリParquetを使用し、文書名、製品バージョン、公式URL、Object Storage上の保存場所などをカタログ化 |
| 第3回 | カタログ化したObject Storage上のPDFをSelect AI with RAGで検索 |
第2回までの検証で、Object Storage上にどのようなOracle Databaseマニュアルがあり、どの製品バージョンや文書カテゴリに属しているのかを、OCI Data Catalogから検索できるようになりました。
ただし、カタログから対象文書を見つけることができても、PDF本文の中から必要な情報を探すには、実際に文書を開いて読み進める必要があります。
一方、RAGだけを構築しても、検索対象がどの製品、バージョン、文書カテゴリに属し、どのOracle公式URLに対応しているのかが管理されていなければ、回答の根拠を確認しにくくなります。
つまり、今回の構成では役割が分かれます。
OCI Data Catalog
信頼できる文書を見つける・管理する
↓
OCI Object Storage
PDFの実体とMetadataを保存する
↓
Select AI with RAG
PDF本文を検索して回答を生成する
Data Catalogが「どの文書を使うか」を管理し、Select AI with RAGが「文書に何が書かれているか」へ回答する構成です。
そこで今回は、第2回でカタログ化した4つのOracle AI Database 26aiマニュアルPDFをAutonomous AI Databaseへ取り込み、本文抽出、チャンク分割、Embedding生成、Vector Storeへの格納を行います。
さらに、SELECT AI NARRATEによる自然言語での問い合わせ、対象文書に存在しない質問のNegative Test、Oracle公式URLのSources表示まで確認します。
実際に試してみると、正しい文書がSourcesへ表示されることと、生成された回答本文が完全に正しいことは、別々に評価する必要があることも分かりました。
ということで今回は、OCI Data Catalogで管理しているOracle AI Database 26aiマニュアルPDFを使用し、Select AI with RAGを構築してみてみます。
検証日
2026年8月6日
OCI Generative AIの利用可能モデルやリージョンは変更されることがあるため、実施時点の公式ドキュメントを確認してください。
■ Agenda
-
1. 今回の構成
-
2. 使用するOCIリソース
-
3. 事前準備
-
4. OCI Data Catalogで対象PDFを確認
-
5. IAMを設定
-
6. Autonomous AI Databaseを設定
-
7. Select AI Profileを作成
-
8. PDFからVector Indexを作成
-
9. Select AI Profileを有効化
-
10. Select AI with RAGで問い合わせ
-
11. Oracle公式URLをSourcesへ表示
-
12. PDFを追加・更新
-
13. RAGの回答品質とSourcesを確認
-
14. RAGチューニングの概要と精度調整の考え方
-
15. トラブルシューティング
-
16. セキュリティ上の考慮点
-
17. リソースを削除
-
18. まとめ
■ 今回の構成
● OCI Data CatalogとSelect AI with RAGの役割
今回の構成では、OCI Data CatalogとSelect AI with RAGを次のように使い分けます。
| サービス | 今回の役割 |
|---|---|
| OCI Data Catalog | 文書名、製品バージョン、公式URL、Object Storage URIなどを検索・管理 |
| OCI Object Storage | Oracle AI DatabaseマニュアルPDFの実体とRAG用Metadataを保存 |
| Autonomous AI Database 26ai | PDF本文の抽出、チャンク分割、Vector Store、検索処理 |
| OCI Generative AI | Embedding生成と回答生成 |
| Select AI | SQLから自然言語でRAGを実行 |
ここで重要なのは、Select AI with RAGがOCI Data Catalogのカタログを直接検索するわけではないという点です。
DBMS_CLOUD_AI.CREATE_VECTOR_INDEXへ渡すのはData CatalogのAssetではなく、Object Storage URIです。
OCI Data Catalogは、対象文書の発見、バージョン管理、公式URLの管理などに使用します。RAG実行時は、Object Storage上のPDFをAutonomous AI Databaseが直接読み込みます。
Select AI with RAGでは、Object Storage上のPDFなどからテキストを抽出してチャンクへ分割し、Embeddingを生成してOracle Database内のVector Storeへ格納できます。
SELECT AI NARRATEの実行時には、質問をベクトル化して関連チャンクを検索し、取得したコンテキストをLLMへ渡して回答を生成します。
参考: Use Select AI with Retrieval Augmented Generation
● 構成イメージ
● Data CatalogとRAGの処理フロー
1) 文書を探す
OCI Data Catalogで、製品バージョンや文書カテゴリを条件に対象マニュアルを検索します。
2) Object Storage URIを確認する
文書インベントリから、PDFが保存されているObject Storage URIを確認します。
3) PDFをVector Indexへ登録する
Autonomous AI DatabaseのDBMS_CLOUD_AI.CREATE_VECTOR_INDEXを使用して、Object Storage上のPDFをベクトル化します。
4) Select AIで問い合わせる
SELECT AI NARRATEを使用して、Oracle AI Databaseマニュアルの内容について問い合わせます。
■ 使用するOCIリソース
今回使用した主なリソースです。
| 項目 | 設定値 |
|---|---|
| Object Storageリージョン | ap-tokyo-1 |
| Autonomous AI Databaseリージョン | ap-tokyo-1 |
| OCI Generative AIリージョン | ap-osaka-1 |
| Compartment | <compartment-name> |
| Bucket | oracle-database-doc-catalog |
| PDF保存Prefix | documents/oracle-database/26ai/ |
| Autonomous AI Database | <Autonomous-AI-Database-name> |
| Database User | RAG_USER |
| Dynamic Group | <dynamic-group-name> |
| Select AI Profile | OCI_DB_MANUAL_RAG |
| Vector Index | OCI_DB_MANUAL_IDX |
| Chat Model | cohere.command-a-03-2025 |
| Embedding Model | cohere.embed-v4.0 |
| Embedding次元 | 1536 |
2026年8月6日時点では、Japan Central(Osaka)でCohere Command AとCohere Embed 4を利用できます。
Cohere Embed 4のモデルIDはcohere.embed-v4.0で、出力次元として256、512、1024、1536を使用できます。今回は1536次元を使用します。
参考:
本構成では、Object StorageとAutonomous AI DatabaseをTokyo、OCI Generative AIをOsakaに配置しています。
RAGで取得されたチャンクは、回答生成時に指定したOCI Generative AIリージョンのモデルへ送信されます。データ配置やリージョン要件がある環境では、利用するモデルとリージョンを事前に確認します。
■ 事前準備
● Autonomous AI Database 26ai
今回使用するSelect AI with RAGは、Autonomous AI Database 26aiを前提とします。
参考: Use Select AI with Retrieval Augmented Generation
● 使用するPDF
第2回でObject Storageへ配置した、次のOracle AI Database 26aiマニュアルを使用します。
| 文書 | Object Storage Object名 |
|---|---|
| Database Administrator's Guide | documents/oracle-database/26ai/admin/database-administrators-guide.pdf |
| Oracle Database Concepts | documents/oracle-database/26ai/concepts/database-concepts.pdf |
| Oracle AI Database Installation Guide for Linux | documents/oracle-database/26ai/installation_linux/oracle-ai-database-installation-guide-linux.pdf |
| AI Vector Search User's Guide | documents/oracle-database/26ai/vector_search/ai-vector-search-users-guide.pdf |
Object Storage上の配置です。
documents/
└── oracle-database/
└── 26ai/
├── admin/
│ └── database-administrators-guide.pdf
├── concepts/
│ └── database-concepts.pdf
├── installation_linux/
│ └── oracle-ai-database-installation-guide-linux.pdf
└── vector_search/
└── ai-vector-search-users-guide.pdf
ファイル名はASCII文字にする
Select AI with RAGでは、マルチバイト文字を含むファイル名は取り込み時にスキップされる場合があります。
そのため、PDF本文の言語にかかわらず、Object Storage上のファイル名とPrefixはASCII文字にします。
例えば、次のようなファイル名は避けます。
Oracleデータベース管理者ガイド.pdf
次のようなファイル名にします。
database-administrators-guide.pdf
また、Select AI with RAGのObject Storage入力で使用できる文書形式として、PDF、DOC、JSON、XML、HTMLなどがあります。
第2回で作成したParquet形式の文書インベントリはData Catalogでの検索・管理に使用し、RAGの入力にはPDFを使用します。
■ OCI Data Catalogで対象PDFを確認
OCI Data Catalogを開き、第2回で登録した文書インベントリから、今回RAGで使用する文書を検索します。
例えば、次の条件を使用します。
| 条件 | 値 |
|---|---|
| Product | Oracle AI Database |
| Product Version | 26ai |
| Document Category | AI Vector Search |
| File Type |
対象文書のCustom Propertyや文書インベントリから、次の値を確認します。
- 文書名
- 製品バージョン
- 文書カテゴリ
- Oracle公式URL
- Object Storage URI
- Object Storage Object Name
今回使用するObject Storage Prefixです。
documents/oracle-database/26ai/
・ OCI Data CatalogでProduct Version = 26aiを条件に検索結果

・ AI Vector Search User's Guideの文書名、公式URL、Object Storage URIを表示した画面

■ IAMを設定
Autonomous AI Databaseから、次のOCIサービスへアクセスできるようにします。
- OCI Object Storage
- OCI Generative AI Chat
- OCI Generative AI Text Embedding
今回はAPI Keyなどの固定CredentialをDatabaseへ保存せず、Autonomous AI DatabaseのResource Principalを使用します。
● Dynamic Groupを作成
OCI ConsoleでDynamic Groupを作成します。
| 項目 | 設定例 |
|---|---|
| Name | <dynamic-group-name> |
| Description | Dynamic group for Select AI with RAG |
Matching Ruleには、Autonomous AI DatabaseのOCIDを指定します。
resource.id = '<Autonomous-AI-Database-OCID>'
Identity Domainを使用する環境では、後続のPolicyでDomain名を含むDynamic Group名を指定します。
参考: Use Resource Principal to Access Oracle Cloud Infrastructure Resources
・ Dynamic GroupとMatching Ruleを表示した画面

● IAM Policyを作成
Object StorageとOCI Generative AIへのアクセス権限を付与します。
Identity Domain名を含める場合は、次の形式を使用します。
<identity-domain-name>/<dynamic-group-name>
Policy例です。
Allow dynamic-group <identity-domain-name>/<dynamic-group-name> to read buckets in compartment <compartment-name>
Allow dynamic-group <identity-domain-name>/<dynamic-group-name> to read objects in compartment <compartment-name> where target.bucket.name = 'oracle-database-doc-catalog'
Allow dynamic-group <identity-domain-name>/<dynamic-group-name> to use generative-ai-chat in compartment <compartment-name>
Allow dynamic-group <identity-domain-name>/<dynamic-group-name> to use generative-ai-text-embedding in compartment <compartment-name>
Allow dynamic-group <identity-domain-name>/<dynamic-group-name> to inspect generative-ai-model in compartment <compartment-name>
Default Identity Domainなど、Domain名を省略できる環境では次のように記述します。
Allow dynamic-group <dynamic-group-name> to read buckets in compartment <compartment-name>
Allow dynamic-group <dynamic-group-name> to read objects in compartment <compartment-name> where target.bucket.name = 'oracle-database-doc-catalog'
Allow dynamic-group <dynamic-group-name> to use generative-ai-chat in compartment <compartment-name>
Allow dynamic-group <dynamic-group-name> to use generative-ai-text-embedding in compartment <compartment-name>
Allow dynamic-group <dynamic-group-name> to inspect generative-ai-model in compartment <compartment-name>
Object StorageとOCI Generative AIが異なるCompartmentにある場合は、それぞれのCompartmentを指定してPolicyを作成します。
Data CatalogはRAG実行時の直接のアクセス先ではないため、Autonomous AI DatabaseにData Catalogの参照権限を追加する必要はありません。
■ Autonomous AI Databaseを設定
以降のSQLは、Autonomous AI Databaseへ接続したSQLclから実行します。
Database ActionsのSQL Worksheetでも、同じSQLを実行できます。
● RAG用Database Userを作成
既存ユーザーを使用する場合、この作成処理は省略します。
ADMINユーザーで実行します。
CREATE USER RAG_USER
IDENTIFIED BY "<RAG_USER-password>";
GRANT CREATE SESSION, CREATE TABLE TO RAG_USER;
ALTER USER RAG_USER QUOTA 10G ON DATA;
GRANT EXECUTE ON DBMS_CLOUD TO RAG_USER;
GRANT EXECUTE ON DBMS_CLOUD_AI TO RAG_USER;
GRANT EXECUTE ON DBMS_CLOUD_PIPELINE TO RAG_USER;
DBMS_CLOUD.LIST_OBJECTSを実行するため、DBMS_CLOUDのEXECUTE権限も付与します。
Vector Indexの作成時には、RAG_USER Schema内にVector Tableなどが作成されます。
● Resource Principalを有効化
最初に、ADMIN SchemaでResource Principal Credentialが作成済みか確認します。
SELECT
owner,
credential_name
FROM
dba_credentials
WHERE
credential_name = 'OCI$RESOURCE_PRINCIPAL'
AND owner = 'ADMIN';
結果が0件の場合は、ADMINユーザーでResource Principalを有効化します。
BEGIN
DBMS_CLOUD_ADMIN.ENABLE_RESOURCE_PRINCIPAL();
END;
/
続いて、RAG_USERからResource Principalを使用できるようにします。
BEGIN
DBMS_CLOUD_ADMIN.ENABLE_RESOURCE_PRINCIPAL(
username => 'RAG_USER'
);
END;
/
権限を確認します。
SELECT
grantee,
table_schema,
table_name,
privilege,
grantor
FROM
all_tab_privs
WHERE
grantee = 'RAG_USER'
AND table_name = 'OCI$RESOURCE_PRINCIPAL'
AND table_schema = 'ADMIN';
GRANTEE TABLE_SCHEMA TABLE_NAME PRIVILEGE GRANTOR
--------- -------------- ------------------------- ----------- -------
RAG_USER ADMIN OCI$RESOURCE_PRINCIPAL EXECUTE ADMIN
Resource Principal Tokenは2時間キャッシュされます。
そのため、IAM PolicyやDynamic Groupを変更した直後は、変更内容が反映されるまで最大2時間かかる場合があります。
参考: Use Resource Principal to Access Oracle Cloud Infrastructure Resources
● Object Storageへのアクセスを確認
以降はRAG_USERで実行します。
今回のPDFは、26ai直下の文書カテゴリごとに分かれています。
documents/oracle-database/26ai/<document-category>/*.pdf
DBMS_CLOUD.LIST_OBJECTSでは、URI内のファイル名とサブフォルダに*または?のWildcardを使用できます。
次のSQLで、4カテゴリ配下のPDFをまとめて確認します。
SELECT
object_name,
bytes,
last_modified
FROM
DBMS_CLOUD.LIST_OBJECTS(
credential_name => 'OCI$RESOURCE_PRINCIPAL',
location_uri => 'https://objectstorage.ap-tokyo-1.oraclecloud.com/n/<namespace>/b/oracle-database-doc-catalog/o/documents/oracle-database/26ai/*/*.pdf'
)
ORDER BY
object_name;
OBJECT_NAME BYTES LAST_MODIFIED
------------------------------------------------------------------------ ---------- --------------------------------------
admin/database-administrators-guide.pdf 9975856 01-AUG-26 03.54.26.979000000 AM GMT
concepts/database-concepts.pdf 13348414 01-AUG-26 03.54.27.797000000 AM GMT
installation_linux/oracle-ai-database-installation-guide-linux.pdf 1138151 01-AUG-26 03.54.26.557000000 AM GMT
vector_search/ai-vector-search-users-guide.pdf 6013363 01-AUG-26 03.54.26.890000000 AM GMT
4つのPDFを1回のSQLで取得できました。
参考: DBMS_CLOUD LIST_OBJECTS Function
■ Select AI Profileを作成
DBMS_CLOUD_AI.CREATE_PROFILEを使用して、OCI Generative AIへ接続するSelect AI Profileを作成します。
今回は次のモデルを使用します。
| 用途 | モデル |
|---|---|
| 回答生成 | cohere.command-a-03-2025 |
| Embedding生成 | cohere.embed-v4.0 |
| Embedding次元 | 1536 |
BEGIN
DBMS_CLOUD_AI.CREATE_PROFILE(
profile_name => 'OCI_DB_MANUAL_RAG',
attributes => q'~{
"provider": "oci",
"credential_name": "OCI$RESOURCE_PRINCIPAL",
"region": "ap-osaka-1",
"oci_compartment_id": "<OCI-Generative-AI-Compartment-OCID>",
"model": "cohere.command-a-03-2025",
"embedding_model": "cohere.embed-v4.0",
"vector_index_name": "OCI_DB_MANUAL_IDX",
"temperature": 0.1,
"max_tokens": 2000,
"enable_custom_source_uri": false,
"role": "You are an assistant for Oracle Database documentation.",
"additional_instructions": "Answer in Japanese. Use only the retrieved documents as evidence. If the answer cannot be confirmed from the retrieved documents, explicitly say that it cannot be confirmed. Do not invent product specifications."
}~',
status => 'ENABLED',
description => 'RAG profile for Oracle Database manuals in OCI Object Storage'
);
END;
/
PL/SQL procedure successfully completed.
主なAttributeです。
| Attribute | 説明 |
|---|---|
provider |
OCI Generative AIを使用するためociを指定 |
credential_name |
Resource Principal Credential |
region |
OCI Generative AIモデルを使用するリージョン |
oci_compartment_id |
OCI Generative AIを使用するCompartment OCID |
model |
回答生成用Chat Model |
embedding_model |
Embedding生成用Model |
vector_index_name |
後続で作成するVector Index |
temperature |
回答のばらつきを抑えるため0.1
|
max_tokens |
回答生成時の最大Token数として2000を指定 |
enable_custom_source_uri |
最初はObject Storage URIをSourcesに表示 |
role |
LLMへ与える役割 |
additional_instructions |
日本語回答、取得文書のみを根拠とする指示 |
● Select AI Profileを確認
SELECT
profile_name,
status,
description
FROM
user_cloud_ai_profiles
WHERE
profile_name = 'OCI_DB_MANUAL_RAG';
PROFILE_NAME STATUS DESCRIPTION
------------------- --------- ---------------------------------------------------------------
OCI_DB_MANUAL_RAG ENABLED RAG profile for Oracle Database manuals in OCI Object Storage
Attributeを確認します。
SELECT
attribute_name,
DBMS_LOB.SUBSTR(attribute_value, 200, 1) AS attribute_value
FROM
user_cloud_ai_profile_attributes
WHERE
profile_name = 'OCI_DB_MANUAL_RAG'
ORDER BY
attribute_name;
ATTRIBUTE_NAME ATTRIBUTE_VALUE
___________________________ ___________________________________________________________________________________________________________________________________________________________________________________________________________
additional_instructions Answer in Japanese. Use only the retrieved documents as evidence. If the answer cannot be confirmed from the retrieved documents, explicitly say that it cannot be confirmed. Do not invent product spec
credential_name OCI$RESOURCE_PRINCIPAL
embedding_model cohere.embed-v4.0
enable_custom_source_uri false
max_tokens 2000
model cohere.command-a-03-2025
oci_compartment_id <OCI-Generative-AI-Compartment-OCID>
provider oci
region ap-osaka-1
role You are an assistant for Oracle Database documentation.
temperature 0.1
vector_index_name OCI_DB_MANUAL_IDX
12 rows selected.
DBMS_LOB.SUBSTR(attribute_value, 200, 1)を指定しているため、
長いAttribute値は先頭200文字まで表示されます。
■ PDFからVector Indexを作成
DBMS_CLOUD_AI.CREATE_VECTOR_INDEXを使用し、Object Storage上の4つのPDFからVector Indexを作成します。
● Vector Indexの設定内容
| Attribute | 設定値 | 説明 |
|---|---|---|
vector_db_provider |
oracle |
Oracle Database内へVectorを格納 |
location |
26ai/*/*.pdf |
26ai直下の各カテゴリにあるPDFを対象 |
object_storage_credential_name |
OCI$RESOURCE_PRINCIPAL |
Object Storageへの認証 |
profile_name |
OCI_DB_MANUAL_RAG |
Embedding生成に使用するProfile |
vector_dimension |
1536 |
Cohere Embed 4の出力次元 |
vector_distance_metric |
cosine |
Cosine Distanceを使用 |
chunk_size |
1024 |
1チャンクの文字数 |
chunk_overlap |
128 |
前後チャンクの重複文字数 |
match_limit |
5 |
質問ごとに取得する上位チャンク数 |
refresh_rate |
1440 |
Object Storageを再確認する間隔、単位は分 |
wait_for_completion |
TRUE |
初回取り込みが完了するまで処理を待機 |
PDF数が多く、SQL Client側の接続時間を考慮する場合は、次のようにバックグラウンド実行できます。
wait_for_completion => FALSE
● Vector Index作成
DBMS_CLOUD.LIST_OBJECTSで正常に取得できたWildcard URIを、locationにも使用します。
BEGIN
DBMS_CLOUD_AI.CREATE_VECTOR_INDEX(
index_name => 'OCI_DB_MANUAL_IDX',
attributes => q'~{
"vector_db_provider": "oracle",
"location": "https://objectstorage.ap-tokyo-1.oraclecloud.com/n/<namespace>/b/oracle-database-doc-catalog/o/documents/oracle-database/26ai/*/*.pdf",
"object_storage_credential_name": "OCI$RESOURCE_PRINCIPAL",
"profile_name": "OCI_DB_MANUAL_RAG",
"vector_dimension": 1536,
"vector_distance_metric": "cosine",
"chunk_size": 1024,
"chunk_overlap": 128,
"match_limit": 5,
"refresh_rate": 1440
}~',
status => 'ENABLED',
description => 'Oracle Database 26ai manual PDF index for Select AI RAG',
wait_for_completion => TRUE
);
END;
/
PL/SQL procedure successfully completed.
● Vector Indexを確認
wait_for_completion => TRUEを指定したため、初回取り込みの完了後に処理が戻りました。
Vector IndexとPipelineの状態を確認します。
SELECT
index_name,
status,
description
FROM
user_cloud_vector_indexes
WHERE
index_name = 'OCI_DB_MANUAL_IDX';
INDEX_NAME STATUS DESCRIPTION
-------------------- --------- --------------------------------------------------------
OCI_DB_MANUAL_IDX ENABLED Oracle Database 26ai manual PDF index for Select AI RAG
Attributeを確認します。
SELECT
attribute_name,
DBMS_LOB.SUBSTR(attribute_value, 200, 1) AS attribute_value
FROM
user_cloud_vector_index_attributes
WHERE
index_name = 'OCI_DB_MANUAL_IDX'
ORDER BY
attribute_name;
ATTRIBUTE_NAME ATTRIBUTE_VALUE
_________________________________ _________________________________________________________________________________________________________________________________________
chunk_overlap 128
chunk_size 1024
location https://objectstorage.ap-tokyo-1.oraclecloud.com/n/<namespace>/b/oracle-database-doc-catalog/o/documents/oracle-database/26ai/*/*.pdf
match_limit 5
object_storage_credential_name OCI$RESOURCE_PRINCIPAL
pipeline_name OCI_DB_MANUAL_IDX$VECPIPELINE
profile_name OCI_DB_MANUAL_RAG
refresh_rate 1440
vector_db_provider oracle
vector_dimension 1536
vector_distance_metric cosine
11 rows selected.
● Vector Pipelineを確認
Vector Indexを作成すると、次の名前のPipelineが作成されました。
OCI_DB_MANUAL_IDX$VECPIPELINE
PipelineのStatusを確認します。
SELECT
pipeline_name,
pipeline_type,
status
FROM
user_cloud_pipelines
WHERE
pipeline_name = 'OCI_DB_MANUAL_IDX$VECPIPELINE';
PIPELINE_NAME PIPELINE_TYPE STATUS
-------------------------------- --------------- --------
OCI_DB_MANUAL_IDX$VECPIPELINE VECTOR_INDEX STARTED
USER_CLOUD_PIPELINES.STATUS = STARTEDは、
Pipelineが開始済みで、今後もスケジュール実行できる状態であることを示します。
Pipelineの実行履歴を確認します。
SELECT
pipeline_id,
pipeline_name,
status,
error_message
FROM
user_cloud_pipeline_history
WHERE
pipeline_name = 'OCI_DB_MANUAL_IDX$VECPIPELINE'
ORDER BY
pipeline_id DESC;
PIPELINE_ID PIPELINE_NAME STATUS ERROR_MESSAGE
------------- -------------------------------- ----------- -------------
3 OCI_DB_MANUAL_IDX$VECPIPELINE SUCCEEDED
初回のVector Store作成処理が正常終了したことは、
USER_CLOUD_PIPELINE_HISTORYの最新実行が
SUCCEEDEDであることから確認します。
● Vector Tableを確認
今回のCREATE_VECTOR_INDEXではvector_table_nameを明示していません。
そのため、次のデフォルト名でVector Tableが作成されました。
OCI_DB_MANUAL_IDX$VECTAB
Tableを確認します。
SELECT
table_name
FROM
user_tables
WHERE
table_name = 'OCI_DB_MANUAL_IDX$VECTAB';
TABLE_NAME
---------------------------
OCI_DB_MANUAL_IDX$VECTAB
登録されたチャンク数を確認します。
SELECT
COUNT(*) AS chunk_count
FROM
OCI_DB_MANUAL_IDX$VECTAB;
CHUNK_COUNT
-----------
9590
4つのOracle AI Database 26aiマニュアルから、9,590件のチャンクが登録されました。
文書ごとのチャンク数も確認できます。
SELECT
JSON_VALUE(attributes, '$.object_name') AS object_name,
COUNT(*) AS chunk_count
FROM
OCI_DB_MANUAL_IDX$VECTAB
GROUP BY
JSON_VALUE(attributes, '$.object_name')
ORDER BY
object_name;
OBJECT_NAME CHUNK_COUNT
_____________________________________________________________________ ______________
admin/database-administrators-guide.pdf 4586
concepts/database-concepts.pdf 2386
installation_linux/oracle-ai-database-installation-guide-linux.pdf 733
vector_search/ai-vector-search-users-guide.pdf 1885
Vector Tableの構造を確認します。
DESC OCI_DB_MANUAL_IDX$VECTAB
Name Null? Type
------------- -------- ----------------------
CONTENT CLOB
ATTRIBUTES JSON
EMBEDDING VECTOR(1536,*,DENSE)
各列の役割です。
| 列 | 内容 |
|---|---|
CONTENT |
PDFから抽出して分割された本文 |
ATTRIBUTES |
ファイル名、Object Storage URI、OffsetなどのSource情報 |
EMBEDDING |
本文から生成された1536次元のEmbedding Vector |
登録されたチャンクの一部を確認します。
SELECT
JSON_VALUE(attributes, '$.object_name') AS object_name,
DBMS_LOB.SUBSTR(content, 300, 1) AS content
FROM
OCI_DB_MANUAL_IDX$VECTAB
WHERE
DBMS_LOB.GETLENGTH(content) > 0
FETCH FIRST 3 ROWS ONLY;
OBJECT_NAME CONTENT
__________________________________________ ____________________________________________________________________________________________________________________________
admin/database-administrators-guide.pdf
Database Administrator's Guide
Oracle® AI Database
Database Administrator's Guide
26ai
G42927-08
July 2026
Oracle AI Database Database Administrator's Guide, 26ai
G42927-08
Copyright © 1996, 2026, Oracle and/or its affiliates.
Primary Author: Mark Dor
admin/database-administrators-guide.pdf eck, S. Hase, W. Hu, P. Huey, K. Inoue, M. Ito, C. Iyer, K. Itikarlapalli, P. Jaganath, S. Jain, C. Jones, S.
Joshi, B. Khaladkar, F. Kobylanski, B. Krishnan, V. Krishnaswamy, A. Kruglikov, B. Kuchibhotla, V. Kuhr, R. Kumar, S.
Kumar, V. Kumar, H. Lakshmanan, A. Lee, B. Lee, J. Lee, S. K. Le
admin/database-administrators-guide.pdf
This software or hardware is developed for general use in a variety of information management applications. It is not
developed or intended for use in any inherently dangerous applications, including applications that may create a risk of
personal injury. If you use this software or hardw
SQL>
■ Select AI Profileを有効化
現在のSessionで使用するSelect AI Profileを設定します。
BEGIN
DBMS_CLOUD_AI.SET_PROFILE(
profile_name => 'OCI_DB_MANUAL_RAG'
);
END;
/
PL/SQL procedure successfully completed.
現在のProfileを確認します。
SELECT
DBMS_CLOUD_AI.GET_PROFILE() AS current_profile
FROM
dual;
CURRENT_PROFILE
---------------------------------
"RAG_USER"."OCI_DB_MANUAL_RAG"
Schema名とProfile名が表示されれば設定完了です。
SET_PROFILEは現在のSessionに対する設定です。SQLclを切断して再接続した場合は、再度実行します。
■ Select AI with RAGで問い合わせ
● AI Vector Searchについて質問
AI Vector Search User's Guideの内容について質問します。
SELECT AI NARRATE
Oracle AI Vector Searchで使用できるHNSW索引とIVF索引の違いを、
索引の構造、検索特性、更新時の考慮点が分かるように日本語で説明してください。
資料に記載されていないことは推測しないでください;
回答本文に加えて、参照したPDFがSourcesへ表示されました。
RESPONSE
_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________
HNSW索引とIVF索引は、Oracle AI Vector Searchで使用できる2つの主要なベクトル索引です。以下に、それぞれの構造、検索特性、更新時の考慮点について説明します。
**HNSW索引**
- **構造**: HNSW(Hierarchical Navigable Small World)索引は、階層的なグラフ構造を持ち、複数のレイヤーで構成されています。各レイヤーは異なる解像度でデータを表現し、効率的な類似性検索を実現します。
- **検索特性**: 検索時にパーティション刈り込み(partition pruning)を使用し、該当するパーティションまたはサブパーティションのローカルHNSWグラフのみを検索することで、検索効率を向上させます。
- **更新時の考慮点**: 増分スナップショットが導入されており、最小限の頻度での更新に最適化されています。これにより、パフォーマンスとメモリ使用量のバランスが取られています。
**IVF索引**
- **構造**: IVF(Inverted File Flat)索引は、近隣パーティションまたはクラスターを使用したパーティションベースの索引です。検索領域を狭めることで効率的な検索を実現します。
- **検索特性**: 近隣パーティションやクラスターを活用して検索範囲を絞り込み、高速な類似性検索を可能にします。
- **更新時の考慮点**: IVF索引は、ベーステーブルに対する更新により品質が低下する可能性があります。しかし、自動再構成機能により、データベースが再構築の必要性を判断し、人間の手を介さずに索引を再構成できます。
Sources:
- vector_search/ai-vector-search-users-guide.pdf (https://objectstorage.ap-tokyo-1.oraclecloud.com/n/<namespace>/b/oracle-database-doc-catalog/o/documents/oracle-database/26ai/vector_search/ai-vector-search-users-guide.pdf)
この時点ではenable_custom_source_uriがfalseのため、SourcesにはObject Storage URIが表示されています。
RAG回答の内容が正しいかどうかは、Sourcesが表示されたこととは別に、マニュアル原文と照合して評価する必要があります。
● マニュアルに存在しない質問
対象文書に存在しない質問も実行します。
SELECT AI NARRATE
このマニュアル群にOCI Data Catalogの最新料金表は記載されていますか。
記載されていない場合は、推測せず「確認できません」と回答してください;
RESPONSE
_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________
確認できません。
Sources:
- vector_search/ai-vector-search-users-guide.pdf (https://objectstorage.ap-tokyo-1.oraclecloud.com/n/<namespace>/b/oracle-database-doc-catalog/o/documents/oracle-database/26ai/vector_search/ai-vector-search-users-guide.pdf)
- concepts/database-concepts.pdf (https://objectstorage.ap-tokyo-1.oraclecloud.com/n/<namespace>/b/oracle-database-doc-catalog/o/documents/oracle-database/26ai/concepts/database-concepts.pdf)
- admin/database-administrators-guide.pdf (https://objectstorage.ap-tokyo-1.oraclecloud.com/n/<namespace>/b/oracle-database-doc-catalog/o/documents/oracle-database/26ai/admin/database-administrators-guide.pdf)
Profileのadditional_instructionsに、取得文書から確認できない場合は推測しないよう指定しています。
Use only the retrieved documents as evidence.
If the answer cannot be confirmed from the retrieved documents,
explicitly say that it cannot be confirmed.
対象PDFから確認できない内容について、無理に回答を生成しないことを確認できました。
■ Oracle公式URLをSourcesへ表示
ここまでの構成では、回答のSourcesにPDFファイル名とObject Storage URIが表示されます。
第2回では、文書インベントリとOCI Data Catalogに各マニュアルのOracle公式URLを登録しました。
そこで、Data Catalogで管理しているofficial_urlと同じ値をObject StorageのCustom Metadataにも設定し、Select AI with RAGのSourcesにOracle公式URLを表示します。
● Data CatalogのCustom Propertyは直接参照されない
Select AI with RAGが参照するのは、OCI Data CatalogのCustom Propertyではありません。
Object Storage Objectに設定された次のCustom Metadataです。
customized_url_source
Object StorageのMetadata Headerとしては、次の名前で確認できます。
opc-meta-customized_url_source
今回の構成では、次のように公式URLを連携します。
OCI Data Catalog
official_url
↓
OCI Object Storage
customized_url_source
↓
Select AI with RAG
Sources
Data Catalogへ登録したofficial_urlが、自動的にObject Storage Metadataへ同期されるわけではありません。
そのため、PDFをObject StorageへUploadするときに、同じOracle公式URLをCustom Metadataとして設定します。
参考: DBMS_CLOUD_AI Package - enable_custom_source_uri
● 使用するOracle公式URL
| 文書 | Object名 | Oracle公式PDF URL |
|---|---|---|
| Database Administrator's Guide | documents/oracle-database/26ai/admin/database-administrators-guide.pdf |
https://docs.oracle.com/en/database/oracle/oracle-database/26/admin/database-administrators-guide.pdf |
| Oracle Database Concepts | documents/oracle-database/26ai/concepts/database-concepts.pdf |
https://docs.oracle.com/cd/G47991_01/cncpt/database-concepts.pdf |
| Oracle AI Database Installation Guide for Linux | documents/oracle-database/26ai/installation_linux/oracle-ai-database-installation-guide-linux.pdf |
https://docs.oracle.com/cd/G47991_01/ladbi/oracle-ai-database-installation-guide-linux.pdf |
| AI Vector Search User's Guide | documents/oracle-database/26ai/vector_search/ai-vector-search-users-guide.pdf |
https://docs.oracle.com/en/database/oracle/oracle-database/26/vecse/ai-vector-search-users-guide.pdf |
● AI Vector Search User's GuideへCustom Metadataを設定
AI Vector Search User's Guideを再Uploadし、Oracle公式URLを設定します。
oci os object put \
--region ap-tokyo-1 \
--namespace-name <namespace> \
--bucket-name oracle-database-doc-catalog \
--name documents/oracle-database/26ai/vector_search/ai-vector-search-users-guide.pdf \
--file ./ai-vector-search-users-guide.pdf \
--content-type application/pdf \
--metadata '{"customized_url_source":"https://docs.oracle.com/en/database/oracle/oracle-database/26/vecse/ai-vector-search-users-guide.pdf"}' \
--force
Uploading object [####################################] 100%
{
"etag": "c0a2d27b-6233-42c6-8feb-e774674d8ef2",
"last-modified": "Thu, 06 Aug 2026 13:14:59 GMT",
"opc-content-md5": "K+ng707ipjsI6Kncx5Redg=="
}
各指定値の役割です。
--name
Object Storage上のObject名
--file
ローカルに保存されているUpload元のPDF
customized_url_source
Sourcesへ表示するOracle公式URL
--metadataで既存Objectを再Uploadするため、Object Versioningや既存Custom Metadataの有無を確認してから実行します。
・ AI Vector Search User's GuideのCustom Metadataを確認
oci os object head \
--region ap-tokyo-1 \
--namespace-name <namespace> \
--bucket-name oracle-database-doc-catalog \
--name documents/oracle-database/26ai/vector_search/ai-vector-search-users-guide.pdf
{
"accept-ranges": "bytes",
"access-control-allow-credentials": "true",
"access-control-allow-methods": "POST,PUT,GET,HEAD,DELETE,OPTIONS",
"access-control-allow-origin": "*",
"access-control-expose-headers": "accept-ranges,access-control-allow-credentials,access-control-allow-methods,access-control-allow-origin,content-length,content-md5,content-type,date,etag,last-modified,opc-client-info,opc-client-request-id,opc-meta-customized_url_source,opc-request-id,storage-tier,strict-transport-security,version-id,x-api-id,x-content-type-options",
"content-length": "6013363",
"content-md5": "K+ng707ipjsI6Kncx5Redg==",
"content-type": "application/pdf",
"date": "Thu, 06 Aug 2026 13:17:29 GMT",
"etag": "c0a2d27b-6233-42c6-8feb-e774674d8ef2",
"last-modified": "Thu, 06 Aug 2026 13:14:59 GMT",
"opc-client-request-id": "F90C098AFB064BCBA4CB5EB1A35E3B69",
"opc-meta-customized_url_source": "https://docs.oracle.com/en/database/oracle/oracle-database/26/vecse/ai-vector-search-users-guide.pdf",
"opc-request-id": "nrt-1:5cUHjwMgd6SH6ZNR_7VeiCi_wJUDtFUeP6jkGlXv41DOScYMloQrFnBgaDMeeuqb",
"storage-tier": "Standard",
"strict-transport-security": "max-age=31536000; includeSubDomains",
"version-id": "9c89e57f-3309-453a-bd9f-94ba6e79b0e6",
"x-api-id": "native",
"x-content-type-options": "nosniff"
}
● ほかの3つのPDFにも公式URLを設定
・ Database Administrator's Guideを再Upload
oci os object put \
--region ap-tokyo-1 \
--namespace-name <namespace> \
--bucket-name oracle-database-doc-catalog \
--name documents/oracle-database/26ai/admin/database-administrators-guide.pdf \
--file documents/oracle-database/26ai/admin/database-administrators-guide.pdf \
--content-type application/pdf \
--metadata '{"customized_url_source":"https://docs.oracle.com/en/database/oracle/oracle-database/26/admin/database-administrators-guide.pdf"}' \
--force
Warning: To increase security of your API key located at <OCI-API-key-path>, append an extra line with 'OCI_API_KEY' at the end. For more information, refer to https://docs.oracle.com/iaas/Content/API/Concepts/apisigningkey.htm. To suppress the warning, set the env variable SUPPRESS_LABEL_WARNING=True
Uploading object [####################################] 100%
{
"etag": "510ef44e-30c8-445c-bba2-d14b3030c5b5",
"last-modified": "Thu, 06 Aug 2026 15:36:45 GMT",
"opc-content-md5": "ixHI/2R9n56oxPS7Bh1kzw=="
}
Custom Metadataを確認します。
oci os object head \
--region ap-tokyo-1 \
--namespace-name <namespace> \
--bucket-name oracle-database-doc-catalog \
--name documents/oracle-database/26ai/admin/database-administrators-guide.pdf
Warning: To increase security of your API key located at <OCI-API-key-path>, append an extra line with 'OCI_API_KEY' at the end. For more information, refer to https://docs.oracle.com/iaas/Content/API/Concepts/apisigningkey.htm. To suppress the warning, set the env variable SUPPRESS_LABEL_WARNING=True
{
"accept-ranges": "bytes",
"access-control-allow-credentials": "true",
"access-control-allow-methods": "POST,PUT,GET,HEAD,DELETE,OPTIONS",
"access-control-allow-origin": "*",
"access-control-expose-headers": "accept-ranges,access-control-allow-credentials,access-control-allow-methods,access-control-allow-origin,content-length,content-md5,content-type,date,etag,last-modified,opc-client-info,opc-client-request-id,opc-meta-customized_url_source,opc-request-id,storage-tier,strict-transport-security,version-id,x-api-id,x-content-type-options",
"content-length": "9975856",
"content-md5": "ixHI/2R9n56oxPS7Bh1kzw==",
"content-type": "application/pdf",
"date": "Thu, 06 Aug 2026 15:36:55 GMT",
"etag": "510ef44e-30c8-445c-bba2-d14b3030c5b5",
"last-modified": "Thu, 06 Aug 2026 15:36:45 GMT",
"opc-client-request-id": "F0182565088647F7800C3BB35106EDA4",
"opc-meta-customized_url_source": "https://docs.oracle.com/en/database/oracle/oracle-database/26/admin/database-administrators-guide.pdf",
"opc-request-id": "nrt-1:fodyhrWi1lB5AhoeT4apeZqBNOvF9TcC-6VqJU_7DdIipa3m_RkD1TPyGpKAr46i",
"storage-tier": "Standard",
"strict-transport-security": "max-age=31536000; includeSubDomains",
"version-id": "7ffb7eb5-63da-4904-bdbd-d2f9ba3c800f",
"x-api-id": "native",
"x-content-type-options": "nosniff"
}
・ Oracle Database Conceptsを再Upload
oci os object put \
--region ap-tokyo-1 \
--namespace-name <namespace> \
--bucket-name oracle-database-doc-catalog \
--name documents/oracle-database/26ai/concepts/database-concepts.pdf \
--file documents/oracle-database/26ai/concepts/database-concepts.pdf \
--content-type application/pdf \
--metadata '{"customized_url_source":"https://docs.oracle.com/cd/G47991_01/cncpt/database-concepts.pdf"}' \
--force
Uploading object [####################################] 100%
{
"etag": "43a7a090-ea69-40f3-a646-b53cf3ba9ea4",
"last-modified": "Thu, 06 Aug 2026 13:32:04 GMT",
"opc-content-md5": "J19jEmbmwV4ZjbYdydaB2A=="
}
Custom Metadataを確認します。
oci os object head \
--region ap-tokyo-1 \
--namespace-name <namespace> \
--bucket-name oracle-database-doc-catalog \
--name documents/oracle-database/26ai/concepts/database-concepts.pdf
{
"accept-ranges": "bytes",
"access-control-allow-credentials": "true",
"access-control-allow-methods": "POST,PUT,GET,HEAD,DELETE,OPTIONS",
"access-control-allow-origin": "*",
"access-control-expose-headers": "accept-ranges,access-control-allow-credentials,access-control-allow-methods,access-control-allow-origin,content-length,content-md5,content-type,date,etag,last-modified,opc-client-info,opc-client-request-id,opc-meta-customized_url_source,opc-request-id,storage-tier,strict-transport-security,version-id,x-api-id,x-content-type-options",
"content-length": "13348414",
"content-md5": "J19jEmbmwV4ZjbYdydaB2A==",
"content-type": "application/pdf",
"date": "Thu, 06 Aug 2026 13:33:57 GMT",
"etag": "43a7a090-ea69-40f3-a646-b53cf3ba9ea4",
"last-modified": "Thu, 06 Aug 2026 13:32:04 GMT",
"opc-client-request-id": "0F4A340C861641E7825BE3C72AB1CE99",
"opc-meta-customized_url_source": "https://docs.oracle.com/cd/G47991_01/cncpt/database-concepts.pdf",
"opc-request-id": "nrt-1:WwVzjFnvqJHC9fmaXDiMNQWuM_0IIElQ89km46nPxvXDd56ZhHbSiOqLvd3V9ZRd",
"storage-tier": "Standard",
"strict-transport-security": "max-age=31536000; includeSubDomains",
"version-id": "8955d553-c26e-4b06-9eec-284f31a347e2",
"x-api-id": "native",
"x-content-type-options": "nosniff"
}
・ Oracle AI Database Installation Guide for Linuxを再Upload
oci os object put \
--region ap-tokyo-1 \
--namespace-name <namespace> \
--bucket-name oracle-database-doc-catalog \
--name documents/oracle-database/26ai/installation_linux/oracle-ai-database-installation-guide-linux.pdf \
--file documents/oracle-database/26ai/installation_linux/oracle-ai-database-installation-guide-linux.pdf \
--content-type application/pdf \
--metadata '{"customized_url_source":"https://docs.oracle.com/cd/G47991_01/ladbi/oracle-ai-database-installation-guide-linux.pdf"}' \
--force
Uploading object [####################################] 100%
{
"etag": "41af6ce4-297a-4adc-a861-d65b32cf6d1f",
"last-modified": "Thu, 06 Aug 2026 13:32:12 GMT",
"opc-content-md5": "1xFCmSM/TDrK59artOh+Lw=="
}
Custom Metadataを確認します。
oci os object head \
--region ap-tokyo-1 \
--namespace-name <namespace> \
--bucket-name oracle-database-doc-catalog \
--name documents/oracle-database/26ai/installation_linux/oracle-ai-database-installation-guide-linux.pdf
{
"accept-ranges": "bytes",
"access-control-allow-credentials": "true",
"access-control-allow-methods": "POST,PUT,GET,HEAD,DELETE,OPTIONS",
"access-control-allow-origin": "*",
"access-control-expose-headers": "accept-ranges,access-control-allow-credentials,access-control-allow-methods,access-control-allow-origin,content-length,content-md5,content-type,date,etag,last-modified,opc-client-info,opc-client-request-id,opc-meta-customized_url_source,opc-request-id,storage-tier,strict-transport-security,version-id,x-api-id,x-content-type-options",
"content-length": "1138151",
"content-md5": "1xFCmSM/TDrK59artOh+Lw==",
"content-type": "application/pdf",
"date": "Thu, 06 Aug 2026 13:34:04 GMT",
"etag": "41af6ce4-297a-4adc-a861-d65b32cf6d1f",
"last-modified": "Thu, 06 Aug 2026 13:32:12 GMT",
"opc-client-request-id": "301230ADE03C48EDA537B998FC043738",
"opc-meta-customized_url_source": "https://docs.oracle.com/cd/G47991_01/ladbi/oracle-ai-database-installation-guide-linux.pdf",
"opc-request-id": "nrt-1:6I6zb5lwEBZhl6fRivBOLmjkvKZKfj1AdQ-A-MKBzGN5-r74VonbhcJ68-vZvczV",
"storage-tier": "Standard",
"strict-transport-security": "max-age=31536000; includeSubDomains",
"version-id": "d922c326-b6dc-4d63-878c-3cab52351543",
"x-api-id": "native",
"x-content-type-options": "nosniff"
}
● Select AI ProfileでCustom Source URIを有効化
Select AI Profileのenable_custom_source_uriをtrueへ変更します。
BEGIN
DBMS_CLOUD_AI.SET_ATTRIBUTE(
profile_name => 'OCI_DB_MANUAL_RAG',
attribute_name => 'enable_custom_source_uri',
attribute_value => 'true'
);
END;
/
PL/SQL procedure successfully completed.
設定結果を確認します。
SELECT
attribute_name,
DBMS_LOB.SUBSTR(attribute_value, 200, 1) AS attribute_value
FROM
user_cloud_ai_profile_attributes
WHERE
profile_name = 'OCI_DB_MANUAL_RAG'
AND attribute_name = 'enable_custom_source_uri';
ATTRIBUTE_NAME ATTRIBUTE_VALUE
-------------------------- ---------------
enable_custom_source_uri true
● Vector Indexを再作成
今回の検証では、Object Storage MetadataをVector TableのATTRIBUTESへ確実に反映するため、Vector Indexを削除して再作成しました。
現在のVector Indexを削除します。
BEGIN
DBMS_CLOUD_AI.DROP_VECTOR_INDEX(
index_name => 'OCI_DB_MANUAL_IDX',
include_data => TRUE,
force => TRUE
);
END;
/
PL/SQL procedure successfully completed.
Vector Indexを再作成します。
BEGIN
DBMS_CLOUD_AI.CREATE_VECTOR_INDEX(
index_name => 'OCI_DB_MANUAL_IDX',
attributes => q'~{
"vector_db_provider": "oracle",
"location": "https://objectstorage.ap-tokyo-1.oraclecloud.com/n/<namespace>/b/oracle-database-doc-catalog/o/documents/oracle-database/26ai/*/*.pdf",
"object_storage_credential_name": "OCI$RESOURCE_PRINCIPAL",
"profile_name": "OCI_DB_MANUAL_RAG",
"vector_dimension": 1536,
"vector_distance_metric": "cosine",
"chunk_size": 1024,
"chunk_overlap": 128,
"match_limit": 5,
"refresh_rate": 1440
}~',
status => 'ENABLED',
description => 'Oracle Database 26ai manual PDF index for Select AI RAG',
wait_for_completion => TRUE
);
END;
/
PL/SQL procedure successfully completed.
今回の環境ではenable_sourcesを明示するとORA-20048が発生するため、再作成時にも指定していません。
再作成後、4つのPDFのcustom_uriを確認します。
SELECT
object_name,
custom_uri,
CASE
WHEN custom_uri LIKE 'https://docs.oracle.com/%'
THEN 'OK'
ELSE 'NG'
END AS url_status
FROM (
SELECT DISTINCT
JSON_VALUE(
attributes,
'$.object_name'
RETURNING VARCHAR2(512)
) AS object_name,
JSON_VALUE(
attributes,
'$.custom_uri'
RETURNING VARCHAR2(2000)
) AS custom_uri
FROM
OCI_DB_MANUAL_IDX$VECTAB
)
ORDER BY
object_name;
OBJECT_NAME CUSTOM_URI URL_STATUS
_____________________________________________________________________ ________________________________________________________________________________________________________ _____________
admin/database-administrators-guide.pdf https://docs.oracle.com/en/database/oracle/oracle-database/26/admin/database-administrators-guide.pdf OK
concepts/database-concepts.pdf https://docs.oracle.com/cd/G47991_01/cncpt/database-concepts.pdf OK
installation_linux/oracle-ai-database-installation-guide-linux.pdf https://docs.oracle.com/cd/G47991_01/ladbi/oracle-ai-database-installation-guide-linux.pdf OK
vector_search/ai-vector-search-users-guide.pdf https://docs.oracle.com/en/database/oracle/oracle-database/26/vecse/ai-vector-search-users-guide.pdf OK
Pipelineの実行結果も確認します。
SELECT
pipeline_id,
pipeline_name,
status,
error_message
FROM
user_cloud_pipeline_history
WHERE
pipeline_name = 'OCI_DB_MANUAL_IDX$VECPIPELINE'
ORDER BY
pipeline_id DESC;
PIPELINE_ID PIPELINE_NAME STATUS ERROR_MESSAGE
______________ ________________________________ ____________ ________________
7 OCI_DB_MANUAL_IDX$VECPIPELINE SUCCEEDED
● Custom URIがVector Tableへ反映されたことを確認
再作成後、Vector TableのATTRIBUTES列を確認します。
SELECT
JSON_SERIALIZE(
attributes
RETURNING VARCHAR2(4000)
PRETTY
) AS attributes
FROM
OCI_DB_MANUAL_IDX$VECTAB
WHERE
JSON_SERIALIZE(attributes RETURNING VARCHAR2(4000))
LIKE '%ai-vector-search-users-guide.pdf%'
FETCH FIRST 1 ROW ONLY;
{
"object_name" : "vector_search/ai-vector-search-users-guide.pdf",
"object_size" : 6013363,
"last_modified" : "2026-08-06T13:32:21+00:00",
"location_uri" : "https://objectstorage.ap-tokyo-1.oraclecloud.com/n/<namespace>/b/oracle-database-doc-catalog/o/documents/oracle-database/26ai/",
"custom_uri" : "https://docs.oracle.com/en/database/oracle/oracle-database/26/vecse/ai-vector-search-users-guide.pdf",
"start_offset" : 1001729,
"end_offset" : 1002752
}
custom_uriにOracle公式URLが格納されました。
● Oracle公式URLがSourcesに表示されることを確認
Select AI Profileを現在のSessionへ設定します。
BEGIN
DBMS_CLOUD_AI.SET_PROFILE(
profile_name => 'OCI_DB_MANUAL_RAG'
);
END;
/
PL/SQL procedure successfully completed.
再度、AI Vector Search User's Guideの内容について問い合わせます。
SELECT AI NARRATE
Oracle AI Vector SearchにおけるHNSW索引とIVF索引の違いを、
索引構造と検索特性が分かるように日本語で説明してください。
資料に記載されていない内容は推測しないでください;
RESPONSE
____________________________________________________________________________________________________________________________________________________________
Oracle AI Vector SearchにおけるHNSW索引とIVF索引の主な違いは以下の通りです。
**索引構造**
* **HNSW索引**: 階層的なナビゲーショングラフ(Hierarchical Navigable Small World Graph)を使用し、ベクトルを多層構造で表現します。この構造により、高速な近似最近傍検索を実現します。
* **IVF索引**: 倒置ファイル(Inverted File)とフラットなベクトルリストを組み合わせた構造です。ベクトルをクラスタに分割し、各クラスタの代表ベクトルを使用して検索を効率化します。
**検索特性**
* **HNSW索引**: 高速な近似最近傍検索に優れています。階層的な構造により、検索範囲を効率的に絞り込み、高速な検索を実現します。
* **IVF索引**: 検索効率を高めるために、近隣パーティションまたはクラスタを使用します。クラスタ内のベクトルを検索することで、検索範囲を絞り込み、効率的な検索を実現します。
これらの違いは、索引の作成方法や検索アルゴリズムに反映されています。HNSW索引は、グラフの構築やメモリ割り当てなどの処理を必要としますが、IVF索引はクラスタの作成やハッシュテーブルの割り当てなどの処理を必要とします。
Sources:
- vector_search/ai-vector-search-users-guide.pdf (https://docs.oracle.com/en/database/oracle/oracle-database/26/vecse/ai-vector-search-users-guide.pdf)
回答のSourcesで、PDFファイル名に続くURLがObject Storage URIからOracle公式URLへ変更されました。
Sources:
- vector_search/ai-vector-search-users-guide.pdf
(https://docs.oracle.com/en/database/oracle/oracle-database/26/vecse/ai-vector-search-users-guide.pdf)
これにより、RAG回答からOracle公式マニュアルを直接確認できるようになりました。
● 確認結果
今回の検証では、次の流れでOracle公式URLをSourcesへ表示できました。
OCI Data Catalog
official_urlを管理
↓
OCI Object Storage
customized_url_sourceとして設定
↓
Select AI Profile
enable_custom_source_uri = true
↓
Vector Indexを再作成
↓
SELECT AI NARRATE
SourcesへOracle公式URLを表示
OCI Data CatalogのCustom Propertyは、Select AI with RAGから直接参照されません。
そのため、Data Catalogで管理しているofficial_urlと同じ値をObject Storageのcustomized_url_sourceへ設定しました。
■ PDFを追加・更新
新しいPDFを追加する場合は、次のパターンに一致する場所へ配置します。
documents/oracle-database/26ai/<document-category>/<file-name>.pdf
今回のVector Indexでは、次のWildcardを指定しています。
documents/oracle-database/26ai/*/*.pdf
そのため、26ai直下に文書カテゴリが1階層あり、その下にPDFがある構成が対象です。
Oracle公式URLをSourcesへ表示する場合は、PDFのUpload時にcustomized_url_sourceも設定します。
Vector Indexには次の設定をしています。
{
"refresh_rate": 1440
}
単位は分なので、1,440分ごとにObject Storageの変更を確認します。
一方、OCI Data Catalogの文書インベントリやCustom Propertyは、Vector Pipelineによって自動更新されません。
OCI Data Catalog
└── 文書インベントリを更新して再ハーベスト
Select AI with RAG
└── Vector PipelineがObject Storage上のPDFの追加・更新を
Vector Storeへ反映
Data CatalogのハーベストとVector Indexの更新は、それぞれ独立した処理として管理します。
■ RAGの回答品質とSourcesを確認
RAGの動作確認では、回答文を見るだけでなく、次の観点で評価します。
| 評価項目 | 確認内容 |
|---|---|
| Grounding | 回答がPDFの記述に基づいているか |
| Source | 正しいPDFとOracle公式URLが表示されているか |
| Version | 26ai以外の情報が混入していないか |
| Completeness | 質問した項目が回答されているか |
| Negative Test | 文書にない質問へ推測で回答していないか |
今回の確認結果です。
| No. | 検証内容 | 確認方法 | 結果 | 備考 |
|---|---|---|---|---|
| 1 | HNSW索引とIVF索引の違い | SELECT AI NARRATE |
Source OK/一部にローカルHNSW索引の特性を一般化した回答あり | AI Vector Search User's Guideを参照 |
| 2 | 文書に存在しない質問 | SELECT AI NARRATE |
OK | 「確認できません」と回答 |
| 3 | Oracle公式URLの表示 | SELECT AI NARRATE |
OK | SourcesへOracle公式URLを表示 |
| 4 | 4つのPDFのCustom URI | Vector Tableを直接SELECT
|
OK | 全ファイルでURL_STATUS = OK
|
評価上の注意
Sourcesが正しいことと、生成された回答内容が正しいことは
別の評価項目です。回答本文はマニュアル原文と照合します。
● 検証SQL-1:単一マニュアルの検索
SELECT AI NARRATE
Oracle AI Vector Searchで使用できるHNSW索引とIVF索引の違いを、
索引の構造、検索特性、更新時の考慮点が分かるように
日本語で説明してください。
資料に記載されていないことは推測しないでください;
確認項目です。
- 回答がAI Vector Search User's Guideに基づいている
- HNSWとIVFの違いが説明されている
- 26ai以外の説明が混入していない
- AI Vector Search User's GuideがSourcesに表示される
RESPONSE
____________________________________________________________________________________________________________________________________________________________
HNSW索引とIVF索引の違いは以下の通りです。
**索引の構造**
- HNSW索引: 階層的なナビゲーション可能な小世界グラフ(Hierarchical Navigable Small World Graph)を使用し、マルチレイヤーのグラフ構造でベクトルを格納します。
- IVF索引: 近傍パーティションまたはクラスターを使用して検索効率を高める、パーティションベースの索引です。
**検索特性**
- HNSW索引: パーティション刈り込みにより、該当するパーティションまたはサブパーティションのローカルHNSWグラフのみを検索します。これにより、類似性検索の効率的な実行計画が決定されます。
- IVF索引: 近傍パーティションまたはクラスターを使用して検索範囲を狭め、効率的な検索を実現します。
**更新時の考慮点**
- HNSW索引: 増分スナップショットが導入されており、最小限の頻度で更新を最適化するために使用されます。これにより、パフォーマンスとメモリ使用量のバランスが取れます。
- IVF索引: 自動再構成機能により、データベースシステムが再構築が必要と判断した場合に自動的に再構成されます。これにより、手動での閾値設定が不要になります。
資料には、HNSW索引とIVF索引の詳細な比較や、更新時の具体的な考慮点については記載されていません。
Sources:
- vector_search/ai-vector-search-users-guide.pdf (https://docs.oracle.com/en/database/oracle/oracle-database/26/vecse/ai-vector-search-users-guide.pdf)
今回の回答内容の確認
SourcesとしてAI Vector Search User's Guideが取得されました。
ただし、回答にあるパーティション刈り込みは、
ローカル・パーティションHNSW索引に関する特性です。
● 検証SQL-2:文書に存在しない質問
SELECT AI NARRATE
このマニュアル群にOCI Data Catalogの最新料金表は記載されていますか。
記載されていない場合は、推測せず
「確認できません」と回答してください;
確認項目です。
- 対象PDFに存在しない内容を推測しない
- 「確認できません」と回答する
RESPONSE
____________________________________________________________________________________________________________________________________________________________
確認できません。
Sources:
- vector_search/ai-vector-search-users-guide.pdf (https://docs.oracle.com/en/database/oracle/oracle-database/26/vecse/ai-vector-search-users-guide.pdf)
- admin/database-administrators-guide.pdf (https://docs.oracle.com/en/database/oracle/oracle-database/26/admin/database-administrators-guide.pdf)
- concepts/database-concepts.pdf (https://docs.oracle.com/cd/G47991_01/cncpt/database-concepts.pdf)
今回の結果は、Negative Testとして成功です。
● 検証SQL-3:Oracle公式URLの表示
SELECT AI NARRATE
Oracle AI Vector SearchにおけるHNSW索引とIVF索引の違いを、
索引構造と検索特性が分かるように日本語で説明してください。
資料に記載されていない内容は推測しないでください;
確認項目です。
- PDFファイル名が表示される
- Object Storage URIではなくOracle公式URLが表示される
-
customized_url_sourceが反映されている
No.1と質問内容は似ていますが、目的が異なります。
検証SQL-1
回答内容とGroundingを確認
検証SQL-3
SourcesのURL表示を確認
RESPONSE
____________________________________________________________________________________________________________________________________________________________
Oracle AI Vector SearchにおけるHNSW索引とIVF索引の主な違いは以下の通りです。
**索引構造**
* **HNSW索引**: 階層的なナビゲーショングラフ(Hierarchical Navigable Small World Graph)を使用し、ベクトルを多層構造で表現します。この構造により、高速な近似最近傍検索を実現します。
* **IVF索引**: 倒置ファイル(Inverted File)とフラットなベクトルリストを組み合わせた構造です。ベクトルをクラスタに分割し、各クラスタの代表ベクトルを使用して検索を効率化します。
**検索特性**
* **HNSW索引**: 高速な近似最近傍検索に優れています。階層的な構造により、検索範囲を効率的に絞り込み、高速な検索を実現します。
* **IVF索引**: 検索効率を高めるために、近隣パーティションまたはクラスタを使用します。クラスタ内のベクトルを検索することで、検索範囲を絞り込み、効率的な検索を実現します。
これらの違いは、索引の作成方法や検索アルゴリズムに反映されています。HNSW索引は、グラフの構築やメモリ割り当てなどの処理を必要としますが、IVF索引はクラスタの作成やハッシュテーブルの割り当てなどの処理を必要とします。
Sources:
- vector_search/ai-vector-search-users-guide.pdf (https://docs.oracle.com/en/database/oracle/oracle-database/26/vecse/ai-vector-search-users-guide.pdf)
● Vector StoreのMetadataを直接確認
ここまでの検証SQL-1~3では、SELECT AI NARRATEを使用して、
回答内容とSourcesを確認しました。
ただし、SELECT AI NARRATEのSourcesに表示されるのは、
質問に対して取得された上位チャンクの文書だけです。
そのため、1回の問い合わせで4つのPDFすべての
custom_uriを確認できるとは限りません。
そこで、Vector Tableを直接参照し、
4つのPDFすべてにOracle公式URLが格納されていることを確認します。
・ 確認SQL:4つのPDFのCustom URIを確認
SELECT
object_name,
custom_uri,
CASE
WHEN custom_uri LIKE 'https://docs.oracle.com/%'
THEN 'OK'
ELSE 'NG'
END AS url_status
FROM (
SELECT DISTINCT
JSON_VALUE(
attributes,
'$.object_name'
RETURNING VARCHAR2(512)
) AS object_name,
JSON_VALUE(
attributes,
'$.custom_uri'
RETURNING VARCHAR2(2000)
) AS custom_uri
FROM
OCI_DB_MANUAL_IDX$VECTAB
)
ORDER BY
object_name;
OBJECT_NAME CUSTOM_URI URL_STATUS
_____________________________________________________________________ ________________________________________________________________________________________________________ _____________
admin/database-administrators-guide.pdf https://docs.oracle.com/en/database/oracle/oracle-database/26/admin/database-administrators-guide.pdf OK
concepts/database-concepts.pdf https://docs.oracle.com/cd/G47991_01/cncpt/database-concepts.pdf OK
installation_linux/oracle-ai-database-installation-guide-linux.pdf https://docs.oracle.com/cd/G47991_01/ladbi/oracle-ai-database-installation-guide-linux.pdf OK
vector_search/ai-vector-search-users-guide.pdf https://docs.oracle.com/en/database/oracle/oracle-database/26/vecse/ai-vector-search-users-guide.pdf OK
■ RAGチューニングの概要と精度調整の考え方
この図について
この図は、RAGチューニングの一般的な全体像を示した本記事作成の概念図です。
今回の第3回で実際に設定・確認した項目は、
chunk_size、chunk_overlap、vector_dimension、
vector_distance_metric、match_limit、temperature、
max_tokens、additional_instructionsなどです。
Hybrid Search、Reranking、ef_search、nprobe、
HNSW/IVF固有の検索パラメータは、今回の検証範囲には含めていません。
また、図中のscore_thresholdに相当するSelect AIの
Vector Index属性はsimilarity_thresholdです。
今回の検証ではsimilarity_thresholdを明示指定していません。
RAGは、Vector Indexを作成して回答が生成できれば完了というわけではありません。
同じ文書と質問を使用しても、文書の分割方法、検索するチャンク数、生成モデルへの指示などによって、取得されるコンテキストや回答内容が変わります。
そのため、RAGでは次のサイクルを繰り返しながら、検索精度と回答品質を調整します。
データを準備する
↓
チャンクへ分割する
↓
Embeddingを生成する
↓
関連チャンクを検索する
↓
回答を生成する
↓
回答とSourcesを評価する
↓
設定を変更して再評価する
今回の第3回では、RAGチューニングそのものを比較検証するのではなく、最初のベースラインとなる設定でSelect AI with RAGを構築しました。
今後、同じ評価用質問を使用し、パラメータを1つずつ変更して結果を比較できるようにします。
● RAGチューニングの対象
RAGのチューニング対象は、大きく次の段階に分けられます。
| 段階 | 主な調整項目 | 今回の設定・確認内容 |
|---|---|---|
| データ | 対象文書、製品バージョン、文書カテゴリ、不要文書の除外 | Oracle AI Database 26aiの4つのPDFを対象 |
| チャンク分割 |
chunk_size、chunk_overlap
|
1024、128
|
| Embedding | Embedding Model、vector_dimension
|
Cohere Embed 4、1536次元 |
| Vector検索 |
vector_distance_metric、match_limit、similarity_threshold、検索対象の絞り込み |
Cosine Distance、上位5チャンク、similarity_thresholdは未指定 |
| 回答生成 | Chat Model、temperature、max_tokens、Prompt |
Cohere Command A、temperature = 0.1、max_tokens = 2000
|
| 評価 | Grounding、Source、Version、Completeness、Negative Test | 検証SQLを使用して確認 |
| 運用 |
refresh_rate、文書更新、SourcesのURL |
1,440分間隔、Oracle公式URLを表示 |
● 今回のベースライン
今回のVector Indexでは、次の設定を使用しています。
{
"chunk_size": 1024,
"chunk_overlap": 128,
"vector_dimension": 1536,
"vector_distance_metric": "cosine",
"match_limit": 5,
"refresh_rate": 1440
}
Select AI Profileでは、次の設定を使用しています。
{
"model": "cohere.command-a-03-2025",
"embedding_model": "cohere.embed-v4.0",
"temperature": 0.1,
"max_tokens": 2000
}
この設定を今後の比較元となるベースラインにします。
複数の設定を同時に変更すると、どの変更が回答へ影響したのか分からなくなります。
そのため、チューニングするときは、同じ文書と同じ質問を使用し、原則として1回の検証で1つのパラメータだけを変更します。
● データと検索対象を調整
回答結果に異なる製品バージョンが混ざる場合、
例えば、バージョンごとにPrefixとVector Indexを分ける構成です。
documents/oracle-database/26ai/
└── OCI_DB_MANUAL_26AI_IDX
documents/oracle-database/19c/
└── OCI_DB_MANUAL_19C_IDX
documents/oracle-database/12.2/
└── OCI_DB_MANUAL_122_IDX
これにより、26aiについて質問したときに、19cや12.2の説明が混ざることを抑制できます。
● チャンク分割を調整
PDFから抽出した本文は、chunk_sizeで指定した文字数を基準に分割されます。
chunk_size = 1024
chunk_sizeを大きくすると、1つのチャンクに多くの文脈を含められます。
一方で、質問と直接関係しない文章も同じチャンクに入りやすくなります。
chunk_sizeを小さくすると、検索対象を細かくできますが、文章の途中で意味が切れる可能性があります。
chunk_overlapは、隣接するチャンクで重複させる文字数です。
chunk_overlap = 128
Overlapを設定することで、チャンクの境界付近にある文章が分断されることを抑えます。
| 状況 | 調整候補 |
|---|---|
| 回答に必要な前後関係が不足する |
chunk_sizeを増やす |
| 関係のない文章が多く含まれる |
chunk_sizeを減らす |
| 文章の境界で意味が切れる |
chunk_overlapを増やす |
| 同じ内容の重複が多い |
chunk_overlapを減らす |
chunk_sizeとchunk_overlapを変更すると、PDF本文の分割結果とEmbeddingが変わります。
そのため、変更時はVector Indexを再作成して比較します。
● 検索するチャンク数を調整
match_limitは、質問に対してVector Storeから取得する上位チャンク数です。
match_limit = 5
値を増やすと、回答生成モデルへ渡す情報を増やせます。
一方で、関連性の低いチャンクも含まれやすくなり、回答へノイズが混入する可能性があります。
| 状況 | 調整候補 |
|---|---|
| 必要な情報が取得されない |
match_limitを増やす |
| 関係の薄い内容が混入する |
match_limitを減らす |
| 複数の論点を回答できない | 質問を分割したうえでmatch_limitを調整 |
| 特定の文書だけが検索される | 文書Metadataや対象Prefixによる絞り込みを検討 |
match_limitは、各PDFから指定件数を取得する設定ではありません。
Vector Store全体から類似度の高いチャンクを取得するため、上位チャンクが1つのPDFへ偏る場合があります。
複数文書を確実に使用する検索については、第4回で文書インベントリ表とVector Storeを組み合わせて検証します。
● 回答生成を調整
回答生成では、Select AI Profileの次の設定が影響します。
model
temperature
max_tokens
role
additional_instructions
今回のtemperatureは次の値です。
temperature = 0.1
低い値を設定することで、回答表現のばらつきを抑えています。
また、additional_instructionsには、取得した文書だけを根拠として回答し、確認できない場合は推測しないよう指定しています。
Use only the retrieved documents as evidence.
If the answer cannot be confirmed from the retrieved documents,
explicitly say that it cannot be confirmed.
今回のNegative Testでは、対象文書に存在しないOCI Data Catalogの料金について、次のように回答しました。
確認できません。
今回のNegative Testでは、additional_instructionsで指定した方針どおり、
対象文書から確認できない質問に対して
「確認できません」と応答することを確認しました。
| 状況 | 調整候補 |
|---|---|
| 回答表現が毎回大きく変わる |
temperatureを下げる |
| 回答が短すぎる |
max_tokensまたは質問内容を見直す |
| 文書にない内容を回答する |
additional_instructionsを強化 |
| 出力形式が統一されない | Promptで見出しや表形式を指定 |
| 日本語以外で回答される |
roleまたはadditional_instructionsで日本語を指定 |
● 検索精度以外の設定
RAGの設定には、検索精度そのものではなく、運用や回答の確認性に影響する項目もあります。
refresh_rateは、Object Storage上の変更を確認する間隔です。
refresh_rate = 1440
これは検索類似度を調整する値ではなく、Vector Storeへ新しい文書や更新内容を反映する運用上の設定です。
また、customized_url_sourceとenable_custom_source_uriは、検索精度を変更する設定ではありません。
回答のSourcesへOracle公式URLを表示し、回答の根拠を確認しやすくするための設定です。
| 設定 | 主な目的 |
|---|---|
refresh_rate |
Object Storage上の変更をVector Storeへ反映 |
customized_url_source |
Sourcesへ表示するURLを設定 |
enable_custom_source_uri |
Custom URIをSourcesとして使用 |
additional_instructions |
回答ルールとGroundingを制御 |
● 評価と改善を繰り返す
RAGのチューニングでは、感覚だけで設定を変更するのではなく、評価用の質問を固定して結果を比較します。
今回作成したSelect AIの検証SQLとVector Storeの確認SQLを、
ベースラインの評価セットとして使用できます。
Select AI検証SQL-1
対象文書に存在する内容を質問する
Select AI検証SQL-2
対象文書に存在しない内容を質問する
Select AI検証SQL-3
Sourcesへ正しいOracle公式URLが表示されるか確認する
Vector Store確認SQL
4つのPDFすべてのCustom URIを確認する
チューニングは次の流れで実施します。
1. ベースラインの回答を保存する
2. パラメータを1つ変更する
3. 同じ質問を実行する
4. 回答とSourcesを比較する
5. GroundingやCompletenessを評価する
6. 改善しなければ設定を戻す
評価結果を記録することで、どの設定が回答品質へ影響したかを確認しやすくなります。
● 今回の位置付け
今回の第3回では、Select AI with RAGを構築し、初期設定で回答とSourcesを確認しました。
第3回
Select AI with RAGを構築
ベースライン設定を作成
回答品質の評価方法を確認
今後
パラメータを変更
同じ質問で結果を比較
検索精度と回答品質を継続的に改善
RAGのチューニングは一度で完了するものではありません。
対象文書の追加や更新、質問内容の変化に合わせて、データ、チャンク分割、検索、回答生成、評価を継続的に見直します。
■ トラブルシューティング
| 症状・エラー | 確認内容 |
|---|---|
ORA-00904: "DBMS_CLOUD"."LIST_OBJECTS": invalid identifier |
RAG_USERへGRANT EXECUTE ON DBMS_CLOUDを実行し、再接続する。必要に応じてTABLE(...)を明示する |
ORA-20404: Object not found |
Namespace、Bucket、URI、Dynamic Group、IAM Policyを確認する。Policy変更直後はResource Principal Tokenの2時間キャッシュを考慮する |
ORA-20048: Invalid vector index attribute - enable_sources |
今回の環境ではenable_sourcesを明示せず、デフォルト動作でSourcesを確認する |
| 一部PDFだけ取り込まれない | ファイル名やPrefixにマルチバイト文字がないか確認する |
| Modelが見つからない | Profileのregionとモデルの提供リージョンを確認する |
| Vector Index作成後も回答できない | Vector PipelineのStatusとHistoryを確認する |
vector_table_nameのAttributeが0件 |
明示指定していない場合は<index-name>$VECTABのデフォルト名を確認する |
| Vector Tableの件数が0 | Object Storage URI、Wildcard、Credential、PDF本文を確認する |
| Sourcesが表示されない | 利用中のDBMS_CLOUD_AIバージョンとVector Index設定を確認する |
| 公式URLがSourcesに表示されない | Object Metadata、enable_custom_source_uri、Vector Tableのcustom_uriを確認する |
| 関係の薄い回答になる |
match_limit、対象Prefix、質問文を調整する |
| 文脈が途中で切れる |
chunk_sizeとchunk_overlapを変更して再作成する |
● Pipeline Errorを確認
SELECT
pipeline_id,
pipeline_name,
status,
error_message
FROM
user_cloud_pipeline_history
WHERE
pipeline_name = 'OCI_DB_MANUAL_IDX$VECPIPELINE'
ORDER BY
pipeline_id DESC;
PIPELINE_ID PIPELINE_NAME STATUS ERROR_MESSAGE
______________ ________________________________ ____________ ________________
7 OCI_DB_MANUAL_IDX$VECPIPELINE SUCCEEDED
● Data Accessが無効な場合
Data Accessが無効であることを示すエラーが発生した場合は、ADMINユーザーで有効化します。
BEGIN
DBMS_CLOUD_AI.ENABLE_DATA_ACCESS();
END;
/
● Modelとリージョンを再確認
今回の組合せです。
region : ap-osaka-1
chat model : cohere.command-a-03-2025
embedding model : cohere.embed-v4.0
OCI Generative AIのモデル提供リージョンは変更されることがあるため、Profile作成時点の提供状況を確認します。
■ セキュリティ上の考慮点
● Resource Principalを使用
今回の構成では、DatabaseへOCI UserのAPI秘密鍵を保存せず、Autonomous AI DatabaseのResource Principalを使用しています。
Resource Principalでは短期間有効なTokenが使用され、自動的にローテーションされます。
● Object Storageは読取り権限のみ
Autonomous AI Databaseには、対象BucketのPDFを読み取るための権限のみを付与します。
今回のRAG処理では、Autonomous AI DatabaseからObject StorageへPDFを書き込む必要はありません。
● Bucket単位で制限
次の条件を使用し、アクセス対象のBucketを限定します。
where target.bucket.name = 'oracle-database-doc-catalog'
● バージョンや公開範囲ごとに分離
公開文書と社内文書を同じVector Indexへ登録しないようにします。
documents/public/
documents/internal/
文書の機密区分が異なる場合は、Bucket、Prefix、Database User、Select AI Profile、Vector Indexを分離します。
■ リソースを削除
第4回で今回のVector Storeを使用する場合は、削除せずに残します。
検証後にSelect AI ProfileとVector Indexを削除する場合は、次のSQLを実行します。
● SessionのProfile設定を解除
BEGIN
DBMS_CLOUD_AI.CLEAR_PROFILE;
END;
/
● Vector Indexを削除
BEGIN
DBMS_CLOUD_AI.DROP_VECTOR_INDEX(
index_name => 'OCI_DB_MANUAL_IDX',
include_data => TRUE,
force => TRUE
);
END;
/
include_data => TRUEを指定すると、Vector Tableなどの関連データも削除します。
● Select AI Profileを削除
BEGIN
DBMS_CLOUD_AI.DROP_PROFILE(
profile_name => 'OCI_DB_MANUAL_RAG',
force => TRUE
);
END;
/
Dynamic GroupやResource Principalをほかの処理でも使用している場合は、影響を確認してから削除します。
■ まとめ
■ まとめ
今回は、第2回でOCI Data Catalogへカタログ化した4つのOracle AI Database 26aiマニュアルPDFを使用し、Select AI with RAGを構築しました。
Object Storage上のPDFから本文を抽出して9,590件のチャンクへ分割し、Cohere Embed 4で1536次元のEmbeddingを生成して、Autonomous AI Database内のVector Storeへ格納できました。
さらに、Cohere Command AとSELECT AI NARRATEを使用してマニュアル本文へ自然言語で問い合わせ、次の点を確認しました。
- 取得したPDFを根拠として回答を生成できる
- 対象文書に存在しない質問へ「確認できません」と回答できる
- Sourcesへ参照したPDFを表示できる
- Object StorageのCustom Metadataを使用して、Oracle公式URLをSourcesへ表示できる
- Object Storage上のPDF追加・更新をVector Pipelineから継続的に反映できる
今回整理してみると、OCI Data CatalogとSelect AI with RAGは、同じ検索サービスではなく、それぞれ異なる役割を持っていました。
OCI Data Catalog
文書名、製品バージョン、カテゴリ、公式URLを管理する
OCI Object Storage
PDFの実体とRAG用Metadataを保存する
Select AI with RAG
PDF本文から関連チャンクを検索して回答を生成する
Data Catalogだけでは文書本文へ質問できず、RAGだけでは、どの製品やバージョンの文書を検索対象にすべきかという管理が分かりにくくなります。
両者を組み合わせることで、単にPDFをObject Storageへ保存するだけではなく、信頼できる文書を選び、その内容をAIから利用する流れを作ることができました。
一方で、今回の検証では、正しいPDFとOracle公式URLがSourcesへ表示されていても、回答本文には条件の限定や原文との照合が必要な場合がありました。
RAGでは、Sourcesが正しいことと、回答内容が正しいことは別々に評価する必要があります。
文書を管理する
↓
検索対象を決める
↓
回答を生成する
↓
Sourcesと原文を照合する
↓
評価結果からRAGを改善する
AIへPDFを入れるだけで終わるのではなく、対象文書、バージョン、Metadata、Sources、回答品質まで継続的に管理する。ここが、Data CatalogとRAGを組み合わせるうえで重要なポイントだと考えます。
次回は、第2回で作成した文書インベントリのカタログ・テーブルと、今回作成したVector StoreをJOINします。
構造化MetadataとVector検索結果をOracle Database内で組み合わせ、文書カテゴリや製品バージョンを指定した、さらに検索範囲の明確なSelect AI with RAGを構築してみてみます。
■ 次回
第4回では、第2回で作成した文書インベントリのカタログ・テーブルと、第3回で作成したVector Storeを組み合わせます。
Vector TableのATTRIBUTES.object_nameには、次のような相対Object名が格納されています。
vector_search/ai-vector-search-users-guide.pdf
一方、第2回のカタログ・テーブルには、次のような完全なObject名またはObject URIが格納されています。
documents/oracle-database/26ai/vector_search/ai-vector-search-users-guide.pdf
第4回では、この差を正規化してJOINキーを作り、文書名、製品バージョン、文書カテゴリ、公式URLなどの構造化Metadataと、PDF本文のVector検索結果を組み合わせます。
次回のタイトル案です。
OCI Data Catalog 第4回:カタログ・テーブルとVector StoreをJOINしてSelect AI with RAGを構築してみてみた
■ おまけ
■ 参考資料
- Use Select AI with Retrieval Augmented Generation
- DBMS_CLOUD_AI Package
- Select AI Examples
- DBMS_CLOUD Subprograms and REST APIs
- Use Resource Principal to Access Oracle Cloud Infrastructure Resources
- Generative AI Models by Region
- Cohere Command A
- Select Your AI Provider and AI Models
- OCI CLI os object put
- Database Administrator's Guide 26ai PDF
- Oracle Database Concepts 26ai PDF
- Oracle AI Database Installation Guide for Linux 26ai PDF
- AI Vector Search User's Guide 26ai PDF


