---
title: LlamaIndex の Property Graph Index を PostgreSQL 上に構築してデータ構造を見てみる
tags:  #aws #jaws-ug #postgresql #pgvector #graphrag  
author: [hmatsu47(まつ)](https://www.docswell.com/user/hmatsu47)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/57GVR3LW7L.jpg?width=480
description: JAWS-UG AI/ML #27 2025/6/23 LT
published: June 23, 25
canonical: https://www.docswell.com/s/hmatsu47/ZQ137V-jawsug-aiml-20250623-pg-index
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/57GVR3LW7L.jpg)

LlamaIndex の Property Graph Index を
PostgreSQL 上に構築して
データ構造を見てみる
JAWS-UG AI/ML #27 2025/6/23
まつひさ（hmatsu47）


# Page. 2

![Page Image](https://bcdn.docswell.com/page/4EQ6V5YQEP.jpg)

自己紹介
松久裕保（@hmatsu47）
●
https://qiita.com/hmatsu47
● 現在：
○ 名古屋で Web インフラのお守り係をしています
○ SRE チームに所属しつつ技術検証の支援をしています
○ 普段カンファレンス・勉強会では DB の話しかしていません
（ほぼ）
2


# Page. 3

![Page Image](https://bcdn.docswell.com/page/KJ44M9WYJ1.jpg)

本日の内容
● LlamaIndex の Property Graph Index
○ Bedrock ナレッジベースの GraphRAG とよく比較される
● PostgreSQL 上に構築
○ TiDB 用の実装を Amazon Q Developer の力を借りて移植
● サンプル文書のインデックスを作成し生成されたデータ
の内容を確認
● 検索時にデータがどのように使われるかを確認
3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/LE148KYNEG.jpg)

なぜこの話を？
● 多くの人にとってグラフデータベースは馴染みがない
○ Neo4j や Neptune などを使っている人はそんなに多くないはず
● RDBMS なら多くの人が使っている
○ 少しはとっつきやすい？
○ RDBMS のテーブル上にグラフ構造を展開したほうがイメージが
つきやすいかも？
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/GEWXZD1M72.jpg)

おことわり
● RAG および GraphRAG については説明しません
○ おそらく前のほうの LT で説明されているはずなので
● ベクトル検索による RAG との比較についても触れません
○ 同上
5


# Page. 6

![Page Image](https://bcdn.docswell.com/page/47Z61GPM73.jpg)

LlamaIndex
● 主に RAG 向けの検索インデックス用フレームワーク
○ LangChain と比較されることがよくあるが、LangChain よりも
インデックスに特化
■
インデックスの構築と検索（retrieve）・データの投入など
6


# Page. 7

![Page Image](https://bcdn.docswell.com/page/YJ62LYM57V.jpg)

Property Graph Index
● プロパティグラフで構成されるインデックス
○ ノードとエッジ（リレーション）で構成
■
エッジは方向性をもった矢印で表現（有向グラフ）
■
ノードとエッジはラベル（カテゴリ・タイプ）とプロパティ（メタデータ）
を持つことが可能
○ 様々な情報を格納できるが、デフォルト（SimpleLLMPathExtractor
&amp; ImplicitPathExtractor）ではトリプレット（主語・述語・目的語）と、
文章チャンクの接続関係がインデックスに展開される
7


# Page. 8

![Page Image](https://bcdn.docswell.com/page/GJ521GZGJ4.jpg)

ただし PostgreSQL + pgvector は非対応なので
● Amazon Q Developer GitHub 統合で TiDB 用を移植
○ トークン数の限界、過去作業に関するコンテキスト引き継ぎなど
でそこそこ苦労
■
詳細は省略
8


# Page. 9

![Page Image](https://bcdn.docswell.com/page/LE3K1R9PE5.jpg)

文書のチャンク化→グラフ化
● 1,000 文字前後（デフォルト）の文章に分割して保存
○ 1 文書あたり 1 つの親（node）ノードを生成
○ チャンク化した文章を text_chunk ノードとして保存
● チャンクの接続関係（前後・親）をグラフ化
○ text_chunk ノードから親ノードを指す SOURCE エッジを生成
○ text_chunk ノードに保存された文章の前後関係を表す
PREVIOUS / NEXT エッジを生成
9


# Page. 10

![Page Image](https://bcdn.docswell.com/page/8ED3XYG37G.jpg)

トリプレットの抽出
● チャンク化した文章から「主語＋述語＋目的語」の組み
合わせをいくつか抽出
○ 主語と目的語を entity ノードとして個別に保存
○ 主語・述語・目的語の関係性をエッジとして保存
○ 抽出元の文章チャンクを示す ID（識別子）をノード・エッジそれぞ
れのプロパティに記録
私
食べる
パン
10


# Page. 11

![Page Image](https://bcdn.docswell.com/page/V7P4P63PE8.jpg)

各ノードに埋め込みベクトルを保存
● ベクトル検索用の埋め込みベクトルを保存
○ text_chunk ノードには文章チャンクの埋め込みベクトル
○ entity ノードにはキーワード（主語・目的語）の埋め込みベクトル
○ node ノードには保存せず（null）
11


# Page. 12

![Page Image](https://bcdn.docswell.com/page/2JVX234V7Q.jpg)

サンプルデータを投入して試してみた
● LlamaIndex のサンプル文書の日本語訳
○ ポール・グレアムのエッセイ
■
https://github.com/hmatsu47/llama_index_property_graph_test/blob/main/dat
a/example_ja.txt
12


# Page. 13

![Page Image](https://bcdn.docswell.com/page/5EGVR311EL.jpg)

サンプルデータを投入して試してみた
● Streamlit で単答チャットアプリ化
13


# Page. 14

![Page Image](https://bcdn.docswell.com/page/4JQ6V5DNJP.jpg)

実際のテーブル構成
postgres=# \x auto
Expanded display is used automatically.
postgres=# \d
List of relations
Schema |
Name
|
Type
| Owner
--------+---------------------+----------+---------public | pg_nodes
| table
| postgres
public | pg_relations
| table
| postgres
public | pg_relations_id_seq | sequence | postgres
(3 rows)
14


# Page. 15

![Page Image](https://bcdn.docswell.com/page/K744M9Z371.jpg)

ノード用テーブル（pg_nodes）の定義
postgres=# \d pg_nodes
Table &quot;public.pg_nodes&quot;
Column
|
Type
| Collation | Nullable | Default
------------+-----------------------------+-----------+----------+--------id
| character varying(512)
|
| not null |
text
| text
|
|
|
name
| character varying(512)
|
|
|
label
| character varying(512)
|
| not null |
properties | jsonb
|
|
|
embedding | vector(1024)
|
|
|
created_at | timestamp without time zone |
| not null | now()
updated_at | timestamp without time zone |
| not null | now()
Indexes:
&quot;pg_nodes_pkey&quot; PRIMARY KEY, btree (id)
Referenced by:
TABLE &quot;pg_relations&quot; CONSTRAINT &quot;pg_relations_source_id_fkey&quot; FOREIGN KEY (source_id) REFERENCES
pg_nodes(id)
TABLE &quot;pg_relations&quot; CONSTRAINT &quot;pg_relations_target_id_fkey&quot; FOREIGN KEY (target_id) REFERENCES
pg_nodes(id)
ノードは埋め込みベクトル
を持てる
15


# Page. 16

![Page Image](https://bcdn.docswell.com/page/LJ148KRZJG.jpg)

エッジ用テーブル（pg_relations）の定義
postgres=# \d pg_relations
Table &quot;public.pg_relations&quot;
Column
|
Type
| Collation | Nullable |
Default
------------+-----------------------------+-----------+----------+----------------------------------------id
| integer
|
| not null | nextval(&#039;pg_relations_id_seq&#039;::regclass)
label
| character varying(512)
|
| not null |
source_id | character varying(512)
|
|
|
target_id | character varying(512)
|
|
|
properties | jsonb
|
|
|
created_at | timestamp without time zone |
| not null | now()
updated_at | timestamp without time zone |
| not null | now()
Indexes:
&quot;pg_relations_pkey&quot; PRIMARY KEY, btree (id)
Foreign-key constraints:
&quot;pg_relations_source_id_fkey&quot; FOREIGN KEY (source_id) REFERENCES pg_nodes(id)
&quot;pg_relations_target_id_fkey&quot; FOREIGN KEY (target_id) REFERENCES pg_nodes(id)
16


# Page. 17

![Page Image](https://bcdn.docswell.com/page/GJWXZD16E2.jpg)

ノード用テーブルに含まれる label（タイプ）の内訳
postgres=# SELECT label, COUNT(*) AS label_count FROM pg_nodes GROUP BY label ORDER BY label;
label
| label_count
------------+------------entity
|
242
node
|
1
text_chunk |
20
(3 rows)
node は 1 文書あたり 1 行（レコード）
text_chunk は文章をチャンク化（分割）したもの
（親は node になる）
17


# Page. 18

![Page Image](https://bcdn.docswell.com/page/4EZ61GPRE3.jpg)

node 行（レコード）の例
postgres=# SELECT id, length(text) AS text_length, name, label, properties, (embedding IS NOT NULL) AS
embedding_exists, created_at, updated_at FROM pg_nodes WHERE label = &#039;node&#039;;
-[ RECORD 1 ]----+------------------------------------id
| c29a6201-5921-4a01-bf6c-5cbf13f246dd
text_length
|
name
|
label
| node
properties
| {}
embedding_exists | f
created_at
| 2025-06-21 13:47:11.327101
updated_at
| 2025-06-21 13:47:11.327101
埋め込みベクトルを
文章チャンクは持たない
持たない
埋め込みベクトルも
持たない
18


# Page. 19

![Page Image](https://bcdn.docswell.com/page/Y762LYM1EV.jpg)

text_chunk 行（レコード）の例
postgres=# SELECT id, length(text) AS text_length, name, label, properties, (embedding IS NOT NULL) AS
embedding_exists, created_at, updated_at FROM pg_nodes WHERE label = &#039;text_chunk&#039; ORDER BY created_at LIMIT
1;
-[ RECORD 1 ]----+------------------------------------------------------------------------------------（略）
id
| 74b585c0-6889-46eb-9c3c-75d4e68dae78
text_length
| 975
name
|
label
| text_chunk
properties
| {&quot;doc_id&quot;: &quot;c29a6201-5921-4a01-bf6c-5cbf13f246dd&quot;, （略）}
embedding_exists | t
created_at
| 2025-06-21 13:47:09.82389
updated_at
| 2025-06-21 13:47:09.835153
文章チャンクを持つ
埋め込みベクトルを
nameは持たない
持たない
文章チャンクの
埋め込みベクトルを持つ
19


# Page. 20

![Page Image](https://bcdn.docswell.com/page/G7521GZL74.jpg)

文章チャンク関連のエッジ行の内訳
postgres=# SELECT COUNT(*) FROM pg_relations;
count
------253
(1 row)
postgres=# SELECT label, COUNT(label) FROM pg_relations WHERE label IN(&#039;SOURCE&#039;, &#039;PREVIOUS&#039;, &#039;NEXT&#039;) GROUP
BY label ORDER BY label;
label
| count
----------+------NEXT
|
19
PREVIOUS |
19
SOURCE
|
20
(3 rows)
文章チャンク関連の
エッジの数
20


# Page. 21

![Page Image](https://bcdn.docswell.com/page/9J241YR37R.jpg)

子（チャンク）→親を示すエッジ行（レコード）の例
postgres=# SELECT id, label, source_id, target_id, properties, created_at, updated_at FROM pg_relations
WHERE label = &#039;SOURCE&#039; ORDER BY created_at LIMIT 2;
-[ RECORD 1 ]-----------------------------------------------------------------------------------------（略）
id
| 11
label
| SOURCE
source_id | 74b585c0-6889-46eb-9c3c-75d4e68dae78
target_id | c29a6201-5921-4a01-bf6c-5cbf13f246dd
properties | {（略）, &quot;triplet_source_id&quot;: &quot;74b585c0-6889-46eb-9c3c-75d4e68dae78&quot;, （略）}
created_at | 2025-06-21 13:47:11.329644
updated_at | 2025-06-21 13:47:11.331238
-[ RECORD 2 ]-----------------------------------------------------------------------------------------（略）
id
| 22
label
| SOURCE
source_id | 927e5ae7-a57b-4681-8737-86fc99fa2cb8
target_id | c29a6201-5921-4a01-bf6c-5cbf13f246dd
properties | {（略）, &quot;triplet_source_id&quot;: &quot;927e5ae7-a57b-4681-8737-86fc99fa2cb8&quot;, （略）}
created_at | 2025-06-21 13:47:11.403122
updated_at | 2025-06-21 13:47:11.407789
親（node）のIDは同じ
21


# Page. 22

![Page Image](https://bcdn.docswell.com/page/DEYMZGD8EM.jpg)

チャンクの前後関係を示すエッジ行（レコード）の例
postgres=# SELECT id, label, source_id, target_id, properties, created_at, updated_at FROM pg_relations
WHERE label = &#039;PREVIOUS&#039; ORDER BY created_at LIMIT 2;
-[ RECORD 1 ]-----------------------------------------------------------------------------------------（略）
id
| 23
label
| PREVIOUS
source_id | 927e5ae7-a57b-4681-8737-86fc99fa2cb8
target_id | 74b585c0-6889-46eb-9c3c-75d4e68dae78
properties | {（略）, &quot;triplet_source_id&quot;: &quot;927e5ae7-a57b-4681-8737-86fc99fa2cb8&quot;, （略）}
created_at | 2025-06-21 13:47:11.409412
updated_at | 2025-06-21 13:47:11.413127
-[ RECORD 2 ]-----------------------------------------------------------------------------------------（略）
id
| 36
label
| PREVIOUS
source_id | d5580129-a61c-41db-8003-25187e473c0b
target_id | 927e5ae7-a57b-4681-8737-86fc99fa2cb8
properties | {（略）, &quot;triplet_source_id&quot;: &quot;d5580129-a61c-41db-8003-25187e473c0b&quot;, （略）}
created_at | 2025-06-21 13:47:11.488719
updated_at | 2025-06-21 13:47:11.493809
1つ前のチャンクのID
22


# Page. 23

![Page Image](https://bcdn.docswell.com/page/VJNW3G69J8.jpg)

文章チャンクのグラフ構造
● node（黄）が中心にある
○ 全ての text_chunk の親
23


# Page. 24

![Page Image](https://bcdn.docswell.com/page/YE9X9WL373.jpg)

ノードに含まれる entity 行（レコード）の例
postgres=# SELECT id, length(text) AS text_length, name, label, properties, (embedding IS NOT NULL) AS
embedding_exists, created_at, updated_at FROM pg_nodes WHERE label = &#039;entity&#039; ORDER BY created_at LIMIT 2;
-[ RECORD 1 ]----+------------------------------------------------------------------------------------（略）
id
| 私
text_length
|
name
| 私
label
| entity
properties
| {（略）, &quot;triplet_source_id&quot;: &quot;64ce47cd-969f-4bdc-9eda-ee18e7caf20c&quot;, （略）}
embedding_exists | t
created_at
| 2025-06-21 13:47:09.913373
updated_at
| 2025-06-21 13:47:10.518213
-[ RECORD 2 ]----+------------------------------------------------------------------------------------（略）
id
| 文章を書くこと
text_length
|
name
| 文章を書くこと
label
| entity
properties
| {（略）, &quot;triplet_source_id&quot;: &quot;1775422f-573d-4ade-8fce-50a4fcf1a463&quot;, （略）}
embedding_exists | t
created_at
| 2025-06-21 13:47:09.916022
updated_at
| 2025-06-21 13:47:10.570029
単語（主語・目的語）を主キー（id）に
→同じ単語が複数登録されることはない
24


# Page. 25

![Page Image](https://bcdn.docswell.com/page/GE829NXLED.jpg)

ノードに含まれる entity 行（レコード）の例
postgres=# SELECT id, length(text) AS text_length, name, label, properties, (embedding IS NOT NULL) AS
embedding_exists, created_at, updated_at FROM pg_nodes WHERE label = &#039;entity&#039; ORDER BY created_at LIMIT 2;
-[ RECORD 1 ]----+------------------------------------------------------------------------------------（略）
id
| 私
text_length
|
name
| 私
label
| entity
properties
| {（略）, &quot;triplet_source_id&quot;: &quot;64ce47cd-969f-4bdc-9eda-ee18e7caf20c&quot;, （略）}
embedding_exists | t
created_at
| 2025-06-21 13:47:09.913373
updated_at
| 2025-06-21 13:47:10.518213
-[ RECORD 2 ]----+------------------------------------------------------------------------------------（略）
id
| 文章を書くこと
text_length
|
name
| 文章を書くこと
label
| entity
properties
| {（略）, &quot;triplet_source_id&quot;: &quot;1775422f-573d-4ade-8fce-50a4fcf1a463&quot;, （略）}
embedding_exists | t
created_at
| 2025-06-21 13:47:09.916022
updated_at
| 2025-06-21 13:47:10.570029
同じ単語が別の文章チャンクに出てきたら
どんどん上書き（UPSERT）される
25


# Page. 26

![Page Image](https://bcdn.docswell.com/page/LEL2WP8Q7R.jpg)

ノードに含まれる entity 行（レコード）の例
postgres=# SELECT id, length(text) AS text_length, name, label, properties, (embedding IS NOT NULL) AS
embedding_exists, created_at, updated_at FROM pg_nodes WHERE label = &#039;entity&#039; ORDER BY created_at LIMIT 2;
-[ RECORD 1 ]----+------------------------------------------------------------------------------------（略）
id
| 私
text_length
|
name
| 私
label
| entity
properties
| {（略）, &quot;triplet_source_id&quot;: &quot;64ce47cd-969f-4bdc-9eda-ee18e7caf20c&quot;, （略）}
embedding_exists | t
created_at
| 2025-06-21 13:47:09.913373
updated_at
| 2025-06-21 13:47:10.518213
-[ RECORD 2 ]----+------------------------------------------------------------------------------------（略）
id
| 文章を書くこと
text_length
|
name
| 文章を書くこと
label
| entity
properties
| {（略）, &quot;triplet_source_id&quot;: &quot;1775422f-573d-4ade-8fce-50a4fcf1a463&quot;, （略）}
embedding_exists | t
created_at
| 2025-06-21 13:47:09.916022
updated_at
| 2025-06-21 13:47:10.570029
nameを持つ（idと同じ）
26


# Page. 27

![Page Image](https://bcdn.docswell.com/page/4JM894XKJW.jpg)

ノードに含まれる entity 行（レコード）の例
postgres=# SELECT id, length(text) AS text_length, name, label, properties, (embedding IS NOT NULL) AS
embedding_exists, created_at, updated_at FROM pg_nodes WHERE label = &#039;entity&#039; ORDER BY created_at LIMIT 2;
-[ RECORD 1 ]----+------------------------------------------------------------------------------------（略）
id
| 私
text_length
|
name
| 私
label
| entity
properties
| {（略）, &quot;triplet_source_id&quot;: &quot;64ce47cd-969f-4bdc-9eda-ee18e7caf20c&quot;, （略）}
embedding_exists | t
created_at
| 2025-06-21 13:47:09.913373
updated_at
| 2025-06-21 13:47:10.518213
-[ RECORD 2 ]----+------------------------------------------------------------------------------------（略）
id
| 文章を書くこと
text_length
|
name
| 文章を書くこと
label
| entity
properties
| {（略）, &quot;triplet_source_id&quot;: &quot;1775422f-573d-4ade-8fce-50a4fcf1a463&quot;, （略）}
embedding_exists | t
created_at
| 2025-06-21 13:47:09.916022
updated_at
| 2025-06-21 13:47:10.570029
id:1「私」と id:2「文章を書くこと」が
埋め込みベクトル化されている
27


# Page. 28

![Page Image](https://bcdn.docswell.com/page/PJR5GWN6E9.jpg)

トリプレットを示すエッジ行（レコード）の例
postgres=# SELECT id, label, source_id, target_id, properties, created_at, updated_at FROM pg_relations
ORDER BY created_at LIMIT 2;
-[ RECORD 1 ]-----------------------------------------------------------------------------------------（略）
id
| 1
label
| 取り組んできた
source_id | 私
target_id | 文章を書くこと
properties | {（略）, &quot;triplet_source_id&quot;: &quot;74b585c0-6889-46eb-9c3c-75d4e68dae78&quot;, （略）}
created_at | 2025-06-21 13:47:11.275447
updated_at | 2025-06-21 13:47:11.282648
-[ RECORD 2 ]-----------------------------------------------------------------------------------------（略）
id
| 2
label
| 取り組んできた
source_id | 私
target_id | プログラミング
properties | {（略）, &quot;triplet_source_id&quot;: &quot;74b585c0-6889-46eb-9c3c-75d4e68dae78&quot;, （略）}
created_at | 2025-06-21 13:47:11.284701
updated_at | 2025-06-21 13:47:11.287974
idはシーケンス値
→同じ組み合わせのトリプレットが複数存在し
うる（別の文章チャンクから抽出した場合）
28


# Page. 29

![Page Image](https://bcdn.docswell.com/page/PEXKXPNDJX.jpg)

トリプレットを示すエッジ行（レコード）の例
postgres=# SELECT id, label, source_id, target_id, properties, created_at, updated_at FROM pg_relations
ORDER BY created_at LIMIT 2;
-[ RECORD 1 ]-----------------------------------------------------------------------------------------（略）
id
| 1
label
| 取り組んできた
source_id | 私
target_id | 文章を書くこと
properties | {（略）, &quot;triplet_source_id&quot;: &quot;74b585c0-6889-46eb-9c3c-75d4e68dae78&quot;, （略）}
created_at | 2025-06-21 13:47:11.275447
updated_at | 2025-06-21 13:47:11.282648
-[ RECORD 2 ]-----------------------------------------------------------------------------------------（略）
id
| 2
label
| 取り組んできた
source_id | 私
target_id | プログラミング
properties | {（略）, &quot;triplet_source_id&quot;: &quot;74b585c0-6889-46eb-9c3c-75d4e68dae78&quot;, （略）}
created_at | 2025-06-21 13:47:11.284701
updated_at | 2025-06-21 13:47:11.287974
同じ組み合わせが別の文章チャンクに現れ
ても上書き（UPSERT）されない
29


# Page. 30

![Page Image](https://bcdn.docswell.com/page/3EK5WDNDJD.jpg)

トリプレットのグラフ構造（一部）
● 「私」を中心に見てみる
30


# Page. 31

![Page Image](https://bcdn.docswell.com/page/L73K1RVP75.jpg)

検索時（デフォルトの Retriever 構成）
● LLM に渡すコンテキストをグラフストアで検索・取得
○ VectorContextRetriever で entity ノードをベクトル検索
■
ベクトル類似度の高い entity ノードの単語を含むトリプレットを取得
■
あわせてトリプレット抽出元の text_chunk ノードを取得
○ LLMSynonymRetriever で類義語を複数（デフォルト 10 個）生成
し、それらを使って entity ノードを主キー検索
■
同じ主キー値を持つ entity ノードの単語を含むトリプレットを取得
■
あわせてトリプレット抽出元の text_chunk ノードを取得
31


# Page. 32

![Page Image](https://bcdn.docswell.com/page/87D3XY83JG.jpg)

検索時（デフォルトの Retriever 構成）
● 取得したトリプレットと文章チャンクをコンテキストと
して付加して質問文を LLM に送信
○ ここから先は通常の RAG と同じ
● 文章チャンクのグラフ構造は使用していない（おそらく）
○ トリプレットのエッジに保存された ID を使って text_chunk
ノードを取得してコンテキストとして使っているのみ
32


# Page. 33

![Page Image](https://bcdn.docswell.com/page/VJP4P68P78.jpg)

実際の送信プロンプト例
● 質問文「学生時代にしたことは？」
Context information is below.
--------------------file_path: （略）
検索・取得したトリプレット
Here are some facts extracted from the provided text:
卒業証書 -&gt; 記載 -&gt; Artificial intelligence
学生 -&gt; 独学 -&gt; 問題なかった
学生 -&gt; 意識 -&gt; 進むべき道
（略）
授業の中でではなく、独学という形ではあったが、それでも問題なかった。この数年間、私は自分が進むべき道をはっきりと意識していた。
検索・取得した文章チャンク
学部の卒業論文では、SHRDLUをリバースエンジニアリングした。私はこのプログラムを作ることが本当に好きだった。
（略）
--------------------Given the context information and not prior knowledge, answer the query.
Query: 学生時代にしたことは？
Answer:
質問文
33


# Page. 34

![Page Image](https://bcdn.docswell.com/page/2EVX23NVJQ.jpg)

試してみた感想
● 応答内容が絞り込まれている印象
○ ハルシネーションが軽減される代わりに少しそっけない？
■
プロンプトとパラメータのチューニング次第？
→取得トリプレット数や辿るグラフ階層の数、取得チャンク数など
34


# Page. 35

![Page Image](https://bcdn.docswell.com/page/57GVR3K17L.jpg)

試してみた感想
● 応答が少し遅い
○ LLMSynonymRetriever で類義語抽出を LLM にさせている部分
の待ち時間が余分にかかっている
■
今回のケースではあまり有効に機能していない様子だったので
LLMSynonymRetriever を外しても良かったかも？
35


# Page. 36

![Page Image](https://bcdn.docswell.com/page/4EQ6V5NNEP.jpg)

試してみた感想
● 条件次第で RDBMS もグラフストアとして使用可能？
○ 辿るグラフ階層数が 1（デフォルト）であれば通常の JOIN で十分
■
2 〜 3 階層になってくるとエッジの数が格段に増えそうなので厳しい？
36


# Page. 37

![Page Image](https://bcdn.docswell.com/page/KJ44M9G3J1.jpg)

参考（今回使ったコードなど）
● GitHub リポジトリ
○
https://github.com/hmatsu47/llama-index-graph-stores-postgres
○
https://github.com/hmatsu47/llama_index_property_graph_test
○
https://github.com/hmatsu47/llama_index/issues?q=is%3Aissue%20state
%3Aclosed
37


