Paket resmi Neo4j GraphRAG untuk Python memungkinkan pengembang membangun aplikasi graph retrieval augmented generation (GraphRAG) menggunakan kekuatan Neo4j dan Python. Sebagai perpustakaan pihak pertama, ia menawarkan solusi yang kuat, kaya fitur, dan berkinerja tinggi, dengan jaminan tambahan berupa dukungan dan pemeliharaan jangka panjang langsung dari Neo4j.
Dokumentasi dapat ditemukan di sini
Versi | Didukung? |
---|---|
3.12 | ✓ |
3.11 | ✓ |
3.10 | ✓ |
3.9 | ✓ |
3.8 | ✗ |
Untuk menginstal versi stabil terbaru, jalankan:
pip install neo4j-graphrag
pygraphviz
digunakan untuk memvisualisasikan saluran pipa. Petunjuk instalasi dapat ditemukan di sini.
Skrip di bawah ini menunjukkan cara memulai paket dan memanfaatkan fitur-fitur utamanya. Untuk menjalankan contoh ini, pastikan Anda memiliki instance Neo4j yang aktif dan berjalan serta perbarui variabel NEO4J_URI
, NEO4J_USERNAME
, dan NEO4J_PASSWORD
di setiap skrip dengan detail instance Neo4j Anda. Sebagai contoh, pastikan untuk mengekspor kunci OpenAI Anda sebagai variabel lingkungan bernama OPENAI_API_KEY
. Contoh tambahan tersedia di folder examples
.
CATATAN: Pustaka inti APOC harus diinstal di instance Neo4j Anda untuk menggunakan fitur ini
Paket ini menawarkan dua metode untuk membuat grafik pengetahuan.
Kelas Pipeline
menyediakan opsi penyesuaian yang luas, sehingga ideal untuk kasus penggunaan tingkat lanjut. Lihat folder examples/pipeline
untuk contoh cara menggunakan kelas ini.
Untuk pendekatan yang lebih efisien, kelas SimpleKGPipeline
menawarkan lapisan abstraksi yang disederhanakan di atas Pipeline
, sehingga memudahkan pembuatan grafik pengetahuan. Kedua kelas mendukung bekerja secara langsung dengan teks dan 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 ()
Contoh grafik pengetahuan yang dibuat menggunakan skrip di atas:
Saat membuat indeks vektor, pastikan Anda mencocokkan jumlah dimensi dalam indeks dengan jumlah dimensi yang dimiliki embeddings Anda.
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 ()
Contoh ini menunjukkan salah satu metode untuk memasukkan data ke database Neo4j Anda. Penting untuk dicatat bahwa ada pendekatan alternatif, seperti menggunakan driver Neo4j Python.
Pastikan indeks vektor Anda dibuat sebelum menjalankan contoh ini.
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 ()
Harap dicatat bahwa ketika menanyakan indeks vektor Neo4j, perkiraan pencarian tetangga terdekat digunakan, yang mungkin tidak selalu memberikan hasil yang tepat. Untuk informasi selengkapnya, lihat dokumentasi Neo4j tentang batasan dan masalah indeks vektor.
Pada contoh di bawah ini, kita melakukan pencarian vektor sederhana menggunakan retriever yang melakukan pencarian kesamaan pada indeks vektor vector-index-name
.
Pustaka ini menyediakan lebih banyak retriever selain VectorRetriever
. Lihat folder examples
untuk contoh cara menggunakan retriever ini.
Sebelum menjalankan contoh ini, pastikan indeks vektor Anda telah dibuat dan diisi.
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 ()
Anda harus menandatangani perjanjian lisensi kontributor untuk memberikan kontribusi pada proyek ini.
Dependensi Python kami dikelola menggunakan Puisi. Jika Puisi belum terinstal di sistem Anda, Anda dapat mengikuti petunjuk di sini untuk menyiapkannya. Untuk memulai pengembangan proyek ini, mulailah dengan mengkloning repositori dan kemudian menginstal semua dependensi yang diperlukan, termasuk dependensi pengembangan, dengan perintah berikut:
poetry install --with dev
Jika Anda memiliki bug untuk dilaporkan atau fitur untuk diminta, cari dulu apakah masalahnya sudah ada. Jika masalah terkait tidak ada, harap ajukan masalah baru menggunakan formulir masalah.
Jika Anda adalah pelanggan Neo4j Enterprise, Anda juga dapat menghubungi Dukungan Pelanggan.
Jika Anda tidak memiliki bug untuk dilaporkan atau meminta fitur, tetapi Anda memerlukan bantuan dalam perpustakaan; dukungan komunitas tersedia melalui Komunitas Online Neo4j dan/atau Discord.
main
dan mulai dengan perubahan Anda!Basis kode kami mengikuti standar pemformatan dan linting yang ketat menggunakan Ruff untuk pemeriksaan kualitas kode dan Mypy untuk pemeriksaan jenis. Sebelum berkontribusi, pastikan semua kode diformat dengan benar, bebas dari masalah linting, dan menyertakan anotasi jenis yang akurat.
Kepatuhan terhadap standar-standar ini diperlukan agar kontribusi dapat diterima.
Kami merekomendasikan pengaturan pra-komitmen untuk mengotomatiskan pemeriksaan kualitas kode. Hal ini memastikan perubahan Anda memenuhi pedoman kami sebelum dilakukan.
Instal pra-komit dengan mengikuti panduan instalasi.
Siapkan hook pra-komit dengan menjalankan:
pre-commit install
Untuk memeriksa secara manual apakah suatu file memenuhi persyaratan kualitas, jalankan:
pre-commit run --file path/to/file
Ketika Anda selesai dengan perubahan Anda, buat permintaan tarik (PR) menggunakan alur kerja berikut.
main
.CHANGELOG.md
jika Anda telah melakukan perubahan signifikan pada proyek, antara lain:CHANGELOG.md
tetap singkat dan fokus pada perubahan yang paling penting.CHANGELOG.md
@CodiumAI-Agent /update_changelog
CHANGELOG.md
di bawah 'Berikutnya'.Instal dependensi proyek lalu jalankan perintah berikut untuk menjalankan pengujian unit secara lokal:
poetry run pytest tests/unit
Untuk menjalankan pengujian end-to-end (e2e), Anda memerlukan layanan berikut untuk dijalankan secara lokal:
Cara paling sederhana untuk mengaturnya adalah dengan menggunakan Docker Compose:
docker compose -f tests/e2e/docker-compose.yml up
(tip: Jika Anda mengalami masalah caching apa pun dalam database, Anda dapat menghapusnya sepenuhnya dengan menjalankan docker compose -f tests/e2e/docker-compose.yml down
)
Setelah semua layanan berjalan, jalankan perintah berikut untuk menjalankan tes e2e:
poetry run pytest tests/e2e