GraphRAGは文書の意味的な類似性だけでなく、文書に含まれるエンティティ(人物・組織・製品など)とその関係性を活用して情報を検索する技術です。
通常のベクトル検索では捉えにくい、複数の情報間のつながりを検索に利用できる点が特徴です。
Oracle AI Database 26aiでは DB RU 23.26.4 以降でGraphRAGを自動構築するためのDBMS_AI_GRAPHRAGパッケージが利用可能になりました。
この機能によりPDFなどの文書からナレッジグラフを生成し、ベクトル検索とグラフ検索を組み合わせた検索を実行できます。
本記事ではOracle Autonomous AI Database(ADB)とOCI Generative AIを使用してPDFからナレッジグラフを作成し、GraphRAGによる検索を実際に検証します。
具体的には以下の内容を紹介します。
- PDFの取り込みとテキスト抽出:OCI Object Storageに配置したPDFをADBに取り込み、テキストを抽出する
-
ナレッジグラフの自動生成:
DBMS_AI_GRAPHRAGを使用して文書からエンティティと関係性を抽出し、ナレッジグラフを構築する - Graph Studioによる可視化:生成されたナレッジグラフを可視化し、エンティティ間の関係を確認する
-
3種類の検索方式を比較:
VECTOR(ベクトル検索)、GRAPH(グラフ検索)、HYBRID(ハイブリッド検索)を同じ質問で実行し、取得されるチャンク・エンティティ・関係の違いを確認する
検証にはWikipediaの「オラクル(企業)」の記事をPDF化したものを使用し、環境準備からナレッジグラフの構築、可視化、検索結果の比較までを具体的なSQLと実行結果を交えて解説します。
Oracle AI Database 26aiの新しいGraphRAG機能をこれから試したい方や、ベクトル検索とグラフ検索の違いを実際の動作から理解したい方の参考になれば幸いです。
なおDBMS_AI_GRAPHRAGとSelect AI Agentを使ったAPEXデモアプリを以下にて配布しています。
ADBとOCI生成AIが利用できる環境であればインストール可能です。
デモアプリでは任意のドキュメントを使ったナレッジグラフの作成、ナレッジグラフを使った回答生成、ナレッジグラフの可視化をお試し頂けます。
画面紹介は本記事の最後に掲載しています。
あくまで検証目的のアプリですので、その点をご承知おきください。
目次
- 検証の前提
- 1. PDFをOCI Object Storageに配置する
- 2. 検証用DBユーザを作成し、必要な権限を付与する
- 3. Object StorageとOCI Generative AIの資格証明を登録する
- 4. PDFをDATA_PUMP_DIRへ取得し、本文を抽出する
- 5. ナレッジグラフを作成する
- 6. 作成されたグラフの中身をGraph Studioで確認する
- 7. VECTOR・GRAPH・HYBRIDの検索を試す
- おわりに
- ご参考:GraphRAGデモアプリのご紹介
検証の前提
- Oracle AI Database 26aiのADBを用意し、
DBMS_AI_GRAPHRAGが利用可能なDBRU23.26.4.1.0以上であること。 - SQLclからADBへ接続できること。本記事ではウォレット等の接続設定を済ませたTNS名を
adb_serviceとします。 - PDFを置くOCI Object Storageの既存バケットと、そのオブジェクトを読み取れるOCI IAMユーザのAPI署名キーを用意すること。
- OCI Generative AIのチャットモデルと埋め込みモデルを利用できること。本記事ではリージョンを
us-chicago-1とします。 - ADBからObject StorageとOCI Generative AIへHTTPS接続できること。プライベートエンドポイント等を利用する場合は、必要なネットワーク設定を済ませておきます。
1. PDFをOCI Object Storageに配置する
手元のPDFをOCIコンソール等から既存バケットへアップロードします。
例ではオブジェクト名をsample.pdfとします。
PDFのオブジェクトURIを控えておきます。
https://objectstorage.<OBJECT_STORAGE_REGION>.oraclecloud.com/n/<NAMESPACE>/b/<BUCKET_NAME>/o/sample.pdf
もしくは
https://<NAMESPACE>.objectstorage.<OBJECT_STORAGE_REGION>.oci.customer-oci.com/n/<NAMESPACE>/b/<BUCKET_NAME>/o/sample.pdf
本検証では「オラクル (企業)」についてまとめられた以下WikipediaページのPDFを利用しました。
2. 検証用DBユーザを作成し、必要な権限を付与する
ADBへADMINとして接続します。
なお本検証ではクライアントとして SQLcl を利用しています。
sql -nohistory ADMIN@adb_service
次のSQLでGraphRAG関連のパッケージがVALIDであり存在することを確認します。
SELECT OWNER, OBJECT_NAME, STATUS
FROM DBA_OBJECTS
WHERE OBJECT_TYPE = 'PACKAGE'
AND OBJECT_NAME IN ('DBMS_AI_GRAPHRAG', 'DBMS_VECTOR', 'DBMS_VECTOR_CHAIN');
検証用のGR_USERを作成します。<DB_PASSWORD>はADBのパスワード要件を満たす値に置き換えてください。
CREATE USER GR_USER IDENTIFIED BY "<DB_PASSWORD>" QUOTA UNLIMITED ON DATA;
GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW, CREATE SEQUENCE,
CREATE TYPE, CREATE TRIGGER, CREATE JOB, CREATE CREDENTIAL TO GR_USER;
GRANT GRAPH_DEVELOPER TO GR_USER;
ALTER USER GR_USER GRANT CONNECT THROUGH GRAPH$PROXY_USER
GRANT EXECUTE ON DBMS_AI_GRAPHRAG TO GR_USER;
GRANT EXECUTE ON DBMS_VECTOR TO GR_USER;
GRANT EXECUTE ON CTXSYS.DBMS_VECTOR_CHAIN TO GR_USER;
GRANT EXECUTE ON DBMS_CLOUD TO GR_USER;
GRANT READ, WRITE ON DIRECTORY DATA_PUMP_DIR TO GR_USER;
ドキュメントはObject Storageにアップロードし、既存のディレクトリ・オブジェクト DATA_PUMP_DIR を通して読み取ります。
また GRAPH_DEVELOPERは手順6でGraph Studioへログインしてグラフを定義するためのロールです。
続けてOCI Generative AIへの接続を許可します。
リージョンを us-chicago-1 以外にする場合はホスト名を変更してください。
BEGIN
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
HOST => 'inference.generativeai.us-chicago-1.oci.oraclecloud.com',
LOWER_PORT => 443,
UPPER_PORT => 443,
ACE => XS$ACE_TYPE(
PRIVILEGE_LIST => XS$NAME_LIST('connect'),
PRINCIPAL_NAME => 'GR_USER',
PRINCIPAL_TYPE => XS_ACL.PTYPE_DB
)
);
END;
/
3. Object StorageとOCI Generative AIの資格証明を登録する
検証用ユーザでDB接続します。
sql -nohistory GR_USER@adb_service
以下の<...>を自身の値に置き換えて実行します。
BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
CREDENTIAL_NAME => 'OCI_OS_CRED',
USER_OCID => '<OCI_USER_OCID>',
TENANCY_OCID => '<TENANCY_OCID>',
PRIVATE_KEY => '<PRIVATE_KEY_BODY>',
FINGERPRINT => '<API_KEY_FINGERPRINT>'
);
DBMS_VECTOR.CREATE_CREDENTIAL(
CREDENTIAL_NAME => 'OCI_CRED',
PARAMS => JSON('{
"user_ocid": "<OCI_USER_OCID>",
"tenancy_ocid": "<TENANCY_OCID>",
"compartment_ocid": "<MODEL_COMPARTMENT_OCID>",
"private_key": "<PRIVATE_KEY_BODY>",
"fingerprint": "<API_KEY_FINGERPRINT>"
}')
);
END;
/
| 資格証明 | 登録API | 用途 |
|---|---|---|
OCI_OS_CRED |
DBMS_CLOUD.CREATE_CREDENTIAL |
Object StorageからPDFを取得 |
OCI_CRED |
DBMS_VECTOR.CREATE_CREDENTIAL |
GraphRAGの抽出と埋め込み |
4. PDFをDATA_PUMP_DIRへ取得し、本文を抽出する
以降もGR_USERで実行します。まず長い本文やJSONを表示できるようにします。
SET LONG 1000000
SET LONGCHUNKSIZE 32767
SET LINESIZE 200
SET PAGESIZE 1000
手順1のオブジェクトURIを指定し、PDFをDATA_PUMP_DIRへ取得します。
FILE_NAMEはADB側の保存名です。
後続のSQLでも同じ名前を使います。
BEGIN
DBMS_CLOUD.GET_OBJECT(
CREDENTIAL_NAME => 'OCI_OS_CRED',
OBJECT_URI => 'https://objectstorage.<OBJECT_STORAGE_REGION>.oraclecloud.com/n/<NAMESPACE>/b/<BUCKET_NAME>/o/sample.pdf',
DIRECTORY_NAME => 'DATA_PUMP_DIR',
FILE_NAME => 'sample.pdf'
);
END;
/
保存したファイルを読み取れることを確認します。
結果が1ならファイルが存在します。
SELECT DBMS_LOB.FILEEXISTS(BFILENAME('DATA_PUMP_DIR', 'sample.pdf')) FILE_EXISTS FROM DUAL;
FILE_EXISTS
______________
1
PDFから抽出した本文を保存する表を作成し、1件取り込みます。
BFILENAMEでファイルを参照し、TO_BLOBで読み込んだ内容をUTL_TO_TEXTへ渡します。
CREATE TABLE GR_DOCS (
DOCUMENT_ID NUMBER PRIMARY KEY,
FILE_NAME VARCHAR2(512) NOT NULL,
CONTENT CLOB NOT NULL
);
INSERT INTO GR_DOCS (DOCUMENT_ID, FILE_NAME, CONTENT)
VALUES (
1,
'sample.pdf',
DBMS_VECTOR_CHAIN.UTL_TO_TEXT(
TO_BLOB(BFILENAME('DATA_PUMP_DIR', 'sample.pdf'))
)
);
COMMIT;
SELECT DOCUMENT_ID, FILE_NAME,
DBMS_LOB.GETLENGTH(CONTENT) TEXT_LENGTH,
DBMS_LOB.SUBSTR(CONTENT, 1000, 1) TEXT_PREVIEW
FROM GR_DOCS;
TEXT_LENGTHが正の値で、TEXT_PREVIEWにPDFの本文が読める形で表示されることを確認します。
UTL_TO_TEXTはPDFの本文抽出までを行います。
チャンク分割と埋め込みはナレッジグラフ作成時に行われます。
5. ナレッジグラフを作成する
<CHAT_MODEL_ID>と<EMBEDDING_MODEL_ID>を選択したリージョンで利用可能なモデルIDに置き換えます。
本検証では以下のモデルを利用しました。
- 推論モデル:
xai.grok-4.7 - 埋め込みモデル:
cohere.embed-v4.0
またLLMへの同時リクエスト数を制御する max_concurrent_requests も適宜調整します。
以下例では 2 としていますが、指定しない場合のデフォルト値は 15 です。
BEGIN
DBMS_AI_GRAPHRAG.CREATE_KNOWLEDGE_GRAPH(
KG_NAME => 'GR_KG',
SOURCE_NAME => 'GR_DOCS',
SOURCE_COLUMN => 'CONTENT',
GRAPH_TYPE => 'TEXTUAL',
PARAMS => JSON('{
"language": "Japanese",
"llm_request_params": {"max_concurrent_requests": 2},
"llm_generate_params": {
"provider": "ocigenai",
"credential_name": "OCI_CRED",
"url": "https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/20231130/actions/chat",
"model": "<CHAT_MODEL_ID>"
},
"embedding_params": {
"provider": "ocigenai",
"credential_name": "OCI_CRED",
"url": "https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/20231130/actions/embedText",
"model": "<EMBEDDING_MODEL_ID>"
}
}')
);
END;
/
上記コマンドでチャンク分割、エンティティ・関係の抽出、グラフデータの構築、埋め込みとベクトル索引の作成を行います。
TEXTUALを指定すると、エンティティや関係の説明も生成します。
処理状態を確認します。
以下はナレッジグラフ作成中の場合の結果です。
SET LONG 1000000
SET LONGCHUNKSIZE 32767
SET LINESIZE 200
SET PAGESIZE 1000
SELECT JSON_SERIALIZE(
DBMS_AI_GRAPHRAG.GET_KNOWLEDGE_GRAPH_STATUS('GR_KG')
RETURNING CLOB PRETTY
) KG_STATUS
FROM DUAL;
KG_STATUS
___________________________________________
{
"last_llm_error" : null,
"failed_llm_extraction_count" : 0,
"failed_dml_work_count" : 0,
"sources" :
[
{
"source_name" : "GR_USER.GR_DOCS",
"source_column" : "CONTENT",
"source_status" : "CREATING",
"dml_maintenance" : false
}
],
"kg_status" : "CREATING",
"graph" :
{
"chunk_count" : 139,
"entity_count" : 0,
"relationship_count" : 0
},
"last_chunk_embedding_error" : null,
"failed_chunk_embedding_count" : 0,
"last_graph_embedding_error" : null,
"kg_name" : "\"GR_USER\".\"GR_KG\"",
"failed_llm_summary_count" : 0,
"failed_graph_embedding_count" : 0
}
kg_statusと各ソースのsource_statusがREADY、failed_*_countがすべて0になってから次へ進みます。
source_statusがFAILEDやREADY_PARTIALとなった場合は、JSON内のlast_*_errorを確認して対応します。
6. 作成されたグラフの中身をGraph Studioで確認する
GraphRAGが生成したエンティティ表と関係表を参照する表示用のSQLプロパティグラフGR_KG_VISUALを、ADBの付随ツールであるGraph Studioで定義します。
Graph Studioにログインする
- OCIコンソールで対象ADBの詳細画面を開きます。
- ツール構成(Tool configuration)からGraph StudioのアクセスURLを開きます。
- 手順2で作成した
GR_USERとパスワードでログインします。
無事ログインできると以下画面が表示されます。
表示用のグラフを定義する
- Graph Studioのメニューから
モデラ―を開き、New Graphを選択します。
-
グラフ名を
GR_KG_VISUAL、Graph TypeをSQL Property Graphにします。 -
New Vertexをキャンバスへ追加し、スキーマを
GR_USERにして、次の内容を設定します。
| 頂点の設定 | 指定内容 |
|---|---|
| Table/View | AI$GRAPH$ENT_GR_KG |
| Key Columns | ENTITY_ID |
| Label Name | ENTITY |
| Property Columns |
ENTITY_ID、ENTITY_TITLE、ENTITY_SUMMARY
|
ここまで実行すると以下のような状態になります。
- New Edgeで先ほど追加した頂点定義から同じ頂点定義へ辺を描き、次の内容を設定します。始点・終点ともにエンティティ表を参照します。
| 辺の設定 | 指定内容 |
|---|---|
| Table/View | AI$GRAPH$REL_GR_KG |
| Key Column | RELATIONSHIP_ID |
| Source |
SOURCE_ENTITY_ID → 頂点のENTITY_ID
|
| Destination |
TARGET_ENTITY_ID → 頂点のENTITY_ID
|
| Label Name | RELATIONSHIP |
| Property Columns |
RELATIONSHIP_ID、SOURCE_ENTITY_ID、TARGET_ENTITY_ID、RELATIONSHIP_SUMMARY
|
ここまで実行すると以下のような状態になります。
- 右上のCreate Graphをクリックします。
Graph Explorerで頂点と関係を確認する
- メニューからGraph Explorerを開きます。
- 左側のSQL Property Graphsで
GR_USERを展開し、GR_KG_VISUALを右クリックしてGenerate basic queryを選びます。
- クエリのドライバをSQLにし、Visualize Graphをクリックします。
- 頂点を選択し、プロパティにある
ENTITY_TITLEとENTITY_SUMMARYで、PDFから抽出した対象と説明を確認します。
- 辺を選択し、接続先の頂点と
RELATIONSHIP_SUMMARYでドキュメントに記載されているエンティティ間の関係を確認します。
必要に応じて表示設定で頂点のキャプションをENTITY_TITLEにすると、以下のように各エンティティの名前がグラフに表示されて見やすくなります。
なおここで作成したGR_KG_VISUALは可視化用のSQLプロパティグラフです。
次のナレッジグラフを使った検索では、手順5で作成したナレッジグラフ名GR_KGを指定します。
7. VECTOR・GRAPH・HYBRIDの検索を試す
同じ質問を3種類の検索方式で実行します。
質問文はPDF内の固有名詞や関係を尋ねる質問を指定してください。
DBMS_AI_GRAPHRAGが用意している3種類の検索方式の概要は以下の通りです。
| 検索方式 | 検索の動作 |
|---|---|
VECTOR |
ベクトル類似度で検索し、グラフの接続はたどらない |
GRAPH |
ベクトル検索で起点となるノードを選び、グラフの接続をたどって検索する |
HYBRID |
ベクトル検索とグラフ検索の順位をRRFで統合する |
GRAPHでも検索の起点となるノードを探すためにベクトル類似度を使います。
またVECTORでもエンティティや関係を検索結果に含められます。
今回は「オラクル (企業)」の記事でナレッジグラフを作成したので、以下例では「Oracleとはどんな会社ですか?」という質問を投げています。
SET LONG 1000000
SET LONGCHUNKSIZE 32767
SET LINESIZE 200
SET PAGESIZE 1000
SET TRIMSPOOL ON
SET TRIMOUT ON
SPOOL searchres.txt
SELECT M.SEARCH_TYPE,
JSON_SERIALIZE(
DBMS_AI_GRAPHRAG.QUERY_KNOWLEDGE_GRAPH(
KG_NAME => 'GR_KG',
QUERY => 'Oracleとはどんな会社ですか?',
SEARCH_TYPE => M.SEARCH_TYPE,
PARAMS => JSON('{"topk_chunks":5,"topk_entities":5,"topk_relationships":5}'),
GENERATE_ANSWER => FALSE
) RETURNING CLOB PRETTY
) RESULT
FROM (
SELECT 'VECTOR' SEARCH_TYPE FROM DUAL
UNION ALL
SELECT 'GRAPH' FROM DUAL
UNION ALL
SELECT 'HYBRID' FROM DUAL
) M;
SPOOL OFF
GENERATE_ANSWER => FALSEを指定し、検索で取得した根拠をJSONで確認します。
質問の埋め込みにはグラフ作成時に設定した埋め込みモデルが使われます。
各検索方式ごとの結果は以下の通りです。
VECTOR
{
"entities" :
[
{
"entity_id" : 8,
"entity_title" : "Oracle Corporation",
"entity_type" : null,
"entity_summary" : "\"Oracle Corporation\": 1977年に設立された株式会社。本社はアメリカ合衆国にあり、2020年12月にカリフォルニア州Redwood Shoresからテキサス州オースティンへ移転した。市場情報はNYSEのORCL. 企業。テキストでは「オラクル(企業)」および「オラクル (Oracle Corporation)」として言及され、本文は「オラクル (Oracle Corporation) は」で途切れている。. 株主資本合計(stockholders equity)の主体として明示されている企業。別の経路ではOracleとしても示され、AboutおよびInvestor Relationsを含む参照経路に現れる。. 「Oracle Sues SAP」の出典として記載された企業名. 「Global Customer Support Security Practices」の発行元として記載された組織。. Global Customer Support Security Practicesを発行した組織. カリフォルニアに所在し、2008年9月22日付でプレスリリースを発表した企業。次世代カスタマーサポートプラットフォーム「My Oracle Support」を紹介した。. 引用の出典として記載された企業。2008年11月11日に閲覧されたと記されている。. Oracle Information inDepth Newslettersの発行元として記載されている企業。. FAQの主題として言及されている企業. ビジネスデータが言及されている組織."
},
{
"entity_id" : 31,
"entity_title" : "神託",
"entity_type" : null,
"entity_summary" : "\"神託\": 会社名「Oracle」が持つ意味."
},
...(略)...
],
"relationships" :
[
{
"relationship_id" : 6,
"source_entity_id" : 8,
"source_entity_title" : "Oracle Corporation",
"target_entity_id" : 14,
"target_entity_title" : "株式会社",
"relationship_type" : null,
"relationship_summary" : "\"Oracle Corporation\" -> \"株式会社\": Oracle Corporation の種類は株式会社である."
},
{
"relationship_id" : 268,
"source_entity_id" : 404,
"source_entity_title" : "Oracle Academy",
"target_entity_id" : 406,
"target_entity_title" : "教育機関",
"relationship_type" : null,
"relationship_summary" : "\"Oracle Academy\" -> \"教育機関\": Oracle Academyは教育機関とのパートナーシップにより、コンピュータ及び商業に関するトレーニングを行う."
},
...(略)...
],
"chunks" :
[
{
"chunk_pk" : 3,
"chunk_text" : "[1]\n\n売上⾼\n\nUS$39.83 billion (2018)[4]\n\n[2]\n\n営業利益\n\nUS$13.67 billion (2018)[4]\n\n[3]\n\n純利益\n\nUS$3.82 billion (2018)[4]\n\n[4]\n\nオラク\n\nル\n\n(\n\n企業\n\n)\n\n出典\n\n:\n\nフリー百科事典『ウィキペディア(\n\nWikipedia\n\n)\n\n』\n\nオ\n\nラ\n\nク\n\nル\n\n(\n\nOracle Corporation\n\n)\n\nは",
"source" :
{
"source_name" : "GR_USER.GR_DOCS",
"source_column" : "CONTENT",
"source_key" :
{
"DOCUMENT_ID" : 1
}
}
},
{
"chunk_pk" : 1,
"chunk_text" : "オラクル (企業) - Wikipedia\n\nオラク\n\nル\n\nOracle Corporation\n\n本社\n\n種類\n\n株式会社\n\n市場情報\n\nNYSE ORCL (https://www.nyse.com/quo\n\nte/XNYS:ORCL)\n\n本社\n\n所在地 アメリカ合衆国\n\nテキサス州オースティン(2020年12⽉に\n\nカリフォルニア州Redwood Shoresより\n\n移転)\n\n設⽴\n\n1977年\n\n(",
"source" :
{
"source_name" : "GR_USER.GR_DOCS",
"source_column" : "CONTENT",
"source_key" :
{
"DOCUMENT_ID" : 1
}
}
},
...(略)...
]
}
GRAPH
{
"entities" :
[
{
"entity_id" : 8,
"entity_title" : "Oracle Corporation",
"entity_type" : null,
"entity_summary" : "\"Oracle Corporation\": 1977年に設立された株式会社。本社はアメリカ合衆国にあり、2020年12月にカリフォルニア州Redwood Shoresからテキサス州オースティンへ移転した。市場情報はNYSEのORCL. 企業。テキストでは「オラクル(企業)」および「オラクル (Oracle Corporation)」として言及され、本文は「オラクル (Oracle Corporation) は」で途切れている。. 株主資本合計(stockholders equity)の主体として明示されている企業。別の経路ではOracleとしても示され、AboutおよびInvestor Relationsを含む参照経路に現れる。. 「Oracle Sues SAP」の出典として記載された企業名. 「Global Customer Support Security Practices」の発行元として記載された組織。. Global Customer Support Security Practicesを発行した組織. カリフォルニアに所在し、2008年9月22日付でプレスリリースを発表した企業。次世代カスタマーサポートプラットフォーム「My Oracle Support」を紹介した。. 引用の出典として記載された企業。2008年11月11日に閲覧されたと記されている。. Oracle Information inDepth Newslettersの発行元として記載されている企業。. FAQの主題として言及されている企業. ビジネスデータが言及されている組織."
},
{
"entity_id" : 404,
"entity_title" : "Oracle Academy",
"entity_type" : null,
"entity_summary" : "\"Oracle Academy\": 教育機関とのパートナーシップによる、コンピュータ及び商業に関するトレーニング。. 引用番号22で挙げられる英語のリソース。oracle.com上に掲載され、オリジナルURLはacademy.oracle.comである。2010年5月23日時点のオリジナルがアーカイブされており、2009年6月4日に閲覧された。."
},
...(略)...
],
"relationships" :
[
{
"relationship_id" : 268,
"source_entity_id" : 404,
"source_entity_title" : "Oracle Academy",
"target_entity_id" : 406,
"target_entity_title" : "教育機関",
"relationship_type" : null,
"relationship_summary" : "\"Oracle Academy\" -> \"教育機関\": Oracle Academyは教育機関とのパートナーシップにより、コンピュータ及び商業に関するトレーニングを行う."
},
{
"relationship_id" : 13,
"source_entity_id" : 12,
"source_entity_title" : "テキサス州オースティン",
"target_entity_id" : 13,
"target_entity_title" : "カリフォルニア州Redwood Shores",
"relationship_type" : null,
"relationship_summary" : "\"テキサス州オースティン\" -> \"カリフォルニア州Redwood Shores\": 本社は2020年12月にカリフォルニア州Redwood Shoresからテキサス州オースティンへ移転した."
},
...(略)...
],
"chunks" :
[
{
"chunk_pk" : 1,
"chunk_text" : "オラクル (企業) - Wikipedia\n\nオラク\n\nル\n\nOracle Corporation\n\n本社\n\n種類\n\n株式会社\n\n市場情報\n\nNYSE ORCL (https://www.nyse.com/quo\n\nte/XNYS:ORCL)\n\n本社\n\n所在地 アメリカ合衆国\n\nテキサス州オースティン(2020年12⽉に\n\nカリフォルニア州Redwood Shoresより\n\n移転)\n\n設⽴\n\n1977年\n\n(",
"source" :
{
"source_name" : "GR_USER.GR_DOCS",
"source_column" : "CONTENT",
"source_key" :
{
"DOCUMENT_ID" : 1
}
}
},
{
"chunk_pk" : 61,
"chunk_text" : "Oracle NetSuite - クラウドERP。ERP、財務会計、CRM、Eコマースを統合したビジネスア\n\nプリケーション\n\n。\n\nOracle Academy - 教育機関と\n\nのパートナーシップによるコンピュータ及び商業に関するト\n\nレーニング\n\n[22]\n\nOracle Consulting",
"source" :
{
"source_name" : "GR_USER.GR_DOCS",
"source_column" : "CONTENT",
"source_key" :
{
"DOCUMENT_ID" : 1
}
}
},
...(略)...
]
}
HYBRID
{
"entities" :
[
{
"entity_id" : 8,
"entity_title" : "Oracle Corporation",
"entity_type" : null,
"entity_summary" : "\"Oracle Corporation\": 1977年に設立された株式会社。本社はアメリカ合衆国にあり、2020年12月にカリフォルニア州Redwood Shoresからテキサス州オースティンへ移転した。市場情報はNYSEのORCL. 企業。テキストでは「オラクル(企業)」および「オラクル (Oracle Corporation)」として言及され、本文は「オラクル (Oracle Corporation) は」で途切れている。. 株主資本合計(stockholders equity)の主体として明示されている企業。別の経路ではOracleとしても示され、AboutおよびInvestor Relationsを含む参照経路に現れる。. 「Oracle Sues SAP」の出典として記載された企業名. 「Global Customer Support Security Practices」の発行元として記載された組織。. Global Customer Support Security Practicesを発行した組織. カリフォルニアに所在し、2008年9月22日付でプレスリリースを発表した企業。次世代カスタマーサポートプラットフォーム「My Oracle Support」を紹介した。. 引用の出典として記載された企業。2008年11月11日に閲覧されたと記されている。. Oracle Information inDepth Newslettersの発行元として記載されている企業。. FAQの主題として言及されている企業. ビジネスデータが言及されている組織."
},
{
"entity_id" : 404,
"entity_title" : "Oracle Academy",
"entity_type" : null,
"entity_summary" : "\"Oracle Academy\": 教育機関とのパートナーシップによる、コンピュータ及び商業に関するトレーニング。. 引用番号22で挙げられる英語のリソース。oracle.com上に掲載され、オリジナルURLはacademy.oracle.comである。2010年5月23日時点のオリジナルがアーカイブされており、2009年6月4日に閲覧された。."
},
...(略)...
],
"relationships" :
[
{
"relationship_id" : 268,
"source_entity_id" : 404,
"source_entity_title" : "Oracle Academy",
"target_entity_id" : 406,
"target_entity_title" : "教育機関",
"relationship_type" : null,
"relationship_summary" : "\"Oracle Academy\" -> \"教育機関\": Oracle Academyは教育機関とのパートナーシップにより、コンピュータ及び商業に関するトレーニングを行う."
},
{
"relationship_id" : 6,
"source_entity_id" : 8,
"source_entity_title" : "Oracle Corporation",
"target_entity_id" : 14,
"target_entity_title" : "株式会社",
"relationship_type" : null,
"relationship_summary" : "\"Oracle Corporation\" -> \"株式会社\": Oracle Corporation の種類は株式会社である."
},
...(略)...
],
"chunks" :
[
{
"chunk_pk" : 1,
"chunk_text" : "オラクル (企業) - Wikipedia\n\nオラク\n\nル\n\nOracle Corporation\n\n本社\n\n種類\n\n株式会社\n\n市場情報\n\nNYSE ORCL (https://www.nyse.com/quo\n\nte/XNYS:ORCL)\n\n本社\n\n所在地 アメリカ合衆国\n\nテキサス州オースティン(2020年12⽉に\n\nカリフォルニア州Redwood Shoresより\n\n移転)\n\n設⽴\n\n1977年\n\n(",
"source" :
{
"source_name" : "GR_USER.GR_DOCS",
"source_column" : "CONTENT",
"source_key" :
{
"DOCUMENT_ID" : 1
}
}
},
{
"chunk_pk" : 3,
"chunk_text" : "[1]\n\n売上⾼\n\nUS$39.83 billion (2018)[4]\n\n[2]\n\n営業利益\n\nUS$13.67 billion (2018)[4]\n\n[3]\n\n純利益\n\nUS$3.82 billion (2018)[4]\n\n[4]\n\nオラク\n\nル\n\n(\n\n企業\n\n)\n\n出典\n\n:\n\nフリー百科事典『ウィキペディア(\n\nWikipedia\n\n)\n\n』\n\nオ\n\nラ\n\nク\n\nル\n\n(\n\nOracle Corporation\n\n)\n\nは",
"source" :
{
"source_name" : "GR_USER.GR_DOCS",
"source_column" : "CONTENT",
"source_key" :
{
"DOCUMENT_ID" : 1
}
}
},
...(略)...
]
}
結果のうち特に次の項目を確認します。
| JSONの項目 | 確認する内容 |
|---|---|
chunks[].chunk_text |
質問に関連するPDF本文が取得できたか |
entities[] |
質問に関連するエンティティが含まれるか |
relationships[] |
質問に関連する関係と説明が含まれるか |
検索方式によって結果が異なっている点が分かります。
拾える情報に違いがあるため、ドキュメントの内容や構造によっては3つの検索方式の選択が回答精度に影響を及ぼすと考えられます。
おわりに
本記事ではOracle AI Database 26aiのDB RU 23.26.4以降で利用可能になったDBMS_AI_GRAPHRAGを使用し、PDFからの自動ナレッジグラフ生成、Graph Studioによる可視化、VECTOR、GRAPH、HYBRIDの3種類の検索方式を検証しました。
GraphRAGは文書の意味的な類似性に加え、エンティティ間の関係性を活用した検索ができる点が特徴です。
特に以下のようなユースケースでの活用が期待できます。
- 社内ナレッジ検索:社内文書から部署、担当業務、業務手順などの関係を検索する。
- システム障害調査・影響分析:システム構成情報からコンポーネント間の依存関係をたどり、障害の影響範囲を調査する。
- 技術文書検索:製品マニュアルから機能、対応バージョン、前提条件などの関係を検索する。
Oracle AI Database 26aiのGraphRAGは、情報同士の関係性が重要となる検索において、従来のベクトル検索を補完する選択肢として今後の活用が期待できる機能だと感じました。
ご参考:GraphRAGデモアプリのご紹介
本検証で扱ったDBMS_AI_GRAPHRAGとSelect AI Agentを使ったAPEXデモアプリのご紹介です。
以下よりダウンロード頂けます。
同梱されているREADME.mdに記載されている手順に沿ってインストールします。
使い方の概要も同ファイルに記載されています。
各画面は以下のようになっています。














