要旨
日本語データでGraphRAGを動かすのに挫折したので、次の矛先として
ナレッジグラフを使ったRAGを実装した事例であるこちらの記事を、まったりと追試していく。
https://qiita.com/satken2/items/ea3ddc5f273d43cd63d4?utm_source=chatgpt.com
まずは以下の内容でNeo4jの準備から。
・Neo4jをDockerコンテナで起動する手順を記述する
・単一のコンテナで構成されるが、コンテナ起動時のオプションを明示的に記録するために敢えてdocker compose
を利用する
Neo4jのDockerコンテナを起動する
Docker Composeによる環境構築
Neo4jをDockerコンテナで運用する際、docker run
コマンドでも起動可能だが、以下の理由からdocker compose
を利用する。
- 起動時のオプション(環境変数、ポート、ボリュームなど)を明示的に記録できる。
- 複数のサービスを一括管理する準備が容易になる。
以下は、docker-compose.yml
の例である。
dservices:
neo4j:
image: neo4j:latest
ports:
- "7474:7474"
- "7687:7687"
environment:
NEO4J_AUTH: "neo4j/[8文字以上のパスワード]"
NEO4J_apoc_export_file_enabled: "true"
NEO4J_apoc_import_file_enabled: "true"
NEO4J_apoc_import_file_use__neo4j__config: "true"
NEO4J_dbms_security_procedures_unrestricted: "apoc.*"
ulimits:
nofile:
soft: 40000
hard: 40000
volumes:
- ./data:/data
- ./logs:/logs
- ./conf:/conf
- ./plugins:/plugins
docker-compose.yml
を保存後、以下のコマンドでコンテナを起動する。
docker compose up -d
起動後、http://localhost:7474
にアクセスし、管理画面が表示されればOK。
管理画面にはdocker-compose.yaml
で設定したID「neo4j」とそのパスワードでログインする。
動作確認
テストデータの登録
起動したNeo4jにテストデータを登録する。
-
ブラウザ管理画面で以下のCypherクエリを実行し、ノードとリレーションシップを作成する。
CREATE (p:Person {name: "Alice", age: 30})-[:KNOWS]->(p2:Person {name: "Bob", age: 25})
-
登録したデータを確認する。
MATCH (n) RETURN n
データ永続化の確認
コンテナを再起動してデータが永続化されているか確認する。
-
コンテナを停止する。
docker compose down
-
コンテナを再起動する。
docker compose up -d
-
再びCypherクエリを実行し、データが存在することを確認する。
MATCH (n) RETURN n
APOCのインストール
APOCとは
APOC (Awesome Procedures On Cypher) は、Neo4jにおける拡張機能の一つである。データ操作、外部データの取り込み、ランダムグラフ生成など、Neo4jの基本機能を拡張するプロシージャを提供する。
製品の標準機能として取り込まれた拡張機能も多々あるようで、とりあえずコアのAPOC入れておいたほうがいい、ということらしい。
APOCバイナリのインストール
コンテナで起動したNeo4jにはAPOCのバイナリが含まれていないため、手動でインストールする必要がある。
-
Neo4jのバージョンを確認する。
docker exec -it neo4j-neo4j-1 neo4j --version
-
Neo4jのバージョンに対応するAPOCをGitHubリリースページからダウンロードする。
wget https://github.com/neo4j/apoc/releases/download/<version>/apoc-<version>-core.jar
-
ダウンロードしたファイルをホストマシンの
plugins
ディレクトリに配置する。mv apoc-<version>-core.jar ./plugins/
-
コンテナを再起動する。
docker compose down docker compose up -d
-
Neo4jブラウザで以下のクエリを実行し、APOCが利用可能になっていることを確認する。
CALL apoc.help('apoc')
感想
ブラウザの管理画面で直にSQL…ではなくCypherクエリを実行できること、その結果がなんというか昇順に表示されていくことなど、RDBMSしか知らない身からするとかなり風変わり(同時にめちゃくちゃ動作確認しやすくて好ましい)なインターフェースをしているように思う。
以上