แพ็คเกจ Neo4j GraphRAG อย่างเป็นทางการสำหรับ Python ช่วยให้นักพัฒนาสามารถสร้างแอปพลิเคชัน GraphRAG (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 บนระบบของคุณ คุณสามารถทำตามคำแนะนำที่นี่เพื่อตั้งค่าได้ หากต้องการเริ่มต้นการพัฒนาในโปรเจ็กต์นี้ ให้เริ่มต้นด้วยการโคลนพื้นที่เก็บข้อมูล จากนั้นติดตั้งการขึ้นต่อกันที่จำเป็นทั้งหมด รวมถึงการขึ้นต่อกันของการพัฒนาด้วยคำสั่งต่อไปนี้:
poetry install --with dev
หากคุณมีจุดบกพร่องที่ต้องรายงานหรือมีฟีเจอร์ที่ต้องขอ ขั้นแรกให้ค้นหาเพื่อดูว่ามีปัญหาอยู่แล้วหรือไม่ หากไม่มีปัญหาที่เกี่ยวข้อง โปรดแจ้งปัญหาใหม่โดยใช้แบบฟอร์มปัญหา
หากคุณเป็นลูกค้า Neo4j Enterprise คุณสามารถติดต่อฝ่ายสนับสนุนลูกค้าได้
หากคุณไม่มีข้อบกพร่องในการรายงานหรือคำขอคุณลักษณะ แต่คุณต้องการความช่วยเหลือจากห้องสมุด การสนับสนุนชุมชนมีให้ผ่านทางชุมชนออนไลน์ Neo4j และ/หรือ Discord
main
และเริ่มต้นด้วยการเปลี่ยนแปลงของคุณ!โค้ดเบสของเราเป็นไปตามมาตรฐานการจัดรูปแบบและ Linting ที่เข้มงวดโดยใช้ Ruff สำหรับการตรวจสอบคุณภาพโค้ดและ Mypy สำหรับการตรวจสอบประเภท ก่อนที่จะมีส่วนร่วม โปรดตรวจสอบให้แน่ใจว่าโค้ดทั้งหมดมีรูปแบบที่ถูกต้อง ไม่มีปัญหาเป็นขุย และมีคำอธิบายประกอบประเภทที่ถูกต้อง
การปฏิบัติตามมาตรฐานเหล่านี้เป็นสิ่งจำเป็นจึงจะยอมรับการบริจาคได้
เราขอแนะนำให้ตั้งค่าการคอมมิตล่วงหน้าเพื่อทำการตรวจสอบคุณภาพโค้ดโดยอัตโนมัติ เพื่อให้แน่ใจว่าการเปลี่ยนแปลงของคุณเป็นไปตามหลักเกณฑ์ของเราก่อนดำเนินการ
ติดตั้งการคอมมิตล่วงหน้าโดยทำตามคำแนะนำการติดตั้ง
ตั้งค่า hooks ล่วงหน้าโดยการรัน:
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
หากต้องการดำเนินการทดสอบแบบ end-to-end (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