- 2024/12/16 掲載
GraphRAGとは何かを解説、従来型RAGとの違いは?活用手順もイチから紹介(3/3)
Neo4jの使い方とは? 手順をイチから解説
ここまでグラフデータベースの特徴について解説してきたが、理解のために最も有効なのは、実際に手を動かしてグラフデータベースを構築してみることだろう。ここからは、最も広く使われているグラフデータベースであるNeo4jのAuraデータベースの基礎的な使い方を解説していきたい。
まず、Neo4jのWebサイトにアクセスし、無料登録を行う。
登録手順を進めていくと、以下のようなデータベースのインスタンス選択ページが表示されるので、無料版を選択する。
次にデータベースインスタンスのパスワードが生成される。「Download and continue」ボタンをクリックして次に進む。
「Download and continue」ボタンをクリックすると、以下のようなダッシュボードが表示される。インスタンスが構築されるまで数分かかるので、しばらく待つ。
インスタンス構築が完了すると以下のようになるため、「Open」ボタンをクリックして、インスタンスにアクセスする。
以下がNeo4jのデータベースインターフェースとなる。
グラフデータベースの構築を試してみた
ここでは、小規模なソーシャルネットワークのユーザー関係を表現するグラフデータベースを構築してみたい。用いるのは、Cypher言語だ。入力欄にまず入力するのは、以下のクエリだ。入力後、右端にある右向き三角ボタンをクリックして実行する。
CREATE (bob:Person {name: 'Bob', age: 35})
CREATE (charlie:Person {name: 'Charlie', age: 28})
CREATE (david:Person {name: 'David', age: 32})
このCypherクエリは、グラフデータベースにPersonノードを4つ作成するものである。
まず、CREATEコマンドを使用して、各ノードを個別に生成。()内にノードの詳細を指定し、:Personはこのノードに「Person」というラベルを付与することを意味する。ラベルはノードのカテゴリや種類を示し、後でクエリを実行する際にノードをグループ化したり、特定のタイプのノードを簡単に検索したりするのに役立つ。
続いて、中括弧{}内にノードのプロパティを定義している。nameとageという2つのプロパティを各ノードに設定しており、これらはノードの属性を表す。nameは文字列として、ageは数値として保存される。
これらのクエリは、具体的には以下を意味する。
Bobという名前で35歳のPersonノードを作成
Charlieという名前で28歳のPersonノードを作成
Davidという名前で32歳のPersonノードを作成
このクエリを実行すると、グラフデータベース内に4つの独立したPersonノードが生成される。これらのノードは、後続のクエリで関係性を追加したり、データを検索したりする際の基礎となる。
Personノードを作成すると、ダッシュボード左側にPersonノードが表示される。
これをクリックすると、以下のように、先ほど作成した4つのPersonノードが表示される。
次に4つのノード(4人のユーザー)の関係を構築していく。以下の4つのクエリを実行すると、各ノード(ユーザー)は、ほかのどのユーザーと友人関係であるのかを設定する。
MATCH (alice:Person {name: 'Alice'}), (bob:Person {name: 'Bob'})
CREATE (alice)-[:FRIENDS]->(bob)
クエリ2:
MATCH (bob:Person {name: 'Bob'}), (charlie:Person {name: 'Charlie'})
CREATE (bob)-[:FRIENDS]->(charlie)
クエリ3:
MATCH (charlie:Person {name: 'Charlie'}), (david:Person {name: 'David'})
CREATE (charlie)-[:FRIENDS]->(david)
クエリ4:
MATCH (alice:Person {name: 'Alice'}), (david:Person {name: 'David'})
CREATE (alice)-[:FRIENDS]->(david)
1つ目のクエリを例に解説したい。
MATCH (alice:Person {name: 'Alice'}), (bob:Person {name: 'Bob'})
CREATE (alice)-[:FRIENDS]->(bob)
このCypherクエリは、既存のノード間に関係性を作成している。具体的には、AliceとBobという2人のPersonノード間に「FRIENDS」という関係を設定している。
まず、MATCHステートメントを使用して、データベース内の既存のノードを検索する。
(alice:Person {name: 'Alice'})は、Personラベルを持ち、nameプロパティが'Alice'であるノードを検索し、それをaliceという変数に割り当てている。同様に、(bob:Person {name: 'Bob'})はBobのノードを検索している。
次に、CREATEステートメントで、検索された2つのノード間に新しい関係を作成している。(alice)-[:FRIENDS]->(bob)という構文は、aliceノードからbobノードへの方向性のある関係を作成することを意味する。[:FRIENDS]は、この関係の種類を「FRIENDS」と定義している。
この関係性は方向性を持っており、alice -> bob という向きに設定されている。グラフデータベースでは、関係性に方向性を持たせることで、より詳細で柔軟なデータモデリングが可能となる。
このクエリを実行すると、AliceとBobのノード間に「FRIENDS」という関係が作成される。これにより、「AliceはBobの友人である」という情報がグラフデータベースに追加されることになる。
4つのクエリを実行すると、ダッシュボード左側の「Relationships」に、「FRIENDS」が表示される。これをクリックすると、「FRIENDS」の関係を持つノードが表示される。グラフは以下のように表現される。
このようにノードとその関係性をデータベースとして構築していくことで、さまざまな分析を容易に実行できるようになる。
たとえば、この事例であれば以下のようなシンプルなクエリで、「最も多く友人を持つユーザーは誰か」を把握することが簡単に実行できるのだ。
RETURN p.name AS Person, count(friend) AS FriendCount
ORDER BY FriendCount DESC
LIMIT 1
その答えは以下の通り「Alice」である。4人の中で、2人の友人を持っており、最多となる。これは、上記のノードと関係性のグラフからも分かる。Aliceは、BobとDavidと友人関係であることが示されている。
このNeo4jグラフデータベースは、LLMマルチエージェントフレームワークであるLangchainでも使うことができるため、複数のLLMとグラフデータベースを活用したGraphRAGシステムを構築することも可能だ。
グラフデータベースとGraphRAGの活用はさらに活発化することが見込まれる。これに関してどのようなツールやアプリケーションが登場するのか、今後の注目ポイントと言えるだろう。
関連コンテンツ
PR
PR
PR