تتيح حزمة Neo4j GraphRAG الرسمية لـ Python للمطورين إنشاء تطبيقات الجيل المعزز لاسترجاع الرسوم البيانية (GraphRAG) باستخدام قوة Neo4j وPython. وباعتبارها مكتبة الطرف الأول، فإنها توفر حلاً قويًا وغنيًا بالميزات وعالي الأداء، مع ضمان إضافي للدعم والصيانة طويلة المدى مباشرةً من 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 الخاص بك حتى تتمكن من استخدام هذه الميزة
تقدم هذه الحزمة طريقتين لإنشاء الرسم البياني المعرفي.
توفر فئة 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 الخاصة بك. من المهم ملاحظة أن هناك طرقًا بديلة، مثل استخدام برنامج التشغيل 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
. راجع مجلد 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 install --with dev
إذا كان لديك خطأ للإبلاغ عنه أو ميزة لطلبها، فابحث أولاً لمعرفة ما إذا كانت المشكلة موجودة بالفعل. إذا لم تكن هناك مشكلة ذات صلة، فيرجى إثارة مشكلة جديدة باستخدام نموذج المشكلة.
إذا كنت أحد عملاء Neo4j Enterprise، فيمكنك أيضًا التواصل مع دعم العملاء.
إذا لم يكن لديك خطأ للإبلاغ عنه أو طلب ميزة، ولكنك بحاجة إلى المساعدة في المكتبة؛ يتوفر دعم المجتمع عبر مجتمع Neo4j عبر الإنترنت و/أو Discord.
main
وابدأ بتغييراتك!تتبع قاعدة التعليمات البرمجية الخاصة بنا معايير التنسيق والفحص الصارمة باستخدام Ruff لفحوصات جودة التعليمات البرمجية وMypy للتحقق من النوع. قبل المساهمة، تأكد من أن كل التعليمات البرمجية منسقة بشكل صحيح، وخالية من مشاكل الفحص، وتتضمن تعليقات توضيحية دقيقة للنوع.
ويشترط الالتزام بهذه المعايير حتى يتم قبول المساهمات.
نوصي بإعداد الالتزام المسبق لأتمتة عمليات فحص جودة التعليمات البرمجية. وهذا يضمن أن تغييراتك تتوافق مع إرشاداتنا قبل الالتزام بها.
قم بتثبيت الالتزام المسبق باتباع دليل التثبيت.
قم بإعداد خطافات الالتزام المسبق عن طريق تشغيل:
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