Python 用の公式 Neo4j GraphRAG パッケージを使用すると、開発者は Neo4j と Python の機能を使用してグラフ検索拡張生成 (GraphRAG) アプリケーションを構築できます。ファーストパーティ ライブラリとして、Neo4j から直接長期サポートとメンテナンスが保証される、堅牢で機能が豊富な高性能ソリューションを提供します。
ドキュメントはここにあります
バージョン | サポートされていますか? |
---|---|
3.12 | ✓ |
3.11 | ✓ |
3.10 | ✓ |
3.9 | ✓ |
3.8 | ✗ |
最新の安定バージョンをインストールするには、次を実行します。
pip install neo4j-graphrag
pygraphviz
はパイプラインを視覚化するために使用されます。インストール手順については、こちらをご覧ください。
以下のスクリプトは、パッケージの使用を開始し、その主要な機能を使用する方法を示しています。これらの例を実行するには、Neo4j インスタンスが稼働していることを確認し、各スクリプトのNEO4J_URI
、 NEO4J_USERNAME
、およびNEO4J_PASSWORD
変数を Neo4j インスタンスの詳細で更新します。例では、OpenAI キーをOPENAI_API_KEY
という名前の環境変数としてエクスポートしてください。追加の例は、 examples
フォルダーにあります。
注: この機能を使用するには、APOC コア ライブラリが Neo4j インスタンスにインストールされている必要があります
このパッケージは、ナレッジ グラフを構築するための 2 つの方法を提供します。
Pipeline
クラスは広範なカスタマイズ オプションを提供するため、高度なユースケースに最適です。このクラスの使用方法の例については、 examples/pipeline
フォルダーを参照してください。
より合理化されたアプローチとして、 SimpleKGPipeline
クラスはPipeline
上に単純化された抽象化レイヤーを提供し、ナレッジ グラフの構築を容易にします。どちらのクラスも、テキストと PDF の直接操作をサポートしています。
import asyncio
from neo4j import GraphDatabase
from neo4j_graphrag . embeddings import OpenAIEmbeddings
from neo4j_graphrag . experimental . pipeline . kg_builder import SimpleKGPipeline
from neo4j_graphrag . llm . openai_llm import OpenAILLM
NEO4J_URI = "neo4j://localhost:7687"
NEO4J_USERNAME = "neo4j"
NEO4J_PASSWORD = "password"
# Connect to the Neo4j database
driver = GraphDatabase . driver ( NEO4J_URI , auth = ( NEO4J_USERNAME , NEO4J_PASSWORD ))
# List the entities and relations the LLM should look for in the text
entities = [ "Person" , "House" , "Planet" ]
relations = [ "PARENT_OF" , "HEIR_OF" , "RULES" ]
potential_schema = [
( "Person" , "PARENT_OF" , "Person" ),
( "Person" , "HEIR_OF" , "House" ),
( "House" , "RULES" , "Planet" ),
]
# Create an Embedder object
embedder = OpenAIEmbeddings ( model = "text-embedding-3-large" )
# Instantiate the LLM
llm = OpenAILLM (
model_name = "gpt-4o" ,
model_params = {
"max_tokens" : 2000 ,
"response_format" : { "type" : "json_object" },
"temperature" : 0 ,
},
)
# Instantiate the SimpleKGPipeline
kg_builder = SimpleKGPipeline (
llm = llm ,
driver = driver ,
embedder = embedder ,
entities = entities ,
relations = relations ,
on_error = "IGNORE" ,
from_pdf = False ,
)
# Run the pipeline on a piece of text
text = (
"The son of Duke Leto Atreides and the Lady Jessica, Paul is the heir of House "
"Atreides, an aristocratic family that rules the planet Caladan."
)
asyncio . run ( kg_builder . run_async ( text = text ))
driver . close ()
上記のスクリプトを使用して作成されたナレッジ グラフの例:
ベクトル インデックスを作成するときは、インデックスの次元数が埋め込みの次元数と一致していることを確認してください。
from neo4j import GraphDatabase
from neo4j_graphrag . indexes import create_vector_index
NEO4J_URI = "neo4j://localhost:7687"
NEO4J_USERNAME = "neo4j"
NEO4J_PASSWORD = "password"
INDEX_NAME = "vector-index-name"
# Connect to the Neo4j database
driver = GraphDatabase . driver ( NEO4J_URI , auth = ( NEO4J_USERNAME , NEO4J_PASSWORD ))
# Create the index
create_vector_index (
driver ,
INDEX_NAME ,
label = "Chunk" ,
embedding_property = "embedding" ,
dimensions = 3072 ,
similarity_fn = "euclidean" ,
)
driver . close ()
この例では、Neo4j データベース内のデータを更新/挿入するための 1 つの方法を示します。 Neo4j Python ドライバーの使用など、別のアプローチがあることに注意することが重要です。
この例を実行する前に、ベクトル インデックスが作成されていることを確認してください。
from neo4j import GraphDatabase
from neo4j_graphrag . embeddings import OpenAIEmbeddings
from neo4j_graphrag . indexes import upsert_vector
NEO4J_URI = "neo4j://localhost:7687"
NEO4J_USERNAME = "neo4j"
NEO4J_PASSWORD = "password"
# Connect to the Neo4j database
driver = GraphDatabase . driver ( NEO4J_URI , auth = ( NEO4J_USERNAME , NEO4J_PASSWORD ))
# Create an Embedder object
embedder = OpenAIEmbeddings ( model = "text-embedding-3-large" )
# Generate an embedding for some text
text = (
"The son of Duke Leto Atreides and the Lady Jessica, Paul is the heir of House "
"Atreides, an aristocratic family that rules the planet Caladan."
)
vector = embedder . embed_query ( text )
# Upsert the vector
upsert_vector (
driver ,
node_id = 0 ,
embedding_property = "embedding" ,
vector = vector ,
)
driver . close ()
Neo4j ベクトル インデックスをクエリする場合、近似最近傍検索が使用されるため、常に正確な結果が得られるとは限らないことに注意してください。詳細については、ベクトル インデックスの制限と問題に関する Neo4j ドキュメントを参照してください。
以下の例では、 vector-index-name
ベクトル インデックスに対して類似性検索を実行するリトリーバーを使用して、単純なベクトル検索を実行します。
このライブラリは、 VectorRetriever
だけでなく、さらに多くの Retriever を提供します。これらのレトリバーの使用例については、 examples
フォルダーを参照してください。
この例を実行する前に、ベクトル インデックスが作成され、設定されていることを確認してください。
from neo4j import GraphDatabase
from neo4j_graphrag . embeddings import OpenAIEmbeddings
from neo4j_graphrag . generation import GraphRAG
from neo4j_graphrag . llm import OpenAILLM
from neo4j_graphrag . retrievers import VectorRetriever
NEO4J_URI = "neo4j://localhost:7687"
NEO4J_USERNAME = "neo4j"
NEO4J_PASSWORD = "password"
INDEX_NAME = "vector-index-name"
# Connect to the Neo4j database
driver = GraphDatabase . driver ( NEO4J_URI , auth = ( NEO4J_USERNAME , NEO4J_PASSWORD ))
# Create an Embedder object
embedder = OpenAIEmbeddings ( model = "text-embedding-3-large" )
# Initialize the retriever
retriever = VectorRetriever ( driver , INDEX_NAME , embedder )
# Instantiate the LLM
llm = OpenAILLM ( model_name = "gpt-4o" , model_params = { "temperature" : 0 })
# Instantiate the RAG pipeline
rag = GraphRAG ( retriever = retriever , llm = llm )
# Query the graph
query_text = "Who is Paul Atreides?"
response = rag . search ( query_text = query_text , retriever_config = { "top_k" : 5 })
print ( response . answer )
driver . close ()
このプロジェクトに貢献するには、貢献者ライセンス契約に署名する必要があります。
Python の依存関係は Poetry を使用して管理されます。 Poetry がシステムにまだインストールされていない場合は、ここの手順に従ってセットアップできます。このプロジェクトの開発を開始するには、まずリポジトリのクローンを作成し、次のコマンドを使用して、開発依存関係を含む必要な依存関係をすべてインストールします。
poetry install --with dev
報告するバグやリクエストする機能がある場合は、まず検索して問題がすでに存在するかどうかを確認してください。関連する問題が存在しない場合は、問題フォームを使用して新しい問題を提起してください。
Neo4j Enterprise の顧客の場合は、カスタマー サポートにお問い合わせいただくこともできます。
報告するバグや機能リクエストはないが、ライブラリの協力が必要な場合。コミュニティ サポートは、Neo4j オンライン コミュニティや Discord を通じて利用できます。
main
から作業ブランチを作成し、変更を開始します。私たちのコードベースは、コード品質チェックに Ruff を使用し、型チェックに Mypy を使用する、厳密なフォーマットとリンティング標準に従っています。貢献する前に、すべてのコードが適切にフォーマットされていて、リンティングの問題がなく、正確な型の注釈が含まれていることを確認してください。
寄付を受け入れるには、これらの基準を遵守する必要があります。
コード品質チェックを自動化するには、事前コミットを設定することをお勧めします。これにより、変更をコミットする前に、変更がガイドラインを満たしていることが保証されます。
インストールガイドに従って、pre-commit をインストールします。
次のコマンドを実行して、コミット前フックを設定します。
pre-commit install
ファイルが品質要件を満たしているかどうかを手動で確認するには、次のコマンドを実行します。
pre-commit run --file path/to/file
変更が完了したら、次のワークフローを使用してプル リクエスト (PR) を作成します。
main
に設定されていることを確認してください。CHANGELOG.md
更新します。CHANGELOG.md
変更は簡潔にまとめ、最も重要な変更に焦点を当てます。CHANGELOG.md
更新 @CodiumAI-Agent /update_changelog
CHANGELOG.md
ファイルの「次へ」の下にある適切なサブセクションを更新します。プロジェクトの依存関係をインストールし、次のコマンドを実行して単体テストをローカルで実行します。
poetry run pytest tests/unit
エンドツーエンド (e2e) テストを実行するには、次のサービスがローカルで実行されている必要があります。
これらを設定する最も簡単な方法は、Docker Compose を使用することです。
docker compose -f tests/e2e/docker-compose.yml up
(ヒント: データベース内でキャッシュの問題が発生した場合は、 docker compose -f tests/e2e/docker-compose.yml down
実行することで問題を完全に削除できます)
すべてのサービスが実行されたら、次のコマンドを実行して e2e テストを実行します。
poetry run pytest tests/e2e